带德语字母的java Html到Pdf
我正在使用openhtmltopdf将html转换为pdf。目前,如果html包含德语字符,比如ä,ö,ü,我会遇到一个例外
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.useFastMode();
builder.withHtmlContent(html,"file://localhost/");
builder.toStream(out);
builder.run();
org.xml.sax.SAXParseException; lineNumber: 17; columnNumber: 31; The entity "auml" was referenced, but not declared.
这里是我的html:
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
käse
</body>
</html>
出口的单词是“käse”(奶酪)
更新
我尝试过使用实体解析器,方法如下:
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=null;
try{
builder=factory.newDocumentBuilder();
ByteArrayInputStream input=new ByteArrayInputStream(html.getBytes("UTF-8"));
builder.setEntityResolver(FSEntityResolver.instance());
org.w3c.dom.Document doc=builder.parse(input);
}catch(Exception e){
logger.error(e.getMessage(),e);
}
但我在“解析”时仍然遇到同样的异常
# 1 楼答案
看起来您需要提供DTD或将实体名称
auml
替换为相应的十六进制或十进制值,即ä
或ä
。见A.2. Entity Sets和HTML 4 Entity Nameshtml内容如下所示:
或者,您可以运行html字符串,并用相应的dec/hex值替换实体名称(这应该可以),或者在将DTD传递给pdf生成器之前,将DTD预先添加到html字符串中
更新
您可能想尝试一下jsoup库。它解析并为您提供
org.w3c.dom.Document
,例如然后可以像这样将
w3cDoc
传递给pdf生成器