Java 使用PDFBox或等效库从PDF中删除大型令牌

Java 使用PDFBox或等效库从PDF中删除大型令牌,java,parsing,pdf,pdfbox,Java,Parsing,Pdf,Pdfbox,我在许多PDF文档的整个首页上都贴上了带有超大标记的PDF:s,见图。我正在寻找一种自动化的方法来删除这些 Apache有一个相当广泛的API,有没有办法通过正则表达式匹配这些令牌,然后简单地删除它们并重新保存pdf 图片来自下面发布的PDF示例。我想删除的标记是:[KS/2019:589]Lokalvård Grundskolor&Idrottshallar,它们粘贴在常规文本的顶部。 您可以这样使用来自的类(不要忘记应用答案底部提到的修复): try(PDDocument=…){ PDPag

我在许多PDF文档的整个首页上都贴上了带有超大标记的PDF:s,见图。我正在寻找一种自动化的方法来删除这些

Apache有一个相当广泛的API,有没有办法通过正则表达式匹配这些令牌,然后简单地删除它们并重新保存pdf

图片来自下面发布的PDF示例。我想删除的标记是:[KS/2019:589]Lokalvård Grundskolor&Idrottshallar,它们粘贴在常规文本的顶部。

您可以这样使用来自的类(不要忘记应用答案底部提到的修复):

try(PDDocument=…){
PDPage page=document.getPage(0);
PdfContentStreamEditor编辑器=新的PdfContentStreamEditor(文档,页面){
@凌驾
受保护的无效写入(ContentStreamWriter ContentStreamWriter、运算符运算符、列表操作数)引发IOException{
字符串运算符String=operator.getName();
if(显示运算符的文本包含运算符字符串))
{
float fs=getGraphicsState().getTextState().getFontSize();
矩阵矩阵=getTextMatrix().multiply(getGraphicsState().getCurrentTransformationMatrix());
Point2D.Float transformedFsVector=矩阵.transformPoint(0,fs);
Point2D.Float transformedOrigin=矩阵.transformPoint(0,0);
double transformedFs=transformedFsVector.距离(TransformedOrgin);
如果(转换的Fs>50)
返回;
}
super.write(contentStreamWriter、运算符、操作数);
}
最终列表文本显示运算符=Arrays.asList(“Tj”、“Tj”、“Tj”、“Tj”);
};
编辑器。进程页(第页);
文件。保存(…);
}
(测试
testRemoveBigTextKommersAnnonsElite

你可以在参考答案中找到一些解释