如何识别PDF水印并使用PDFBox将其删除

麦可

我正在尝试使用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("--------------------------------------------------------------------------------");
            }
        }
    }
mkl

与您的假设相反,没有什么比PDF中显式水印对象更能识别通用PDF中的水印了。

水印可以通过多种方式应用于PDF页面。每个PDF创建库或应用程序都有其自己的添加水印的方式,有些甚至提供了多种方式。

水印可以是

  1. 在内容的早期绘制的任何内容(位图图形,矢量图形,文本等),因此形成了绘制其余内容的背景;
  2. 在内容后期以透明方式绘制的任何内容(位图图形,矢量图形,文本等),形成透明的叠加层;
  3. 在水印注释的内容流中绘制的任何内容(位图图形,矢量图形,文本等),无论其尺寸如何均应用于表示应以固定尺寸和固定位置打印在页面上的图形。印刷页面(请参阅PDF规范ISO 32000-1的12.5.6.22节)。

有时甚至使用混合形式,请查看此答案作为示例,在底部您会在图形上方但在文本下方找到“水印”(以便于阅读)。

后者的选择(水印注解)显然容易删除,但实际上它也是最不常用的选择,最有可能是因为它很容易删除。应用水印的人们通常不希望其水印丢失。此外,PDF查看器有时会错误地处理批注,并且代码复制页面内容通常会忽略批注。

另一方面,如果您不处理一般文档,而是处理特定类型的文档(均生成相同的文档),则可以识别在其中应用水印的方式,并且提取例程可能是可行的。如果您有这样的用例,请共享一个样本PDF进行检查。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何识别PDF水印并使用PDFBox删除它

来自分类Dev

如何使用pdftk从pdf删除水印?

来自分类Dev

如何使用PDFBox Java识别和删除PDF中的隐藏文本

来自分类Dev

使用pdfbox(1.7)在包含图像的pdf上添加水印

来自分类Dev

如何从PDF文件中删除水印?

来自分类Dev

如何使用文本或图像给PDF加水印?

来自分类Dev

如何使用Python的PyPDF2 lib从PDF文件中删除水印

来自分类Dev

使用Apache PDFBox从PDF删除ID字段

来自分类Dev

使用Apache PDFBox从PDF删除ID字段

来自分类Dev

从PDF添加和删除水印

来自分类Dev

使用PDFBOX根据PDF中的输出识别文本

来自分类Dev

使用PDFBOX根据PDF中的输出识别文本

来自分类Dev

如何使用pdfbox从pdf中删除可选内容组及其内容?

来自分类Dev

如何使用Windows截图工具删除水印(Windows 8)

来自分类Dev

如何使用PDFBox从HTML创建PDF文件?

来自分类Dev

如何使用pdfbox从pdf提取粗体文本?

来自分类Dev

如何使用Apache PDFBox选择PDF文本?

来自分类Dev

如何使用Apache PDFBox拆分PDF?

来自分类Dev

使用 Apache PDFBox 从 PDF 文档中删除 OCR 文本

来自分类Dev

如何在PDF中创建水印

来自分类Dev

使用PHP在PDF文件上加水印

来自分类Dev

如何使用pdfbox访问所有PDF元数据

来自分类Dev

如何使用PDFBox在PDF中绘制包含€之类的字符的文本

来自分类Dev

如何使用Apache PDFBox从PDF文件提取文本

来自分类Dev

如何使用PDFBox在pdf中查找表格边框线?

来自分类Dev

如何使用Apache pdfbox在PDF中生成多行

来自分类Dev

如何使用pdfbox在pdf中添加超链接

来自分类Dev

如何使用PDFBox在PDF中查找空白页?

来自分类Dev

如何在PDF上打印不寻常字符(使用pdfbox)

Related 相关文章

热门标签

归档