我正在编写一个应用程序,它使用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)
我试图在堆栈溢出中找到一些关于它的信息,但我找到的答案都与填充表单有关。它都与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在表格中填写希伯来字母吗?
我使用这个答案来更改字段文本的字体。唯一的问题是,现在文本的方向是错误的,所以我改变了字符串的方向:
try {
PDDocument document = PDDocument.load(getAssets().open("file.pdf"));
PDDocumentCatalog docCatalog = document.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
PDResources dr = acroForm.getDefaultResources();
PDFont liberationSans = PDType0Font.load(document, getAssets().open("com/tom_roush/pdfbox/resources/ttf/LiberationSans-Regular.ttf"));
COSName fontName = dr.add(liberationSans);
Iterator<PDField> it = acroForm.getFields().iterator();
while (it.hasNext()) {
PDField field = it.next();
if (field instanceof PDTextField) {
PDTextField textField = (PDTextField) field;
String da = textField.getDefaultAppearance();
// replace font name in default appearance string
Pattern pattern = Pattern.compile("\\/(\\w+)\\s.*");
Matcher matcher = pattern.matcher(da);
String oldFontName = matcher.group(1);
da = da.replaceFirst(oldFontName, fontName.getName());
textField.setDefaultAppearance(da);
}
}
// Fill the text field
((PDTextField) acroForm.getField("name")).setValue(new StringBuilder("בדיקה").reverse().toString());
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());
}
我想在星形符号中显示所需的文本字段 如果用户未输入任何值,则应将边框颜色更改为红色 如果用户输入值,则应将边框颜色更改为绿色
我想在我的中添加一种,当用户更改的值时,应用程序会在控制台上打印一些内容。 我搜索了一下,发现了以下非常类似的问题:将Listener值更改为JTextField 上述问题的答案非常清晰有效,但不幸的是,它只对(而不是)有用,因为它说您应该像这样使用DocumentListener: 但在JavaFX的文本字段中,您无法执行此操作。所以解决办法是什么? (用代码描述可能非常好,但如果不可能,任何提
问题内容: 我试图 建立一个解释器,所以我想知道如何 实时更改文本的颜色。例如,我在文本字段中输入的单词是: 几秒钟后,单词变成绿色。 可能吗? 问题答案: package test;
我在javaFX中有一个文本字段,在该字段中键入的任何内容都必须以蓝色显示,这可以通过css实现吗?如果是,那么如何?
问题内容: 我需要使用来向字段添加西里尔字母值的帮助。这是我到目前为止的内容: 当我的输入是拉丁字母时,它可以完美地工作。但是我也需要处理西里尔字母的输入。我该怎么做? ps这是我得到的异常:原因:java.lang.IllegalArgumentException:U + 043D(’afii10079’)在该字体Helvetica编码中不可用:WinAnsiEncoding 问题答案: 下面的
我对这两个都不熟悉 在我所有的表单中,textField的下划线都显示为蓝色。我想把它换成其他颜色。我使用的代码就像。。。 无法理解如何实现这一点。 注意:我知道这里有一个类似的问题,在flifter中更改TextField的下划线。但是,在那里也没有完全解决。另外,还有一个链接看起来与我的类似,它在这里使用appcompat v7更改EditText底线颜色,但实际上是属于Android开发的,