Zar*_*rdo 3 java html-to-pdf flying-saucer openhtmltopdf
我正在使用openhtmltopdf将 html 转换为 pdf。目前,如果 html 包含德语字符,例如 \xc3\xa4、\xc3\xb6、\xc3\xbc,我会遇到异常。
\n\n PdfRendererBuilder builder = new PdfRendererBuilder();\n builder.useFastMode();\n builder.withHtmlContent(html,"file://localhost/");\n builder.toStream(out);\n builder.run();\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\norg.xml.sax.SAXParseException; 行号:17;列数:31;实体“auml”已被引用,但未声明。
\n
这是我的html:
\n\n<html>\n <head> \n <meta charset="UTF-8" />\n </head>\n <body>\n käse\n </body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n\n导出的单词是“k\xc3\xa4se”(奶酪)。
\n\n更新
\n\n我尝试过使用实体解析器,如下所示:
\n\n DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();\n DocumentBuilder builder=null;\n try{\n builder=factory.newDocumentBuilder();\n\n ByteArrayInputStream input=new ByteArrayInputStream(html.getBytes("UTF-8"));\n builder.setEntityResolver(FSEntityResolver.instance());\n org.w3c.dom.Document doc=builder.parse(input);\n\n\n }catch(Exception e){\n logger.error(e.getMessage(),e);\n }\nRun Code Online (Sandbox Code Playgroud)\n\n但我在“解析”时仍然遇到相同的异常。
\n看起来您要么需要提供DTD,要么将实体名称替换auml为其相应的十六进制或十进制值,即ä或ä。参见A.2。实体集和HTML 4 实体名称。
html 内容将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html [
<!ENTITY auml "ä">
]>
<html>
<head>
</head>
<body>
käse
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
或者,您可以运行 html 字符串并将实体名称替换为相应的十进制/十六进制值,这应该没问题,或者只是将 DTD 添加到您的 html 字符串,然后再将其传递给 pdf 生成器。
更新
您可能想尝试一下jsoup库。它解析并为您提供一个org.w3c.dom.Document,例如
Document jsoupDoc = Jsoup.parse(html); // org.jsoup.nodes.Document
W3CDom w3cDom = new W3CDom(); // org.jsoup.helper.W3CDom
org.w3c.dom.Document w3cDoc = w3cDom.fromJsoup(jsoupDoc);
Run Code Online (Sandbox Code Playgroud)
然后您可以将其传递w3cDoc给 pdf 生成器,如下所示
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.withW3cDocument(w3cDoc, "file://localhost/");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |