1 回答

TA貢獻1725條經驗 獲得超8個贊
在HTML到PDF的渲染過程中,我將其保存到內存中,稍后用于PdfSmartCopy生成slim pdf版本,這可以防止我在文件系統中生成兩個不同的pdf文件(稍后無法刪除)非纖薄的),如果對其他人有幫助,請粘貼以下代碼:
try (ByteArrayOutputStream byteData = new ByteArrayOutputStream()) {
? ? Document document = new Document(PageSize.A4);
? ? PdfWriter writer = PdfWriter.getInstance(document, byteData);? ? ? ? ? ?
? ? writer.setInitialLeading(12.5f);
? ? document.open();
? ? CSSResolver cssResolver = new StyleAttrCSSResolver();
? ? CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream("itext2\\css\\bootstrap.min.css"));
? ? cssResolver.addCss(cssFile);
? ? HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
? ? htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
? ? PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
? ? HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
? ? CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
? ? XMLWorker worker = new XMLWorker(css, true);
? ? XMLParser p = new XMLParser(worker);
? ? String fileContent = PdfTest.readFile("itext2\\template.html");
? ? p.parse(new StringReader(fileContent));
? ? document.close();
? ? PdfReader reader = new PdfReader(byteData.toByteArray());
? ? Document document1 = new Document();
? ? File resultFile = new File("result.pdf");
? ? PdfSmartCopy pdfCopy = new PdfSmartCopy(document1, new FileOutputStream(resultFile));
? ? document1.open();
? ? PdfImportedPage page;
? ? for (int pageNumber = 1; pageNumber <= reader.getNumberOfPages(); pageNumber++) {
? ? ? ? page = pdfCopy.getImportedPage(reader, pageNumber);
? ? ? ? pdfCopy.addPage(page);
? ? }
? ? document1.close();
? ? byteData.close();
} catch (Exception e) {
? ? e.printStackTrace();
}
添加回答
舉報