java如何使用iText的HTMLWorker类将多语言HTML字符串呈现为PDF
我的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'><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>
这是我解析上述字符串的代码
StringBuilder sb= new StringBuilder();
String startstr = "<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>";
String endString="<tr>"
+"<td bgcolor= '#d1eb9d' ></td>"
+"<td bgcolor= '#d1eb9d' align='right' ><font size='2'><i><b>Total</b></i></td>"
+"<td bgcolor= '#d1eb9d' align='center' >";
String finalString= "</td>"
+"</tr>"
+"</table>"
+"</div>";
sb.append(startstr);
int sum=0;
for (Map.Entry<String, String> queMap1 : qvo.getResponseMap().entrySet()){
String value=queMap1.getValue();
sum+=Integer.parseInt(value);
}
////////////////////////////////////////////////////////////////////////////System.out.println("type of question in gettable"+qvo.getType());
for (Map.Entry<String, String> queMap1 : qvo.getResponseMap().entrySet()){
String key=queMap1.getKey();
String value=queMap1.getValue();
String[] splitarr= key.split(",");
String type= qvo.getType();
sb.append("</div></td>");
sb.append("<td align='left' ><div>");
if(surveyType.equalsIgnoreCase("singlesurvey")){
sb.append(splitarr[2]);
}else sb.append(splitarr[0]);
sb.append("</div></td>");
sb.append("<td align='center' ><div >");
if(type.equalsIgnoreCase("M") || type.equalsIgnoreCase("P")){
sum=Integer.parseInt(surveyNumberResponses);
}
double percent=getPercentage(value,String.valueOf(sum));
sb.append(String.valueOf(percent)+"%");
sb.append("</div></td>");
// response
sb.append("<td align='center'><div >");
sb.append(value);
sb.append("</div></td>");
sb.append("</tr>");
}
sb.append(endString);
sb.append(String.valueOf(sum));
sb.append(finalString);
try {
htmlWorker.parse(new StringReader(sb.toString()));
} catch (IOException e) {}
以上代码可以正确地呈现英文,并在中文单词处显示空格
英语图像如下所示
请建议我如何在PDF中显示可用的HTML字符串中的中文单词我正在使用iText api创建PDF
更新
现在我用这段代码来解析上面仍然显示空白的字符串
String ttfFontName=System.getProperty("user.dir")+"/ARIALUNI.TTF";
XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
fontImp.register(ttfFontName);
FontFactory.setFontImp(fontImp);
InputStream is = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
worker.parseXHtml(writer, document, is,null, Charset.forName("UTF-8"), fontImp);
请先帮我谢谢
# 1 楼答案
谢谢你布鲁诺洛瓦吉我终于找到了问题的解决办法。正如我在上面的问题中编辑的那样,在使用XMLWorkerHelper之后,我的PDF仍然在中文单词的位置显示空白,这是因为我没有在HTML代码的样式标记中指定字体(我注册了XMLWorkerFontProvider对象)。现在HTML代码将如下所示
Java代码如下所示
现在桌子看起来像这样
希望这篇文章能帮助他人,谢谢你