题
我正在使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的
我尝试使用类的addCompression()
方法PDStream
,如以下代码所示。它不会改变任何东西。输出文件大小仍然相同。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我写了这段奇怪的代码,它对我有用(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();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2889 次 |
最近记录: |