首页 文章

将 XMLWorkerHelper 与 IText 一起使用

提问于
浏览
1

我是使用 iText 的新手,我无法弄清楚 XMLWorkerHelper 类是如何工作的。我正在尝试创建一个方法,该方法接受包含 html 文档的字符串,将 html 转换为 pdf 文档,并将 pdf 作为字节数组返回。如果有人可以在下面的代码中指出错误,我真的很感激。

Document document = new Document(); 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
document.open();
StringReader stringReader = new StringReader(articleString);
StringWriter stringWriter = new StringWriter();
Tidy tidy = new Tidy(); tidy.setXHTML(true); tidy.parse(stringReader, stringWriter); System.out.println("Before XMLWorkerHelper"); XMLWorkerHelper xwh = XMLWorkerHelper.getInstance(); xwh.parseXHtml(pdfWriter, document, new StringReader(stringWriter.toString())); System.out.println("After XMLWorkerHelper"); document.close(); stringReader.close(); result = baos.toByteArray();

我正在使用的代码在上面。 html 代码位于变量 articleString 中。重要的部分是两个 System.out.println 陈述之间。这是 Web 应用程序的一部分,System.out 写入服务器日志以及任何错误或异常消息,但正在发生的是应用程序似乎终止而不会在两个 println 语句之间抛出任何异常。因此,“在 XMLWorkerHelper 之前”行打印,但不打印“After XMLWorkerHelper”行。

我正在使用的 jar 文件是 itextpdf-5.4.0.jar,itext-pdfa-5.4.0.jar,itext-xtra-5.4.0.jar,xmlworker-5.4.0.jar

我试图转换的 html 文件只是“Tester Article”,它正被 jTidy 转换为

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
Tester Article
</body>
</html>

我尝试使用 iText 5.0 jar 中的旧 HTMLWorker 类代替 XMLWorkerHelper 代码,一切正常。我用来代替上面的 XMLWorkerHelper 行的 HTMLWorker 代码是:

HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(stringWriter.toString()));

1 回答

  • 0

    我希望这已经解决了。如果没有,请尝试删除
    码。如果这没有帮助,请尝试将 stringWriter.toString()放在 InputStream 中,然后在 parseXHtml 上使用流代替 stringWriter.toString()

    InputStream

    InputStream stream = new ByteArrayInputStream(stringWriter.toString().getBytes("UTF-8"));
    

    XMLWorkerHelper:

    XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, stream);
    

    希望这可以帮助您或任何遇到相同问题的人查看此内容

相关问题