【问题标题】:iText not showing all HTML elementsiText 未显示所有 HTML 元素
【发布时间】:2021-05-26 15:07:10
【问题描述】:

我正在使用 Java 和 iText 5 从许多 HTML 部分构建一个 PDF 文件。

我知道这是 iText 的旧版本,但我们有另一个 PDF 文件,我们在其中附加了音频(ogg 文件),但我们无法使其在新版本上运行。对此的任何帮助也将不胜感激:)

所以,问题是,我有一个这样的 HTML 片段:

<span>
  <p>Some text <strong>with bold</strong></p>
  <p>Another paragraph</p>
  <p>Third paragraph <br /> with a line break</p>
  <img src="..." alt="Image file" />
</span>

在 Java 中我这样做:

ElementList list2 = XMLWorkerHelper.parseToElementList(htmlString, null);
Paragraph htmlPiece= new Paragraph();
for (Element element2 : list2) {
  htmlPiece.add(element2);
}
htmlPiece.setMultipliedLeading(1);
htmlPiece.setIndentationLeft(50f);
document.add(htmlPiece);

问题是某些 HTML 标签(strong、ul、ol)在 PDF 上显示完美,但其他标签(p、br、img)不起作用。它们只是消失了,所有内容都显示在生成的 PDF 文件中的一行上。

关于如何使它工作的任何建议?或者至少,有什么问题?

谢谢!

【问题讨论】:

    标签: java html itext pdf-generation


    【解决方案1】:

    到目前为止我还没有使用过这个版本,所以我不确定为什么它只适用于某些标签。

    Paragraph htmlPiece= new Paragraph();
    try(StringReader reader = new StringReader(htmlString)) {
        java.util.List<Element> list2 = com.itextpdf.text.html.simpleparser.HTMLWorker.parseToList(reader, null);
        for (Element element : list2) {
          htmlPiece.add(element);
        }
    }
    htmlPiece.setMultipliedLeading(1);
    htmlPiece.setIndentationLeft(50f);
    document.add(htmlPiece);
    

    我添加了 XML Worker 依赖项

    <!-- https://mvnrepository.com/artifact/com.itextpdf.tool/xmlworker -->
    <dependency>
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>5.4.0</version>
    </dependency>
    

    另外,HTMLWorker 已被弃用,因此请使用最新版本的 XMLWorker,如下所示

    XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() {
        @Override
        public void add(Writable w) {
            if (w instanceof WritableElement) {
              List<Element> elements = ((WritableElement) w).elements();
              for (Element e : elements) {
                htmlPiece.add(e);
              }
            }
        }
    }, reader);
    

    这些都是用iText 5.4.0写的,语法会有一些变化。也要检查一下 试试这段代码,让我知道它是否有效

    【讨论】:

    • 嗨!将元素添加到单元格,然后将单元格添加到段落会引发异常:``` java.lang.ClassCastException:插入非法元素:com.itextpdf.text.Phrase.add(Phrase.java:371) at com 的 30 .itextpdf.text.Paragraph.add(Paragraph.java:347) ``` 直接将单元格添加到文档中不会在生成的 PDF 中显示任何内容。还有其他提示吗? ? 无论如何谢谢!
    • 对不起。你能分享你的iText版本吗?我能够解决所有标签,包括 5.4.0 版本上的 img 标签
    • 我正在使用的版本是 5.5.11,通过 Maven 安装在 Springboot 应用程序中
    • @IñigoGorosabel 已更新答案。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2020-10-09
    • 1970-01-01
    • 2018-03-27
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多