私のPDFBoxの実装では、さまざまなフォントをテストして複数の言語で文字列を書き込むメソッドを作成しました。PDFBox - サロゲートペアで構成される文字列をエンコードできない
PDFont currentFont = PDType0Font.load(pdfDocument, new File("path/to/font/font.ttf"));
for (int offset = 0; offset < sValue.length();) {
int iCodePoint = sValue.codePointAt(offset);
boolean isEncodable = isCodePointEncodable(currentFont, iCodePoint);
//-Further logic here, etc.
offset += Character.charCount(iCodePoint);
}
private boolean isCodePointEncodable (PDFont currentFont, int iCodePoint) throws IOException {
StringBuilder st = new StringBuilder();
st.appendCodePoint(iCodePoint);
try {
currentFont.encode(st.toString());
return true;
} catch (IllegalArgumentException iae) {
return false;
}
}
これは基本多言語面(BMP)、BMPを超えたユニコードが動作しません必要とするものでは何のため正常に動作している間。私は関連フォントをグリフチャートで広範囲にダウンロードして見て、各コードを記録しました。たとえば、U + 1F681(または10進数128641)のエンコードを試みると、ロギングが検出され、NotoEmoji-Regular.ttfにこの文字をエンコードしようとしましたが、実際にはこの文字があります。残念ながら、それはまだfalseを返しました。
は具体的には、私のロギングサーバはこれを返さ:
Code Point 128641() cannot be encoded in font NotoEmoji
は、このための回避策や解決策はありますか?ありがとうございました。