【问题标题】:How to recover missing context when transfer rtf to pdf?将rtf传输到pdf时如何恢复丢失的上下文?
【发布时间】:2016-08-03 17:25:59
【问题描述】:

我有这些包含 html 标签的 rtf 上下文,我需要将它们传输到没有标签的 PDF 文件中,所以我使用 itext 来完成这项工作。这是一个简单的演示,展示了我所做的:

String context = "<p>this is a test <1mm.</p>";
try {
    //create document
    OutputStream file = new FileOutputStream(new File("C:\\test.pdf"));
    Document document = new Document();
    PdfWriter.getInstance(document, file);
    document.open();

    HTMLWorker worker = new HTMLWorker(document);
    worker.parse(new StringReader(context));

    document.close();
    file.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (DocumentException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

结果显示如下信息:

java.io.IOException: No message found for 1.near.line.2.column.3
    at com.itextpdf.text.xml.simpleparser.SimpleXMLParser.throwException(Unknown Source)
    at com.itextpdf.text.xml.simpleparser.SimpleXMLParser.go(Unknown Source)
    at com.itextpdf.text.xml.simpleparser.SimpleXMLParser.parse(Unknown Source)
    at com.itextpdf.text.html.simpleparser.HTMLWorker.parse(Unknown Source)
    at test.main.main(main.java:29)

但是,如果我改变这个的上下文:

String context = "<p>this is a test </p><1mm.";

代码会顺利运行,但是查看pdf,发现上下文只剩下这是一个测试,我们丢失了

我认为当一对标签之间有一个左尖括号时,itext认为它是非法标签,所以它会抛出异常。当一个左尖括号在一对标签之外时,itext认为它是一个失效标签,所以它删除它。

这两种情况都可能发生在我的程序中,在stackoverflow中搜索后仍然找不到解决方案,所以我需要你的帮助。

请原谅我的语法错误。 谢谢大家。

【问题讨论】:

  • HTMLWorker 已过时,我建议使用XMLWorker
  • 回答您的问题:iText 期望您的 HTML 有效。要检查它是否有效,您可以先通过 Tidy 之类的方式发送它。在这种情况下很明显,您需要将&amp;lt; 替换为&amp;lt;

标签: java pdf itext


【解决方案1】:

首先使用检查和纠正语法的库检查您的 HTML,HTML Tidy 有几个 Java 实现。你给它你的脏 HTML,Tidy 会给你干净的 HTML,然后你把它给 iText。 iText 假定您的 HTML 是有效的,并且不会尝试更正无效的 HTML。 (正是因为 Tidy 已经这样做了)

【讨论】:

  • 谢谢先生,我通过以下步骤解决了这个问题:将整个标签替换为“@code1”之类的

    ,然后将

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多