【发布时间】: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 之类的方式发送它。在这种情况下很明显,您需要将
&lt;替换为&lt;。