I would like to add a CSS file while generating PDF.
Currently i am using following code to generate PDF in a JSP file:
response.setContentType("application/force-download"); response.setHeader("Content-Disposition", "attachment;filename=reports.pdf"); Document document = new Document(); document.setPageSize(PageSize.A1); PdfWriter writer = null; writer = PdfWriter.getInstance(document, response.getOutputStream()); document.open(); ByteArrayInputStream bis = new ByteArrayInputStream(htmlSource.toString().getBytes()); XMLWorkerHelper.getInstance().parseXHtml(writer, document, bis); document.close();
With this code, I'm able to generate PDF, but I would like to add a CSS file while generating PDF.
Posted on StackOverflow on Jul 16, 2014 by Yella Goud
Please take a look at the ParseHtmlTable1 example. In this example, we have HTML stored in a StringBuilder object and some CSS stored in a String. In my example, I convert the sb object and the CSS object to an InputStream. If you have files with the HTML and the CSS, you could easily use a FileInputStream.
Once you have an InputStream for the HTML and the CSS, you can use this code:
// CSS CSSResolver cssResolver = new StyleAttrCSSResolver(); CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(CSS.getBytes())); cssResolver.addCss(cssFile); // HTML HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); // Pipelines PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer); HtmlPipeline html = new HtmlPipeline(htmlContext, pdf); CssResolverPipeline css = new CssResolverPipeline(cssResolver, html); // XML Worker XMLWorker worker = new XMLWorker(css, true); XMLParser p = new XMLParser(worker); p.parse(new ByteArrayInputStream(sb.toString().getBytes()));
Or, if you don't like all that code:
ByteArrayInputStream bis = new ByteArrayInputStream(htmlSource.toString().getBytes()); ByteArrayInputStream cis = new ByteArrayInputStream(cssSource.toString().getBytes()); XMLWorkerHelper.getInstance().parseXHtml(writer, document, bis, cis);