元素类型 "META" 必须由匹配的结束标记“</META>”终止。使用 XSL 从 XML 文件生成 PDF 时

The element type "META" must be terminated by the matching end-tag "</META>". while generating PDF from XML file using XSL

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

 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

中包含 </meta> 结束标记

请找到我的 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();
        }
}

名称 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。