如何在生成 PDF 时添加外部 CSS?
Posted
技术标签:
【中文标题】如何在生成 PDF 时添加外部 CSS?【英文标题】:How to add external CSS while generating PDF? 【发布时间】:2014-09-06 18:58:28 【问题描述】:目前我正在使用以下代码在 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 文件。
请帮帮我...
【问题讨论】:
您想要添加的 Css 文件为 pdf 中的内容提供一些样式?或者您想与 pdf 文件一起创建另外一个 css 文件? 【参考方案1】:我不确定在 java 中如何使用,但在 c# 中,您可以通过此代码添加外部样式表代码或语法:-
StyleSheet css = new StyleSheet();
css.LoadTagStyle("body", "face", "Garamond");
css.LoadTagStyle("body", "encoding", "Identity-H");
css.LoadTagStyle("body", "size", "12pt");
也许对你有帮助
问候, 维尼特
【讨论】:
【参考方案2】:请查看ParseHtmlTable1 示例。在此示例中,我们将 HTML 存储在 StringBuilder
对象中,并将一些 CSS 存储在 String
中。在我的示例中,我将sb
对象和CSS
对象转换为InputStream
。如果您有包含 HTML 和 CSS 的文件,您可以轻松使用 FileInputStream
。
一旦你有一个用于 HTML 和 CSS 的InputStream
,你就可以使用这个代码:
// CSS
Cs-s-resolver cssResolver = new StyleAttrCs-s-resolver();
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);
【讨论】:
如果您需要在 pdf 中包含图像并且 css 指向它怎么办?【参考方案3】:你可以试试这个代码参考。
$html .= '<style>'.file_get_contents(_BASE_PATH.'stylesheet.css').'</style>';
【讨论】:
【参考方案4】:将内容类型更改为
response.setContentType("application/pdf");
【讨论】:
我想下载 PDF。我没有将输出写入浏览器。 @YellaGoud 此内容类型的标准行为是要求用户执行操作(打开或下载文档)。 我认为,当您为您的意图添加一些解释时,这对操作人员和其他访问者会更有帮助。以上是关于如何在生成 PDF 时添加外部 CSS?的主要内容,如果未能解决你的问题,请参考以下文章
在 Codeigniter 中使用外部 CSS 支持将 HTML 转换为 PDF