我正在尝试使用Apache PDFBox库从PDF文件中提取水印文本以外的文本,因此我想先删除水印,其余的就是我想要的。但是很遗憾,PDmetadata和PDXObject都无法识别水印,没有任何帮助将不胜感激。我在下面找到了一些代码。
// Open PDF document
PDDocument document = null;
try {
document = PDDocument.load(PATH_TO_YOUR_DOCUMENT);
} catch (IOException e) {
e.printStackTrace();
}
// Get all pages and loop through them
List pages = document.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while( iter.hasNext() ) {
PDPage page = (PDPage)iter.next();
PDResources resources = page.getResources();
Map images = null;
// Get all Images on page
try {
images = resources.getImages();//How to specify watermark instead of images??
} catch (IOException e) {
e.printStackTrace();
}
if( images != null ) {
// Check all images for metadata
Iterator imageIter = images.keySet().iterator();
while( imageIter.hasNext() ) {
String key = (String)imageIter.next();
PDXObjectImage image = (PDXObjectImage)images.get( key );
PDMetadata metadata = image.getMetadata();
System.out.println("Found a image: Analyzing for Metadata");
if (metadata == null) {
System.out.println("No Metadata found for this image.");
} else {
InputStream xmlInputStream = null;
try {
xmlInputStream = metadata.createInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
System.out.println("--------------------------------------------------------------------------------");
String mystring = convertStreamToString(xmlInputStream);
System.out.println(mystring);
} catch (IOException e) {
e.printStackTrace();
}
}
// Export the images
String name = getUniqueFileName( key, image.getSuffix() );
System.out.println( "Writing image:" + name );
try {
image.write2file( name );
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
System.out.println("--------------------------------------------------------------------------------");
}
}
}
与您的假设相反,没有什么比PDF中的显式水印对象更能识别通用PDF中的水印了。
水印可以通过多种方式应用于PDF页面。每个PDF创建库或应用程序都有其自己的添加水印的方式,有些甚至提供了多种方式。
水印可以是
有时甚至使用混合形式,请查看此答案作为示例,在底部您会在图形上方但在文本下方找到“水印”(以便于阅读)。
后者的选择(水印注解)显然很容易删除,但实际上它也是最不常用的选择,最有可能是因为它很容易删除。应用水印的人们通常不希望其水印丢失。此外,PDF查看器有时会错误地处理批注,并且代码复制页面内容通常会忽略批注。
另一方面,如果您不处理一般文档,而是处理特定类型的文档(均生成相同的文档),则可以识别在其中应用水印的方式,并且提取例程可能是可行的。如果您有这样的用例,请共享一个样本PDF进行检查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句