java.lang.IllegalArgumentException:不允许元素

java.lang.IllegalArgumentException:不允许元素,java,itext,Java,Itext,我面临一个问题,我在程序中使用以下库将Html转换为pdf itextpdf.jar-5.4.1版本 xmlworker-5.4.1版本 我为这么多HTMLs测试了我的代码,它工作得很好,但其中一个HTMLs不工作,并引发以下异常。。请调查一下,如果你们知道任何解决方案,请告诉mw java.lang.IllegalArgumentException: Element not allowed. at com.itextpdf.text.pdf.ColumnText.addElement(Col

我面临一个问题,我在程序中使用以下库将Html转换为pdf

itextpdf.jar-5.4.1版本

xmlworker-5.4.1版本

我为这么多HTMLs测试了我的代码,它工作得很好,但其中一个HTMLs不工作,并引发以下异常。。请调查一下,如果你们知道任何解决方案,请告诉mw

java.lang.IllegalArgumentException: Element not allowed.  at com.itextpdf.text.pdf.ColumnText.addElement(ColumnText.java:471)
 at com.itextpdf.text.pdf.PdfPCell.addElement(PdfPCell.java:283)
 at com.itextpdf.tool.xml.html.table.TableData.end(TableData.java:151)
 at com.itextpdf.tool.xml.html.AbstractTagProcessor.endElement(AbstractTagProcessor.java:189)
 at com.itextpdf.tool.xml.pipeline.html.HtmlPipeline.close(HtmlPipeline.java:206)
 at com.itextpdf.tool.xml.XMLWorker.endElement(XMLWorker.java:141)
 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)
 at com.itextpdf.tool.xml.parser.XMLParser.parse(XMLParser.java:213)
 at com.cisco.wem.transformation.HtmlProcessor.generatePDF(HtmlProcessor.java:1728)
 at com.cisco.wem.transformation.HtmlProcessor.processHtml(HtmlProcessor.java:292)
 at com.cisco.wem.transformation.HtmlProcessor.execute(HtmlProcessor.java:207)
 at com.cisco.wem.transformation.HtmlProcessor.run(HtmlProcessor.java:1451)
 at java.lang.Thread.run(Thread.java:662)
我看到一个博客,他们说要使用下面的代码片段,但我不确定在我的代码中应该在哪里使用它

for (Element e : elements) {
     if (!ColumnText.isAllowedElement(e))
         continue;
     // do stuff
}
这是我的代码:

public String generatePDF(String tempFolder,String completeHtmlFilePath,NodeBO renditionRequestBO)throws FileNotFoundException, IOException, DocumentException,
 CssResolverException {

  << some code stuff here>>

  com.itextpdf.text.Document document = new com.itextpdf.text.Document();
  PdfWriter writer = PdfWriter.getInstance(document,
   new FileOutputStream(pdfFileNameWithPath));
  document.open();

  HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
  //htmlContext.setLastMarginBottom(100.0f);
  htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
  CSSResolver cssResolver = XMLWorkerHelper.getInstance()
    .getDefaultCssResolver(true);


  Pipeline<?> pipeline = new CssResolverPipeline(cssResolver,
    new HtmlPipeline(htmlContext, new PdfWriterPipeline(document,
      writer)));

  XMLWorker worker = new XMLWorker(pipeline, true);


  XMLParser p = new XMLParser(worker);

  File input = new File(completeHtmlFilePath);
  p.parse(new InputStreamReader(new FileInputStream(input), "UTF-8"));

  document.close();

  return pdfFileNameWithPath;


 }
}
public String generatePDF(String tempFolder、String completeHtmlFilePath、NodeBO renditionRequestBO)抛出FileNotFoundException、IOException、DocumentException、,
CssResolverException{
>
com.itextpdf.text.Document Document=新建com.itextpdf.text.Document();
PdfWriter writer=PdfWriter.getInstance(文档,
新的FileOutputStream(pdfFileNameWithPath));
document.open();
HtmlPipelineContext htmlContext=新的HtmlPipelineContext(null);
//htmlContext.setLastMarginBottom(100.0f);
setTagFactory(Tags.getHtmlTagProcessorFactory());
CSSResolver CSSResolver=XMLWorkerHelper.getInstance()
.getDefaultCssResolver(true);
管道管道=新的cssResolver管道(cssResolver,
新的HtmlPipeline(htmlContext,新的PdfWriterPipeline(文档,
作者),;
XMLWorker=newxmlworker(管道,true);
XMLParser p=新的XMLParser(worker);
文件输入=新文件(completeHtmlFilePath);
p、 解析(新的InputStreamReader(新文件InputStream(输入),“UTF-8”);
document.close();
返回pdfFileNameWithPath;
}
}
谢谢 斯里兰卡

这是HTML代码片段,我得到了这个异常,您只能获取下面的表元素

步骤1
. 
步骤2
输入您的Cisco
出现提示时输入CCO密码。
步骤3
提取
打包到一个临时目录中。


示例: # mkdir/usr/tmp/cm\u安装温度

示例: # cd/usr/tmp/cm安装温度

示例: #焦油 xvf../cm_full_package.tar 测试

这可能是HTML与XHTML的问题。iText需要输入比HTML更严格的XHTML。例如,br元素是不允许的。此外,还需要正确关闭图元

在使用开源项目“Tidy”将HTML发送到iText之前,可以将其转换为XHTML


你能粘贴html代码吗?html中一定有非法元素。-addElement-第471行可能是HTML与XHTML的问题。iText需要输入比HTML更严格的XHTML。如果你发布你的HTML,我们将能够帮助你。例如,
是不允许的。谢谢James的编辑。谢谢大家,我会使HTML格式良好,并尝试一下。我会让你知道的。嗨,奥努尔·阿克塔&All,我使用一个在线URL将HTML转换为XHTML,但仍然是相同的错误。我想在这里粘贴HTML,但是这个UI最多有30000个字符,但是我的HTML文件几乎有93000个字符。是否有其他方法与您共享HTML。?请让我知道。谢谢SriPerhaps您可以尝试删除部分html,直到找到问题所在的特定元素。e、 g一个二进制搜索,删除html的下半部分并进行测试,如果问题仍然存在,你知道它在上半部分,如果没有,你知道它在下半部分,重复。嗨,bhspencer,我测试了html的一部分,并指出了问题,比如html中的标签在哪里,这个问题就来了。我想知道itext是如何不支持的,对此有什么想法,请分享。您能否构建一个最小的html文档来演示这个问题,并将其包含在您的问题中。
public static String convertHtmlToXhtml(String html) {
    Tidy tidy = new Tidy(); 
    tidy.setXHTML(true); 
    tidy.setDocType("omit");
    InputStream inputStream = new StringBufferInputStream(html);
    OutputStream outputStream = new ByteArrayOutputStream();
    tidy.parse(inputStream, outputStream); 
    return outputStream.toString();
}