У меня следующая проблема, есть база данных с кодировкой 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, и когда я печатаю, он показывает мне Unicode в pdf \ u6b98 \ u528d, не китайские символы, но когда я вставляю это в строку
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 напрямую, не как в моем примере.