Java 使用德语字母从Html转换为Pdf
我正在使用将html转换为pdf。目前,如果html包含德语字符,比如ä,ö,ü,我会遇到一个例外Java 使用德语字母从Html转换为Pdf,java,html-to-pdf,flying-saucer,openhtmltopdf,Java,Html To Pdf,Flying Saucer,Openhtmltopdf,我正在使用将html转换为pdf。目前,如果html包含德语字符,比如ä,ö,ü,我会遇到一个例外 PdfRendererBuilder builder = new PdfRendererBuilder(); builder.useFastMode(); builder.withHtmlContent(html,"file://localhost/"); builder.toStream(out); builder.run(); org.xml.sax.SAXParseEx
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.useFastMode();
builder.withHtmlContent(html,"file://localhost/");
builder.toStream(out);
builder.run();
org.xml.sax.SAXParseException;行号:17;栏目号:31;这个
实体“auml”已被引用,但未声明
这里是我的html:
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
käse
</body>
</html>
但是我仍然在“parse”中遇到相同的异常。看起来您需要提供实体名称
auml
,或者将其替换为相应的十六进制或十进制值,即ä代码>或和#228代码>分别为。见和
html内容如下所示:
kä;东南方
或者,您可以运行html字符串,并用相应的dec/hex值替换实体名称(这应该可以),或者在将DTD传递给pdf生成器之前,将DTD预先添加到html字符串中
更新
你可能想试试图书馆。它解析并向您提供org.w3c.dom.Document
,例如
documentjsoupdoc=Jsoup.parse(html);//org.jsoup.nodes.Document
W3CDom W3CDom=新的W3CDom();//org.jsoup.helper.W3CDom
org.w3c.dom.Document w3cDoc=w3cDom.fromJsoup(jsoupDoc);
然后可以像这样将w3cDoc
传递给pdf生成器
pdfrenderbuilder builder=new pdfrenderbuilder();
具有W3C文档(w3cDoc)的生成器file://localhost/");
您的HTML文档中是否有要创建PDF的
?是的,我已经添加了我的HTML。您的答案是正确的,谢谢。我很确定我可以通过编程实现,而不是在html中声明DTD。我尝试过使用实体解析器(我更新了我的问题),但仍然不起作用,但我认为我更接近…@Zardo您使用的javax.xml.parsers.DocumentBuilder
需要一个定义良好的文档,而您提供的html文件则不是这样。我更新了我的答案jsoup
将帮助您处理html解析部分,这样您就不必接触现有的html文件。
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);
}