我有这些包含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,我发现上下文只是这是一个测试,我们丢失了&lt; 1mm。
我认为当一对标签之间有一个左尖括号时,itext认为它是一个非法标签,所以它抛出异常。当一个左尖括号位于一对标签之外时,itext认为它是一个失效标记,因此将其删除。
这两种情况都可能发生在我的程序中,在stackoverflow中搜索之后我仍然无法找到解决方案,所以我需要你的帮助。
原谅我糟糕的语法。 谢谢大家。
答案 0 :(得分:0)
首先使用检查和更正语法的库检查HTML,有几个 HTML Tidy 的Java实现。你给它脏了HTML,Tidy会给你干净的HTML,然后你把它交给iText。 iText假定您的HTML有效且不会尝试更正无效的HTML。 (正是因为Tidy已经这样做了)