gpt4 book ai didi

java - 如何使用 iText 的 HTMLWorker 类将多语言 HTML 字符串渲染为 PDF

转载 作者:太空宇宙 更新时间:2023-11-04 13:06:41 25 4
gpt4 key购买 nike

我的 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) {}

上面的代码可以正确呈现英文,并在中文单词的位置显示空格

英语图像如下所示

enter image description here

中文图像看起来像这样 enter image description here

请建议我如何在 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);

请帮助我,提前致谢

最佳答案

谢谢BrunoLowagie我终于找到了问题的解决方案。正如我在上面的问题中编辑的那样,在使用 XMLWorkerHelper 后,我的 PDF 仍然在中文单词的位置显示空白,这是因为我没有在 HTML 代码的样式标记中指定字体(我为 XMLWorkerFontProvider 对象注册)。现在 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>";

Java 代码将如下所示

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);

现在表格看起来像这样 enter image description here

谢谢您,希望这篇文章对其他人有帮助。

关于java - 如何使用 iText 的 HTMLWorker 类将多语言 HTML 字符串渲染为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com