如何在生成PDF时添加外部CSS?

时间:2014-07-16 09:46:38

标签: java pdf itext

目前我正在使用以下代码在JSP文件中生成PDF:

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();     

这样就能生成PDF。

但我想在生成PDF时添加CSS文件。

请帮助我......

4 个答案:

答案 0 :(得分:4)

我不确定在java中如何使用但在c#中你可以通过以下代码添加外部样式表代码或语法: -

StyleSheet css = new StyleSheet();
    css.LoadTagStyle("body", "face", "Garamond");
    css.LoadTagStyle("body", "encoding", "Identity-H");
    css.LoadTagStyle("body", "size", "12pt");

可能会帮助你

此致 vinit

答案 1 :(得分:2)

请查看ParseHtmlTable1示例。在此示例中,我们将HTML存储在StringBuilder对象中,并将一些CSS存储在String中。在我的示例中,我将sb对象和CSS对象转换为InputStream。如果您有包含HTML和CSS的文件,则可以轻松使用FileInputStream

获得HTML和CSS的InputStream后,您可以使用以下代码:

// 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()));

或者,如果您不喜欢所有代码:

ByteArrayInputStream bis = new ByteArrayInputStream(htmlSource.toString().getBytes());  
ByteArrayInputStream cis = new ByteArrayInputStream(cssSource.toString().getBytes());
XMLWorkerHelper.getInstance().parseXHtml(writer, document, bis, cis);  

答案 2 :(得分:0)

您可以尝试使用此代码参考。

$html .= '<style>'.file_get_contents(_BASE_PATH.'stylesheet.css').'</style>';

答案 3 :(得分:-2)

将内容类型更改为

response.setContentType("application/pdf");