【问题标题】:HTML to PDF using iText External CSS使用 iText 外部 CSS 将 HTML 转换为 PDF
【发布时间】:2012-08-16 02:24:46
【问题描述】:

我正在使用 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 中的目录并在setDocument() 中使用它。还是没有结果

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

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

【问题讨论】:

    标签: java pdf-generation itext flying-saucer


    【解决方案1】:

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

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

    我的 PDF 没有拾取我的 CSS!

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

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

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

    你也可以使用media="print"

    【讨论】:

      【解决方案2】:

      FAQ 告诉我们:

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

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

      抱歉发了新帖子,但 cmets 告诉我我只剩下负字符了...

      【讨论】:

      • 你能解释一下“对不起新帖子,但是 cmets 告诉我我只剩下负字符了......”。我的评论没有任何讽刺的意思。其次,是的,它适用于绝对 URL。
      • 不,不 :-) 我的帖子对于 cmets 来说太长了。篇幅有限,无法发布。
      【解决方案3】:

      您可以通过输入插入 CSS 路径
      &lt;link rel="stylesheet" type="text/css" href="file://path/to/your.css" /&gt;
      进入您的文档(头部)。

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

      【讨论】:

      • 感谢您的回复。我知道如果您传递绝对 URL。(我已经提到过 :D)但是,有一个叫做“baseURL”的东西可以提供到您的资源目录的路径.有什么指示吗?
      • 还有一个问题,如果你能帮忙:stackoverflow.com/questions/12059807/…
      猜你喜欢
      • 1970-01-01
      • 2020-09-04
      相关资源
      最近更新 更多