PDFBox раздутый размер файла PDF

С помощью PDFBox можно читать Dynamic PDF, созданный livecycle. Код ниже читает, а затем записывает обратно XML-файл, который использовался для создания динамического PDF. Я немного обеспокоен тем, что результирующий файл довольно большой, начинается с 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);

1 ответ

Решение

Установить фильтр:

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

это установит фильтр Flate, что довольно хорошо в большинстве случаев.

Другие вопросы по тегам