【发布时间】:2019-06-27 15:34:39
【问题描述】:
我正在编写一个应用程序,它使用 PDFbox 库来填充 PDF 文件中的字段。
在其中一个字段中,我将文本设置为用希伯来字母书写。
当我在我的 Android 设备上运行代码时,我得到以下日志:
java.lang.IllegalArgumentException: This font type only supports 8-bit code points
at com.tom_roush.pdfbox.pdmodel.font.PDType1Font.encode(PDType1Font.java:317)
at com.tom_roush.pdfbox.pdmodel.font.PDFont.encode(PDFont.java:264)
at com.tom_roush.pdfbox.pdmodel.font.PDFont.getStringWidth(PDFont.java:293)
at com.tom_roush.pdfbox.pdmodel.interactive.form.PlainTextFormatter.format(PlainTextFormatter.java:183)
at com.tom_roush.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.insertGeneratedAppearance(AppearanceGeneratorHelper.java:360)
at com.tom_roush.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceContent(AppearanceGeneratorHelper.java:224)
at com.tom_roush.pdfbox.pdmodel.interactive.form.AppearanceGeneratorHelper.setAppearanceValue(AppearanceGeneratorHelper.java:128)
at com.tom_roush.pdfbox.pdmodel.interactive.form.PDTextField.constructAppearances(PDTextField.java:247)
at com.tom_roush.pdfbox.pdmodel.interactive.form.PDTerminalField.applyChange(PDTerminalField.java:221)
at com.tom_roush.pdfbox.pdmodel.interactive.form.PDTextField.setValue(PDTextField.java:202)
at com.package.app.MainActivity.lambda$checkPdf$4$MainActivity(MainActivity.java:128)
at com.package.app.MainActivity$$Lambda$2.run(Unknown Source:18)
at java.lang.Thread.run(Thread.java:764)
我试图在 Stack Overflow 上找到有关它的一些信息,但我找到的答案都与填写表格无关。都和PDPageContentStream有关。
这就是我在代码中填写表格的方式:
try {
PDDocument document = PDDocument.load(getAssets().open("file.pdf"));
PDDocumentCatalog docCatalog = document.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
// Fill the text field
((PDTextField) acroForm.getField("name")).setValue("בדיקה");
File root = android.os.Environment.getExternalStorageDirectory();
String path = root.getAbsolutePath() + "/test.pdf";
document.save(path);
document.close();
} catch (IOException e) {
Log.e("e", e.getMessage());
}
您能帮我解决这个错误并使用 PDFbox 在表单中填写希伯来字母吗?
【问题讨论】:
-
不知道这是否也适用于 Android 版 PDFBox,但这个答案显示了如何替换字段字体:stackoverflow.com/questions/47995062
-
@TilmanHausherr 谢谢!这真的很有帮助。我现在唯一的问题是希伯来语文本是从左到右显示的,而应该从右到左显示。你知道该怎么做吗?
-
哎呀,我忘记了,抱歉 :-( 不,没有解决方案,甚至在桌面版 PDFBox 中也没有。你所能做的就是破解 Android 版 PDFBox 源代码,即 PlainTextFormatter 来反转字符串,当它是希伯来语并且没有任何数字或其他不是 RTL 的东西时,可能使用 icu4j。
-
@TilmanHausherr 好的,谢谢!
标签: android pdf fonts pdfbox hebrew