如何在将rtf转换为pdf时恢复缺失的上下文?

时间:2016-08-03 17:25:59

标签: java pdf itext

我有这些包含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中搜索之后我仍然无法找到解决方案,所以我需要你的帮助。

原谅我糟糕的语法。 谢谢大家。

1 个答案:

答案 0 :(得分:0)

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