在PDFBox中,为什么保存后文件大小会变得非常大?

我正在使用PDFBox 1.8.8来处理现有的PDF文件。 保存文档后,输出文件将比原始文件大几倍。 这是不可取的。

如何减小输出文件的文件大小?

如何复制我的情况

在以下代码中,PDFBox只是加载现有PDF然后保存。 没有别的办法。 然而,文件大小仍然变大了几倍。

以下是两个示例输入文件的链接。 对于input1.pdf,文件大小从6MB增加到50MB。 对于input2.pdf,文件大小从0.4MB增加到1.3MB。

https://dl.dropboxusercontent.com/u/13566649/samplePDF/input1.pdf https://dl.dropboxusercontent.com/u/13566649/samplePDF/input2.pdf

import java.io.*; import org.apache.pdfbox.pdmodel.*; import org.apache.pdfbox.exceptions.*; class Test { public static void main(String[] args) throws IOException, COSVisitorException { PDDocument document = PDDocument.load("input1.pdf"); document.save("output.pdf"); document.close(); } } 

我试过的

我已经尝试使用addCompression()类的addCompression()方法,如下面的代码所示。 它没有改变任何东西。 输出文件大小仍然相同。

 class Test2 { public static void main(String[] args) throws IOException, COSVisitorException { PDDocument document = PDDocument.load("input1.pdf"); for (int i = 0; i < document.getNumberOfPages(); i++) { PDPage page = (PDPage) document.getDocumentCatalog().getAllPages().get(i); page.getContents().addCompression(); } document.save("output.pdf"); document.close(); } } 

我写了这个奇怪的代码,它适用于我( Apache PDFBox v.2.0.8 ):

 private void saveCompressedPDF(PDDocument srcDoc, OutputStream os) throws IOException { PDDocument outDoc = new PDDocument(); outDoc.setDocumentInformation(srcDoc.getDocumentInformation()); for (PDPage srcPage : srcDoc.getPages()) { new PDPageContentStream(outDoc, srcPage, PDPageContentStream.AppendMode.APPEND, true).close(); outDoc.addPage(srcPage); } outDoc.save(os); outDoc.close(); }