繁体   English   中英

使用iText External CSS将HTML转换为PDF

[英]HTML to PDF using iText External CSS

我正在使用Flying Saucer将一些PDF文档从字符串渲染为HTML。

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream is = new ByteArrayInputStream(html.getBytes("UTF-8"));
Document doc = builder.parse(is);

response.setContentType("application/pdf; charset=UTF-8");
response.setHeader("Content-disposition", "inline; filename=\"" + outFileName + "\"");

OutputStream os = response.getOutputStream();

ITextRenderer iTextRenderer = new ITextRenderer();
iTextRenderer.setDocument(doc,null);
iTextRenderer.layout();
iTextRenderer.createPDF(os);
os.flush();
os.close();

当我有纯文本时,这很好用。 我在HTML内容中引用了一个外部CSS。 但是,当生成PDF时,CSS不会被应用。

我读过setDocument()方法有两个参数:document和url。 url参数指示用于添加到xhtml中出现的相对路径的基本URL,例如外部CSS

所以,我试图供应

上下文路径/ css

baseURL中的direcotry并在setDocument()使用它。 仍然没有结果

那么,我的问题作为baseURL传递的正确URL是什么?

String baseURL = ""; // What goes here as root URL for resources
iTextRenderer.setDocument(doc,baseURL);

FAQ告诉我们:

url是“base”,对于普通URL,它将是父位置 - 父目录,或者是您呈现的文档所在的位置。如果您的文档具有CSS和图像的绝对URI,或者它没有外部引用,然后基本URL可以为null。如果您的文档具有CSS或图像的任何相对URI,则基本URL不应为null,而应指向当前文档所在的目录或地址。

您是否测试了文档的路径而不是css的路径? 但是,我在链接CSS方面遇到了一些麻烦,所以我插入了URI(到目前为止没有问题:-))。 如果您使用上面发布的链接,它是否有效?

对不起新帖子,但评论告诉我,我只剩下负面的字母...

您可以通过put来插入CSS路径
<link rel="stylesheet" type="text/css" href="file://path/to/your.css" />
进入你的文件(头)。

(在某些情况下,您可以使用简单路径而不是URI)

问题不在于文件路径,问题在于媒体。 有一件事是渲染到屏幕和其他渲染来打印媒体,如PDF文件。 因此,您需要在XML文件中的样式表TAG中添加属性。

来自code.google.com/p/flying-saucer/wiki/FAQPDF

我的PDF没有拿起我的CSS!

PDF被视为“印刷”媒体; 请参阅有关媒体类型的CSS 2.1规范部分。 确保在链接或嵌入CSS时为CSS指定了媒体类型; 使用“打印”或“全部”类型。

快速回答是将属性media="all"到XML样式表TAG,如下所示:

<?xml-stylesheet href="foo.css" media="all" type="text/css"?>

另外你可以使用media="print"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM