【问题标题】:PDFBox bloated PDF file sizePDFBox 臃肿的 PDF 文件大小
【发布时间】:2014-12-30 19:23:51
【问题描述】:

使用 PDFBox 可以读取由 livecycle 创建的动态 PDF。下面的代码读取然后写回用于创建动态 PDF 的 xml 文件。我有点担心,因为生成的文件从 647kb pdf 开始非常大。新的 pdf 14000kb。任何人都知道如何减少生成的新文件的大小。写回pdf文件时可以设置某种类型的压缩吗?

 PDDocument doc = PDDocument.load("filename");
 doc.setAllSecurityToBeRemoved(true);
 PDDocumentCatalog docCatalog = doc.getDocumentCatalog();
 PDAcroForm form = docCatalog.getAcroForm();
 PDXFA xfa = form.getXFA();
 COSBase cos = xfa.getCOSObject();
 COSStream coss = (COSStream) cos;
 InputStream cosin = coss.getUnfilteredStream();
 Document document = documentBuilder.parse(cosin);
 COSStream cosout = new COSStream(new RandomAccessBuffer());
 OutputStream out = cosout.createUnfilteredStream();
 TransformerFactory tFactory = TransformerFactory.newInstance();
 Transformer transformer = tFactory.newTransformer();
 DOMSource source = new DOMSource(xmlDoc);
 StreamResult result = new StreamResult(out);
 transformer.transform(source, result);
 PDXFA xfaout = new PDXFA(cosout);
 form.setXFA(xfaout);

【问题讨论】:

    标签: java pdf pdfbox xdp-pdf


    【解决方案1】:

    设置过滤器:

    COSStream cosout = new COSStream(new RandomAccessBuffer());
    cosout.setFilters(COSName.FLATE_DECODE);
    

    这将设置 Flate 过滤器,这在大多数情况下都非常好。

    【讨论】:

    • 感谢,现在 pdf 文件恢复到接近 pdf 的原始大小。
    • 我主要使用PDPageContentStream,在构造函数中,它正在处理这个过滤器。但 pdf 结果仍然比原始文件大 3-4 倍。我是否还必须在最后设置过滤器?
    • 原始文件可能包含压缩的对象流,我们不支持这些。如果出现这种情况,标记的 PDF 文件可能会变得臃肿。但可以肯定的是,我必须查看您的文件。
    猜你喜欢
    • 2011-03-01
    • 2020-01-20
    • 2015-03-17
    • 2011-03-18
    • 2015-06-29
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多