Изменить только определенный цвет текста + itext - PullRequest
0 голосов
/ 24 октября 2019

Я использую приведенный ниже код, который меняет цвет синих ссылок на черный с 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"));
}

Могу ли я ограничить приведенный выше код, в котором я ограничиваю это изменение цвета только тогда, когда текст равен"бла бла". В противном случае не изменить цвет? Этот код также изменяет цвет линии графика, если в pdf есть какой-либо график.

Я использую itext. Если у кого-то есть код, доступный в другой библиотеке. Пожалуйста, поделитесь этим со мной. Я застрял на этом с месяца. Я хочу изменить цвет определенного текста с синего на черный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...