首页 > 解决方案 > 仅更改特定文本颜色 + itext

问题描述

我正在使用下面的代码,它将蓝色链接的颜色从 pdf 更改为黑色:

void testAllRgbBlueToBlackConverter(String resourceName, String resultName) throws IOException {
    System.out.printf("\nConverting '%s'.\n", resourceName);
    try (   InputStream resource = getClass().getResourceAsStream(resourceName);
            PdfReader pdfReader = new PdfReader(resource);
            OutputStream result = new FileOutputStream(new File(RESULT_FOLDER, resultName));
            PdfWriter pdfWriter = new PdfWriter(result);
            PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter) ) {
        PdfCanvasEditor editor = new AllRgbBlueToBlackConverter();
        for (int i = 1; i <= pdfDocument.getNumberOfPages(); i++)
        {
            editor.editPage(pdfDocument, i);
        }
    }
}

 class AllRgbBlueToBlackConverter extends PdfCanvasEditor {
    @Override
    protected void write(PdfCanvasProcessor processor, PdfLiteral operator, List<PdfObject> operands)
    {
        String operatorString = operator.toString();

        if (RGB_SETTER_CANDIDATES.contains(operatorString) && operands.size() == 4) {
            if (isBlue(operands.get(0), operands.get(1), operands.get(2))) {
                PdfNumber number0 = new PdfNumber(0);
                operands.set(0, number0);
                operands.set(1, number0);
                operands.set(2, number0);
            }
        }

        super.write(processor, operator, operands);
    }

    boolean isBlue(PdfObject red, PdfObject green, PdfObject blue) {
        if (red instanceof PdfNumber && green instanceof PdfNumber && blue instanceof PdfNumber) {
            float r = ((PdfNumber)red).floatValue();
            float g = ((PdfNumber)green).floatValue();
            float b = ((PdfNumber)blue).floatValue();
            return b > .5f && r < .9f*b && g < .9f*b;
        }
        return false;
    }

    final Set<String> RGB_SETTER_CANDIDATES = new HashSet<>(Arrays.asList("rg", "RG", "sc", "SC", "scn", "SCN"));
}

我可以限制上面的代码吗,我只在文本等于“bla bla”时才限制更改颜色。不然不变色?如果 pdf 中有任何可用的图形,此代码也会更改图形线的颜色。

我正在使用itext。如果有人在其他库中有任何可用代码。请与我分享。自一个月以来,我一直坚持这一点。我想将特定文本的颜色从蓝色更改为黑色。

标签: itext

解决方案


推荐阅读