Java 如何使用iText';将多语言HTML字符串呈现为PDF;s HTMLWorker类
我的HTML字符串有时包含中文单词,我的代码在中文单词处显示空白 这是我的HTML,看起来像这样Java 如何使用iText';将多语言HTML字符串呈现为PDF;s HTMLWorker类,java,html,pdf,itext,Java,Html,Pdf,Itext,我的HTML字符串有时包含中文单词,我的代码在中文单词处显示空白 这是我的HTML,看起来像这样 <html> <body> <div> <table border='1' align='center' cellpadding='1' cellspacing='0'> <tr> <td bgcolor= '#d1eb9d' align='left' width='60%'><font size='2'>&l
<html>
<body>
<div>
<table border='1' align='center' cellpadding='1' cellspacing='0'>
<tr>
<td bgcolor= '#d1eb9d' align='left' width='60%'><font size='2'><b>Answer choices</b></td>
<td bgcolor= '#d1eb9d' align='center' width='20%'><font size='2'><b>Percentage</b></td>
<td bgcolor= '#d1eb9d' align='center' width='20%' ><font size='2'><b>Responses</b></div></td>
</tr>
</div>
</td>
<td align='left' ><div>紅</div></td>
<td align='center' ><div >66.67%</div></td>
<td align='center'><div >2</div></td><
/tr>
</div>
</td>
<td align='left' ><div>黃</div></td>
<td align='center' ><div >66.67%</div></td>
<td align='center'><div >2</div></td>
</tr>
</div>
</td>
<td align='left' ><div>粉紅</div></td>
<td align='center' ><div >33.33%</div></td>
<td align='center'><div >1</div></td>
</tr>
</div>
</td>
<td align='left' ><div>藍</div></td>
<td align='center' ><div >33.33%</div></td>
<td align='center'><div >1</div></td>
</tr>
</div>
</td>
<td align='left' ><div>綠</div></td>
<td align='center' ><div >0.0%</div></td>
<td align='center'><div >0</div></td>
</tr>
<tr>
<td bgcolor= '#d1eb9d' ></td>
<td bgcolor= '#d1eb9d' align='right' ><font size='2'><i><b>Total</b></i></td>
<td bgcolor= '#d1eb9d' align='center' >3</td></tr>
</table>
</div>
</body>
</html>
String str="<html><head>"
+ "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\"/>"
+ "</head>"
+ "<body>"
+ "<div>"
+ "<table border='1' align='center' cellpadding='5' cellspacing='0'>"
+ "<tr>"
+ "<td style='background-color:#d1eb9d;' align='left' width='40%'><font size='3'><b>Answer choices</b></font></td>"
+ "<td style='background-color:#d1eb9d; ' align='center' width='20%'><font size='3'><b>Percentage</b></font></td>"
+ "<td style='background-color:#d1eb9d; ' align='center' width='20%' ><font size='3'><b>Responses</b></font></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>藍</div></td>"
+ "<td style='text-align:center;' ><div >66.67%</div></td>"
+ "<td style='text-align:center;'><div >2</div></td></tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>粉紅</div></td>"
+ "<td style='text-align:center;' ><div >66.67%</div></td>"
+ "<td style='text-align:center;' ><div >2</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; fkont-size:16px; font-weight: normal;\" align='left' ><div>apple</div></td>"
+ "<td style='text-align:center;' ><div >33.33%</div></td>"
+ "<td style='text-align:center;'><div >1</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>紅</div></td>"
+ "<td style='text-align:center;' ><div >33.33%</div></td>"
+ "<td style='text-align:center;'><div >1</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td align='left' style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" ><div>綠</div></td>"
+ "<td style='text-align:center;' ><div >0.0%</div></td>"
+ "<td style='text-align:center;'><div >0</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style='background-color:#d1eb9d;' ></td>"
+ "<td style='background-color:#d1eb9d;' align='right' ><font size='3'><i><b>Total</b></i></font></td>"
+ "<td style='background-color:#d1eb9d;' align='center' >3</td></tr>"
+ "</table>"
+ "</div>"
+ "</body>"
+ "</html>";
String ttfFileName=System.getProperty("user.dir")+"/ARIALUNI.TTF";
XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
fontImp.register(ttfFileName);
FontFactory.setFontImp(fontImp);
InputStream is = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
worker.parseXHtml(writer, document, is,null, Charset.forName("UTF-8"), fontImp);
请先帮我谢谢谢谢布鲁诺洛瓦吉我终于找到了问题的解决办法。正如我在上面的问题中编辑的那样,在使用XMLWorkerHelper我的PDF后,仍然在中文单词处显示空白,这是因为我没有在HTML代码的样式标记中指定字体(我注册了XMLWorkerFontProvider对象)。现在HTML代码将如下所示
<html>
<body>
<div>
<table border='1' align='center' cellpadding='1' cellspacing='0'>
<tr>
<td bgcolor= '#d1eb9d' align='left' width='60%'><font size='2'><b>Answer choices</b></td>
<td bgcolor= '#d1eb9d' align='center' width='20%'><font size='2'><b>Percentage</b></td>
<td bgcolor= '#d1eb9d' align='center' width='20%' ><font size='2'><b>Responses</b></div></td>
</tr>
</div>
</td>
<td align='left' ><div>紅</div></td>
<td align='center' ><div >66.67%</div></td>
<td align='center'><div >2</div></td><
/tr>
</div>
</td>
<td align='left' ><div>黃</div></td>
<td align='center' ><div >66.67%</div></td>
<td align='center'><div >2</div></td>
</tr>
</div>
</td>
<td align='left' ><div>粉紅</div></td>
<td align='center' ><div >33.33%</div></td>
<td align='center'><div >1</div></td>
</tr>
</div>
</td>
<td align='left' ><div>藍</div></td>
<td align='center' ><div >33.33%</div></td>
<td align='center'><div >1</div></td>
</tr>
</div>
</td>
<td align='left' ><div>綠</div></td>
<td align='center' ><div >0.0%</div></td>
<td align='center'><div >0</div></td>
</tr>
<tr>
<td bgcolor= '#d1eb9d' ></td>
<td bgcolor= '#d1eb9d' align='right' ><font size='2'><i><b>Total</b></i></td>
<td bgcolor= '#d1eb9d' align='center' >3</td></tr>
</table>
</div>
</body>
</html>
String str="<html><head>"
+ "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\"/>"
+ "</head>"
+ "<body>"
+ "<div>"
+ "<table border='1' align='center' cellpadding='5' cellspacing='0'>"
+ "<tr>"
+ "<td style='background-color:#d1eb9d;' align='left' width='40%'><font size='3'><b>Answer choices</b></font></td>"
+ "<td style='background-color:#d1eb9d; ' align='center' width='20%'><font size='3'><b>Percentage</b></font></td>"
+ "<td style='background-color:#d1eb9d; ' align='center' width='20%' ><font size='3'><b>Responses</b></font></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>藍</div></td>"
+ "<td style='text-align:center;' ><div >66.67%</div></td>"
+ "<td style='text-align:center;'><div >2</div></td></tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>粉紅</div></td>"
+ "<td style='text-align:center;' ><div >66.67%</div></td>"
+ "<td style='text-align:center;' ><div >2</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; fkont-size:16px; font-weight: normal;\" align='left' ><div>apple</div></td>"
+ "<td style='text-align:center;' ><div >33.33%</div></td>"
+ "<td style='text-align:center;'><div >1</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>紅</div></td>"
+ "<td style='text-align:center;' ><div >33.33%</div></td>"
+ "<td style='text-align:center;'><div >1</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td align='left' style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" ><div>綠</div></td>"
+ "<td style='text-align:center;' ><div >0.0%</div></td>"
+ "<td style='text-align:center;'><div >0</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style='background-color:#d1eb9d;' ></td>"
+ "<td style='background-color:#d1eb9d;' align='right' ><font size='3'><i><b>Total</b></i></font></td>"
+ "<td style='background-color:#d1eb9d;' align='center' >3</td></tr>"
+ "</table>"
+ "</div>"
+ "</body>"
+ "</html>";
String ttfFileName=System.getProperty("user.dir")+"/ARIALUNI.TTF";
XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
fontImp.register(ttfFileName);
FontFactory.setFontImp(fontImp);
InputStream is = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
worker.parseXHtml(writer, document, is,null, Charset.forName("UTF-8"), fontImp);
现在桌子看起来像这样
希望这篇文章能帮助别人,谢谢你 谢谢你布鲁诺洛瓦吉我终于找到了问题的解决办法。正如我在上面的问题中编辑的那样,在使用XMLWorkerHelper我的PDF后,仍然在中文单词处显示空白,这是因为我没有在HTML代码的样式标记中指定字体(我注册了XMLWorkerFontProvider对象)。现在HTML代码将如下所示
<html>
<body>
<div>
<table border='1' align='center' cellpadding='1' cellspacing='0'>
<tr>
<td bgcolor= '#d1eb9d' align='left' width='60%'><font size='2'><b>Answer choices</b></td>
<td bgcolor= '#d1eb9d' align='center' width='20%'><font size='2'><b>Percentage</b></td>
<td bgcolor= '#d1eb9d' align='center' width='20%' ><font size='2'><b>Responses</b></div></td>
</tr>
</div>
</td>
<td align='left' ><div>紅</div></td>
<td align='center' ><div >66.67%</div></td>
<td align='center'><div >2</div></td><
/tr>
</div>
</td>
<td align='left' ><div>黃</div></td>
<td align='center' ><div >66.67%</div></td>
<td align='center'><div >2</div></td>
</tr>
</div>
</td>
<td align='left' ><div>粉紅</div></td>
<td align='center' ><div >33.33%</div></td>
<td align='center'><div >1</div></td>
</tr>
</div>
</td>
<td align='left' ><div>藍</div></td>
<td align='center' ><div >33.33%</div></td>
<td align='center'><div >1</div></td>
</tr>
</div>
</td>
<td align='left' ><div>綠</div></td>
<td align='center' ><div >0.0%</div></td>
<td align='center'><div >0</div></td>
</tr>
<tr>
<td bgcolor= '#d1eb9d' ></td>
<td bgcolor= '#d1eb9d' align='right' ><font size='2'><i><b>Total</b></i></td>
<td bgcolor= '#d1eb9d' align='center' >3</td></tr>
</table>
</div>
</body>
</html>
String str="<html><head>"
+ "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\"/>"
+ "</head>"
+ "<body>"
+ "<div>"
+ "<table border='1' align='center' cellpadding='5' cellspacing='0'>"
+ "<tr>"
+ "<td style='background-color:#d1eb9d;' align='left' width='40%'><font size='3'><b>Answer choices</b></font></td>"
+ "<td style='background-color:#d1eb9d; ' align='center' width='20%'><font size='3'><b>Percentage</b></font></td>"
+ "<td style='background-color:#d1eb9d; ' align='center' width='20%' ><font size='3'><b>Responses</b></font></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>藍</div></td>"
+ "<td style='text-align:center;' ><div >66.67%</div></td>"
+ "<td style='text-align:center;'><div >2</div></td></tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>粉紅</div></td>"
+ "<td style='text-align:center;' ><div >66.67%</div></td>"
+ "<td style='text-align:center;' ><div >2</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; fkont-size:16px; font-weight: normal;\" align='left' ><div>apple</div></td>"
+ "<td style='text-align:center;' ><div >33.33%</div></td>"
+ "<td style='text-align:center;'><div >1</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" align='left' ><div>紅</div></td>"
+ "<td style='text-align:center;' ><div >33.33%</div></td>"
+ "<td style='text-align:center;'><div >1</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td align='left' style=\"font-family: arial unicode ms, ARIALUNI; font-size:16px; font-weight: normal;\" ><div>綠</div></td>"
+ "<td style='text-align:center;' ><div >0.0%</div></td>"
+ "<td style='text-align:center;'><div >0</div></td>"
+ "</tr>"
+ "<tr>"
+ "<td style='background-color:#d1eb9d;' ></td>"
+ "<td style='background-color:#d1eb9d;' align='right' ><font size='3'><i><b>Total</b></i></font></td>"
+ "<td style='background-color:#d1eb9d;' align='center' >3</td></tr>"
+ "</table>"
+ "</div>"
+ "</body>"
+ "</html>";
String ttfFileName=System.getProperty("user.dir")+"/ARIALUNI.TTF";
XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
fontImp.register(ttfFileName);
FontFactory.setFontImp(fontImp);
InputStream is = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
worker.parseXHtml(writer, document, is,null, Charset.forName("UTF-8"), fontImp);
现在桌子看起来像这样
希望这篇文章能帮助别人,谢谢你 您正在使用
HTMLWorker
:放弃所有希望或开始使用HTMLWorker
多年前就被XML Worker取代了@BrunoLowagie使用HTMLWorker不可能吗?如果没有,请您建议我如何使用XML Worker?您单击了吗?它给你提供了大量的问答示例,比如看看网站上标记的页面。具体的亚洲示例有,和。可以找到用于这些示例的资源。@BrunoLowagie抱歉,可能我的问题很琐碎,但我通过了ParseHtml2.java。我的问题是我的中文单词不是Unicode字符,这就是为什么ParseHtml2.java中的代码可能不起作用。我已经用代码更新了我的问题,请帮助我。您正在使用HTMLWorker
:放弃所有希望或开始使用HTMLWorker
多年前就被XML Worker取代了@BrunoLowagie使用HTMLWorker不可能吗?如果没有,请您建议我如何使用XML Worker?您单击了吗?它给你提供了大量的问答示例,比如看看网站上标记的页面。具体的亚洲示例有,和。可以找到用于这些示例的资源。@BrunoLowagie抱歉,可能是我的问题很琐碎,但我通过了ParseHtml2.java。我的问题是我的中文单词不是Unicode字符,这就是为什么ParseHtml2.java中的代码可能不起作用。我已经用代码更新了我的问题,请帮助我。