元素类型 "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。
我正在尝试将 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
生成 PDFpublic 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。您可以通过
(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。