繁体   English   中英

PdfBox - 更改矩形中的字体颜色

[英]PdfBox - changing font color in rectangle

我正在尝试在 pdf 中查找某些文本并将字体颜色设为白色。 作为 POC,我已经根据 mkl 在这里编写的代码成功找到文本并在 pdf 中突出显示它: find position of text in pdf

然而,是否有可能根据接收到的坐标更改矩形内文本的字体颜色而不是突出显示文本? 或者,我可以添加一个白色矩形来覆盖文本吗?

提前致谢

编辑:我已经开始将矩形添加到 pdf 中,但是正如所述,它们的位置不正确。 这是我到目前为止所拥有的(不要介意风格,只是一个 POC):

由 mkl 提供的 TextPositionSequence 类

byte[] content = ...;
PDDocument document = PDDocument.load(content);
for (int page = 1; page <= document.getNumberOfPages(); page++) {
            List<TextPositionSequence> hits = null;
            try {
                hits = findSubwordsImproved(document, page, "[" + searchTerm + "]");
            } catch (IOException e) {
                e.printStackTrace();
            }
            for (TextPositionSequence hit : hits) {
                TextPosition lastPosition = hit.textPositionAt(hit.length() - 1);
                TextPosition firstPosition = hit.textPositionAt(0);

                PDPage actualPage = document.getPage(page - 1);

                PDRectangle cropBox = actualPage.getCropBox();

                float x = firstPosition.getTextMatrix().getTranslateX() + cropBox.getLowerLeftX();
                float y = firstPosition.getTextMatrix().getTranslateY() + cropBox.getLowerLeftY();
                float w = hit.getWidth();
                try {
                    PDPageContentStream contents = new PDPageContentStream(document, actualPage, PDPageContentStream.AppendMode.APPEND, false);
                    contents.setNonStrokingColor(Color.RED);
                    contents.addRect(x, y, w, firstPosition.getHeight());
                    contents.fill();
                    contents.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
           }
}

我已经用下面的代码解决了它。 我稍微调整了矩形的高度,以使框覆盖整个文本。 这可能需要在未来进行调整:

float posXInit = hit.getX();
float posXEnd = lastPosition.getXDirAdj() + lastPosition.getWidth();
float posYInit = firstPosition.getPageHeight() - firstPosition.getYDirAdj();
float posYEnd = firstPosition.getPageHeight() - lastPosition.getYDirAdj();
float height = firstPosition.getHeight();

PDPageContentStream contents = new PDPageContentStream(document, actualPage, PDPageContentStream.AppendMode.APPEND, false, true);
contents.setNonStrokingColor(Color.WHITE);
contents.addRect(posXInit, posYEnd - height / 3, hit.getWidth(), height * 2);
contents.fill();
contents.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM