gpt4 book ai didi

java - iText - 不显示中文字符

转载 作者:行者123 更新时间:2023-12-02 11:16:04 35 4
gpt4 key购买 nike

我有一个带有 utf8 编码和中文字符的数据库,遇到以下问题。我将这些数据放入字符串中,然后将其传递给库的单元格,一切都很好,除了当我使用中文字符时它们不会显示,我尝试了以下方法:

public String testEncoding(String str) {
String result = "";
for(char ch : str.toCharArray())
result += "\\u" + Integer.toHexString(ch | 0x10000).substring(1);
return result;
}

还使用 notosans 和 arial uni 字体,将字符串转换为 unicode,当我打印时,它显示 pdf\u6b98\u528d 中的 unicode,而不是中文字符,但当我将其粘贴到字符串中时

String text = "\u6b98\u528d";

并将其传递到它显示良好的段落单元格!这是我使用的代码:

final String PATH_FONT_ARIALUNI = "src/main/resources/fonts/NotoSansCJKsc-Regular.otf";        

// FOR Chinese
BaseFont baseFont = null;
try {
baseFont = BaseFont.createFont(PATH_FONT_ARIALUNI, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Font font = new Font(baseFont, 6.8f);

Font fontNormal = new Font(FontFamily.HELVETICA, 10, Font.NORMAL, BaseColor.RED);



char[] aa = title.toCharArray();
boolean isLastChineseChar = false;


for (int j = 0; j < title.length(); j++) {

if((Character.UnicodeBlock.of(aa[j]) == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS)){


isLastChineseChar = true;
/*System.out.println("Is CHINESE: " + aa[j]);*/
}
}

Phrase phrase = null;

if(isLastChineseChar){

phrase = new Phrase(title, font);
//also passing testEncoding(title) but as i say it shows unicode in the printed pdf

PdfPCell cell = new PdfPCell(phrase);
cell.setVerticalAlignment(Element.ALIGN_CENTER);

if (align == 2) {
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
}
return cell;

} else {
phrase = new Phrase(title, fontNormal);

PdfPCell cell = new PdfPCell(phrase);
cell.setVerticalAlignment(Element.ALIGN_CENTER);
if (align == 2) {
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
}
return cell;

}

有什么想法吗?我做错了什么?我在这里看到很多示例,但有读取文本文件并直接传递 unicode 字符串,这与我的示例不同。

最佳答案

我的代码已经工作正常,如果您的生产服务器中存在字符未显示的任何问题,解决方案如下:

在你的类(class)中添加这个

 @Value("classpath:fonts/NotoSansCJKsc-Regular.otf")
private Resource res;

你像这样导入:

        baseFont = BaseFont.createFont(res.getURI().getPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

一切都会顺利进行!

Resource 是一个 Spring 框架类,可以为您完成这项工作

关于java - iText - 不显示中文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50281797/

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