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



我正在尝试在pdf中查找某些文本,并将字体设置为白色。作为一名POC,我已经成功地找到了文本,并根据mkl在这里编写的代码在pdf中突出显示:在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();

最新更新