如何从Pdfbox中使用PDPageContentStream类创建的Pdf中删除曲线和直线?

如何从Pdfbox中使用PDPageContentStream类创建的Pdf中删除曲线和直线?,pdf,line,pdfbox,bezier,Pdf,Line,Pdfbox,Bezier,我已经实现了允许用户使用pdfbox库在pdf中添加云和线的功能。我使用PDPageContentStream.addBezier312和PDPageContentStream.lineTo函数来绘制标记。现在,我想实现允许用户撤消、删除和移动绘制的标记的功能。为此,我需要实现删除pdf中已保存的曲线和线条的功能。我如何做到这一点?没有简单的答案,因为PDF文件并非真正用于编辑。。。您需要解析内容流以搜索“您的”曲线。请参阅源代码下载中的RemoveAllText.java示例,了解如何获取令牌

我已经实现了允许用户使用pdfbox库在pdf中添加云和线的功能。我使用PDPageContentStream.addBezier312和PDPageContentStream.lineTo函数来绘制标记。现在,我想实现允许用户撤消、删除和移动绘制的标记的功能。为此,我需要实现删除pdf中已保存的曲线和线条的功能。我如何做到这一点?

没有简单的答案,因为PDF文件并非真正用于编辑。。。您需要解析内容流以搜索“您的”曲线。请参阅源代码下载中的RemoveAllText.java示例,了解如何获取令牌。您的曲线可能是几个数字和“c”,请参见PDF规范(“运营商摘要”)和/或使用PDFDebugger查看您的文件。根据您的发展,您可能可以使用标记的内容运营商,即使用特定的标签将您的特定运营商包装成BMC/EMC对。这样,您就可以在已经存在的元素中识别您的内容。这可以与将您的内容放在单独的内容流中相结合。或者对您也可以标记以标识自己的内容使用批注。否,请使用批注将标记添加到PDF中,而不是将标记添加到页面内容流中。您可以查看示例包中的AddAnnotations.java示例,了解如何实现这一点。有不同类型的注释,允许不同的内容。如果您真的想使用标记的内容序列-除了可能更适合您需要的注释之外-您可以执行
PDPageContentStream.beginMarkedContentSequence(COSName.getPDFName(String))
使用
String
作为标识符,您可以自由选择,但应该以
XX
开头。您要寻找的是一个具有特殊用途的多边形注释,称为PolygonCloud。PDFBox中没有对此的特定支持,即外观生成需要自己完成,并为此设置特定键。由于您已经有了生成混浊外观的代码,因此转换代码不需要太多工作,您必须利用注释。最简单的方法是在AdobeReader中生成这样的注释,并将设置与代码进行比较。