Java 使用德语字母从Html转换为Pdf

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

我正在使用将html转换为pdf。目前,如果html包含德语字符,比如ä,ö,ü,我会遇到一个例外

  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&auml;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);
    }