【问题标题】:The element type "META" must be terminated by the matching end-tag "</META>". while generating PDF from XML file using XSL元素类型“META”必须以匹配的结束标记“</META>”结束。使用 XSL 从 XML 文件生成 PDF
【发布时间】:2018-05-08 02:54:11
【问题描述】:

我正在尝试将 XML 转换为 PDF 文档。在使用 XSL 解析 XML 以生成用于 PDF 创建的 HTML 时。 HTML 不包含 &lt;/meta&gt; 结束标记,因为出现以下错误

 Exception in thread "main" org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). org.xml.sax.SAXParseException; lineNumber: 22; columnNumber: 3; The element type "META" must be terminated by the matching end-tag "</META>".

如何在 HTML 中包含 &lt;/meta&gt; 结束标记

请找到我的 java 代码以从 XML 生成 PDF

public class XMLtoPDF {


     public static void main(String[] args) 
                throws IOException, DocumentException, TransformerException,TransformerConfigurationException,FileNotFoundException {



            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer(new StreamSource("xsl_html_pagebreak_a.xslt"));
            transformer.transform(new StreamSource("xsl_html_pagebreak_input.xml"),new StreamResult(new FileOutputStream("sample3.html")));
            String File_To_Convert = "sample3.html";
            String url = new File(File_To_Convert).toURI().toURL().toString();
            System.out.println(""+url);
            String HTML_TO_PDF = "ConvertedFile3.pdf";
            OutputStream os = new FileOutputStream(HTML_TO_PDF);       
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(url);      
            renderer.layout();
            renderer.createPDF(os);        
            os.close();
        }
}

【问题讨论】:

    标签: java html xml xslt-1.0 runtimeexception


    【解决方案1】:

    org.xhtmlrenderer.util 这个名字告诉我你正在使用的库 (ITextRenderer) 需要 XHTML。您可以通过

    从您的 XSLT 转换中获取 XHTML 输出

    (a) 将其更改为使用 XHTML 输出方法而不是 HTML

    (b) 将其更改为使用 XSLT 2.0 处理器,例如 Saxon,因为要使用 XHTML 输出方法,您需要 XSLT 2.0。

    更具体地说,改变

    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer(new StreamSource("xsl_html_pagebreak_a.xslt"));
    

    TransformerFactory tFactory = new net.sf.saxon.TransformerFactoryImpl();
    Transformer transformer = tFactory.newTransformer(new StreamSource("xsl_html_pagebreak_a.xslt"));
    transformer.setOutputProperty("method", "xhtml");
    

    另外,您可能会发现将序列化方法更改为“xml”也可以;在这种情况下,您无需更改为 XSLT 2.0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 2016-12-27
      相关资源
      最近更新 更多