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

Java 如何在生成PDF时添加外部CSS?,java,pdf,itext,Java,Pdf,Itext,目前,我正在使用以下代码在JSP文件中生成PDF: response.setContentType("application/force-download"); response.setHeader("Content-Disposition", "attachment;filename=reports.pdf");

目前,我正在使用以下代码在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文件


请帮助我…

您可以尝试此代码参考

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

将内容类型更改为

response.setContentType("application/pdf");
请看一看这个例子。在本例中,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);  

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

StyleSheet css = new StyleSheet();
    css.LoadTagStyle("body", "face", "Garamond");
    css.LoadTagStyle("body", "encoding", "Identity-H");
    css.LoadTagStyle("body", "size", "12pt");
这对你有帮助吗

问候,,
vinit

我想下载PDF。我没有将输出写入浏览器。@YellaGoud此内容类型的标准行为是要求用户执行操作(打开或下载dokument)。我认为,当您为您的意图添加一些解释。您想添加Css文件以对pdf中的内容进行样式化时,这对op和其他访问者会更有帮助?或者您想在创建pdf文件时再创建一个css文件?如果您需要在pdf文件中包含一个图像,并且css指向该图像,该怎么办?