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

时间:2017-07-14 07:01:35

标签: pdf itext struts-1 xmlworker

<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 jar
  • struts形成1.3.8 jar

我传递了字符串 -

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

生成pdf。

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

1 个答案:

答案 0 :(得分:1)

我看到3个错误:

  1. 混合不兼容的iText和XMLWorker版本。
  2. 不使用Maven,而是直接使用jar。
  3. <html:text ... />是Struts标记,而不是HTML标记。 XMLWorker只能将呈现的HTML解析为PDF。在将XML提供给XMLWorker之前,Struts需要先解析它。这就是<html><body> This is my Project </body></html>可行的原因,但<html:text ... />或任何其他Struts标记都无法正常工作。
  4. 要修复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。我对Struts一无所知,所以我可以告诉你如何做到这一点。