我正在尝试使用 Java 中的 itextpdf 库将现有的 pdf 文件复制到一些新文件中。我使用的是 itextpdf 5.5.10 版本。我在两种方式上都面临着不同的问题:PDFStamper 和 PdfCopy。当我使用 PDFStamper 类时,我观察到新文件大小大幅增加,尽管没有添加任何新项目。这是代码片段:
String currFile="C:\misc\pdffiles\AcroJS.pdf" ;
String dest = "C:\misc\pdffiles\AcroJS_copy.pdf" ;
PdfReader reader = new PdfReader(currFile) ;
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream(dest)) ;
stamper.close() ;
reader.close() ;
Run Code Online (Sandbox Code Playgroud)
一些观察结果是:7 MB(原始)到 13 MB(大约,新文件),116 KB > 119 KB(大约)
当我复制现有的 pdf 文件时,我期望文件大小大致相同。我无法弄清楚为什么尺寸会增加那么多。
我也尝试过 PdfCopy 类。我使用 PdfCopy 遵循了两种方法:
但这两种方法的问题在于,它会丢弃 pdf 文件中的一些非内容元数据,因此新的 pdf 在由 Adobe reader 打开时会被破坏。例如我的 pdf 包含字典对象 PdfName.S 。在这种情况下,新创建的 pdf 文件只有 2KB(原始文件为 1.6 MB),这显然意味着没有任何内容复制到文档中,并且它已损坏。 …