XML WorkerHelper.getInstance().parseXHtmlを使用してPDFを生成する際の中国語の非表示または文字化の問題
1601 ワード
問題環境:
idea+tomcat
コードクリップ:
問題点:
プロジェクトの配置後に生成されたpdf内の中国語の内容は文字化けまたは表示されない
問題追跡(debug):
シナリオ1:ローカルmain関数呼び出しメソッドによりhtmlString.getBytes長94ビットを取得します.運転結果:pdfコンテンツ表示正常
シナリオ2:tomcatはプロジェクトを実行し、プロジェクトでメソッドを呼び出し、htmlString.getBytesの長さ89ビットを取得します.実行結果:pdfコンテンツの中国語部分に問題が発生
結果:
ideaのデフォルトの符号化方式はUTF-8に調整されているため、後期開発では符号化問題をあまり重視していないが、tomcatは符号化方式を調整していないため、main関数を走るときはすべて正常であり、tomcatが実行された後に問題が発生する.
ソリューション:
htmlString.getBytes()をhtmlString.getBytes(「UTF-8」)に変更
idea+tomcat
コードクリップ:
String fontPath=getFontPath();
htmlString=" 1p ";
document.open();
try {
XMLWorkerHelper.getInstance().parseXHtml(writer,document,
new ByteArrayInputStream(htmlString.getBytes()),
null,
Charset.forName("UTF-8"),new XMLWorkerFontProvider(fontPath));
} catch (IOException e) {
e.printStackTrace();
throw new PDFException("PDF ",e);
}finally {
document.close();
}
問題点:
プロジェクトの配置後に生成されたpdf内の中国語の内容は文字化けまたは表示されない
問題追跡(debug):
シナリオ1:ローカルmain関数呼び出しメソッドによりhtmlString.getBytes長94ビットを取得します.運転結果:pdfコンテンツ表示正常
シナリオ2:tomcatはプロジェクトを実行し、プロジェクトでメソッドを呼び出し、htmlString.getBytesの長さ89ビットを取得します.実行結果:pdfコンテンツの中国語部分に問題が発生
結果:
ideaのデフォルトの符号化方式はUTF-8に調整されているため、後期開発では符号化問題をあまり重視していないが、tomcatは符号化方式を調整していないため、main関数を走るときはすべて正常であり、tomcatが実行された後に問題が発生する.
ソリューション:
htmlString.getBytes()をhtmlString.getBytes(「UTF-8」)に変更