我几天都在学习iText及其美貌。
我设法成功将HTML源代码转换为PDF。但是,我一直想知道是否有可能将破坏的html(缺少标签等)转换为PDF而不使用XMLWorker抛出异常,就像HTMLWorker一样。我知道XMLWorker是非常明智的,只能使用正确编写的HTML或(X)HTML,但是因为我从第二方获得html,这很可能会破坏HTML。
我想知道是否有办法只是转换可能的内容并让错误像浏览器那样浮动。
答案 0 :(得分:1)
在将损坏的HTML传递给iText之前使用TagSoup。它将清理损坏的HTML并返回有效的X(HT)ML。
TagSoup实现SAX解析器接口。关于如何使用它有some examples,但lacks some "real" documentation。
您可能需要再次序列化XML并将其转储到文件中以将其提供给iText,我不知道它的界面。
使用XMLWriter可以序列化SAX流。它很可能已包含在TagSoup中,因此您无需添加额外的依赖项。
final Parser parser = new Parser();
final StringWriter writer = new StringWriter();
parser.setContentHandler(new XMLWriter(writer));
parser.parse(new InputSource(
new URL("http://oregonstate.edu/instruct/phl302/texts/hobbes/leviathan-c.html")
.openConnection().getInputStream()));
System.out.println(writer.toString());
根据iText的API决定是将writer
的输出转储到文件还是以其他方式传递。