2014-11-04 123 views
2

使用PDFBox可以读取由livecycle创建的动态PDF。下面的代码读取然后回写用于创建动态PDF的xml文件。由于生成的文件非常大,我担心647kb pdf。新的pdf 14000kb。任何人都知道如何减少生成的新文件的大小。回写到pdf文件时可以设置某种类型的压缩吗?PDFBox臃肿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); 

回答

2

设置过滤器:

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

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

+0

非常感谢,现在pdf文件已经回落到接近pdf的原始大小。 – 2014-11-04 22:15:00