在将Struts表单转换为PDF时,XmlWorkerHelper不是关闭<html:text>输入标签。


<td>
<html:text name="LIHF" property="documentNumber" styleId="documentNumber" disabled="true" styleClass="textarea168" />
</td>

.

XMLWorkerHelper.getInstance().parseXHtml(writer, document,new StringReader(newHTML)); 

错误

com.itextpdf.tool.xml.exceptions.RuntimeWorkerException: Invalid nested tag td found, expected closing tag input.
at com.itextpdf.tool.xml.XMLWorker.endElement(XMLWorker.java:134)
at com.itextpdf.tool.xml.parser.XMLParser.endElement(XMLParser.java:395)
at com.itextpdf.tool.xml.parser.state.ClosingTagState.process(ClosingTagState.java:70)
at com.itextpdf.tool.xml.parser.XMLParser.parseWithReader(XMLParser.java:235)

我正在使用:

  • itextpdf - 5.5.4 jar
  • XMLworker - 5.4.0 罐
  • 支柱形成 1.3.8 罐

我传递了字符串 -

String k = "<html><body> This is my Project </body></html>";

生成 PDF。

一旦我传递 struts 表单元素,它就会生成输入标签未关闭的错误。

我看到 3 个错误:

  1. 混合不兼容版本的 iText 和 XMLWorker。
  2. 不使用Maven,而是直接使用罐子。
  3. <html:text ... />是 Struts 标签,而不是 HTML 标签。XMLWorker 只能将渲染的 HTML 解析为 PDF。Struts 需要先解析它,然后再将其提供给 XMLWorker。这就是为什么<html><body> This is my Project </body></html>可以工作,但<html:text ... />或任何其他 Struts 标签不起作用。

要修复 1 和 2,请将您的项目转换为 Maven 项目并将其添加到您的pom.xml

<dependencies>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts-core</artifactId>
<version>1.3.10</version>
</dependency>
</dependencies>

要修复 3,Struts 需要首先生成完整的 HTML。我对支柱一无所知,所以我不能告诉你该怎么做。

相关内容

最新更新