java - 将 XMLWorkerHelper 与 IText 结合使用

标签 java pdf-generation itext

我是 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();<br/>
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 语句之间终止而没有抛出任何异常。因此,会打印“Before 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()));

最佳答案

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

输入流

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

XMLWorkerHelper:

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

希望这对您或任何在查看此内容时遇到相同问题的人有所帮助

关于java - 将 XMLWorkerHelper 与 IText 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15007261/

相关文章:

asp.net - 如何在 Rackspace 云站点上以中等信任度运行 Itextsharp.dll

java - 如何在最初给定的时区中存储和显示日期?

java - ClassNotFoundException HadoopMapReduceCommitProtocol

java - 等到任务完成

python - 从 QT 应用程序创建 PDF

itext - 如何摆脱 PdfPCell、iText 5 中的顶部填充

java - 如何在使用 postDelayed() 循环的 Android 中停止 Runnable?

python - 如何从 Python 中的 HTML/CSS(包括图像)源生成 PDF?

objective-c - 使用内存中的 UIWebView 在 PhoneGap 中生成 PDF

c# - iTextSharp - 无法在表格单元背景颜色上绘制矩形