2

I am using Flying Saucer to render some PDF documents from strings to 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();

This works fine When I have plain text. I have referenced an external CSS in my HTML content. But, When PDF gets generated CSS doesn't get applied.

I have read that The setDocument() method takes two parameters: document and url. The url parameter indicates the base url used to prepend to relative paths that appear in the xhtml, such as an external CSS

So, I have tried to supply

context path/css

direcotry in the baseURL and used it in the setDocument(). Still no result

So, My Question What is the correct URL to pass as baseURL ?

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

3 回答 3

2

常见问题解答告诉我们:

url 是“基础”,对于普通的 URL,它是父位置——父目录,或者你正在渲染的文档所在的位置。如果你的文档有 CSS 和图像的绝对 URI,或者它没有如果您的文档有任何 CSS 或图像的相对 URI,则基本 URL 不应为空,而应指向当前文档所在的目录或地址。

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

很抱歉有新帖子,但评论告诉我我只剩下负字符了......

于 2012-08-30T13:06:29.143 回答
0

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

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

我的 PDF 没有拾取我的 CSS!

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

快速的答案是将属性添加 media="all"到 XML 样式表 TAG 中,如下所示:

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

您可以使用的替代方案 media="print"

于 2014-01-30T05:10:59.410 回答
0


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

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

于 2012-08-24T16:26:16.203 回答