我需要使用来向字段添加西里尔字母值的帮助PDFBox API
。这是我到目前为止的内容:
PDDocument document = PDDocument.load(file);
PDDocumentCatalog dc = document.getDocumentCatalog();
PDAcroForm acroForm = dc.getAcroForm();
PDField naziv = acroForm.getField("naziv");
naziv.setValue("Наслов"); // this part right here
naziv.setValue("Naslov"); // it works like this
当我的输入是拉丁字母时,它可以完美地工作。但是我也需要处理西里尔字母的输入。我该怎么做?
ps这是我得到的异常:原因:java.lang.IllegalArgumentException:U +
043D(’afii10079’)在该字体Helvetica编码中不可用:WinAnsiEncoding
下面的代码在acroform默认资源字典中添加了适当的字体,并替换了默认外观中的名称。当调用setValue()时,PDFBox使用新字体重新创建字段的外观流。
public static void main(String[] args) throws IOException
{
PDDocument doc = PDDocument.load(new File("ZPe.pdf"));
PDAcroForm acroForm = doc.getDocumentCatalog().getAcroForm();
PDResources dr = acroForm.getDefaultResources();
// Important: the font is Type0 (allows more than 256 glyphs) and NOT SUBSETTED
PDFont font = PDType0Font.load(doc, new FileInputStream("c:/windows/fonts/arial.ttf"), false);
COSName fontName = dr.add(font);
Iterator<PDField> it = acroForm.getFieldIterator();
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);
if (!matcher.find() || matcher.groupCount() < 2)
{
// oh-oh
}
String oldFontName = matcher.group(1);
da = da.replaceFirst(oldFontName, fontName.getName());
textField.setDefaultAppearance(da);
}
}
acroForm.getField("name1").setValue("Наслов");
doc.save("result.pdf");
doc.close();
}
更新4.4.2019:为节省空间,在调用setValue之前删除外观可能很有用:
acroForm.getField("name1").getWidgets().get(0).setAppearance(null);
要检查AcroForm默认资源中是否有未使用的字体,请参见此答案。
更新7.4.2019:如果字体很大(例如ArialUni)并且要设置许多字段(PDFBOX-4508),则可能会遇到性能不佳的情况。在这种情况下,请在调用之前保存并重新加载文件setValue
。
要查明字体是否支持预期的文本,请调用PDFont.encode()
并检查IllegalArgumentException
。
我一直在使用PDFSharp来填充带有AcroForm字段的PDF。我可以使用以下代码设置表单字段的值: 我遇到的问题是,当我试图更改将进入字段的文本的字体时。我能够访问字段的font属性,它允许我像这样设置它: 然而,当我打开保存的PDF时,它默认字体返回到不同的字体。我也试过使用其他字体,比如“Arial”或“Helvetica”,以及不同的大小,但似乎没有一种字体能坚持。 如果我用Foxit
如何使其在输出俄语时,输出俄语字母,而不是�� ����� �������� �����! 它不仅在控制台中工作,而且在终端中一切正常 我试过这个 > 窗口 还有这个 窗户- 还有这个 在eclipse主目录中打开eclipse.ini,或者在STS(Spring Tool Suite)的情况下打开STS. ini,将下面的行放在文件末尾-Dfile.encoding=UTF-8 但还是做不到。请
问题内容: 当我写一些西里尔字母的文字System.out.println(“Русскийязык”)-然后使用Windows控制台胜过此╨єёёъшщч√ъ时,该如何解决?文件编码为utf-8,但是没关系,当它是ansii或Windows-1251时,它的输出相同。 问题答案: 请注意,您可能会在输出中看到一些尾随的垃圾(我确实如此),但是如果将输出重定向到文件,则会看到这只是一个显示伪像。
Adobe Reader无法正确显示我的PDF。对于其他PDF阅读器来说,这是一个语法问题,因为我听说Adobe Reader对PDF语法要求更严格。字体似乎是它们应该的两倍大,但水平间距是正确的,这使得字体相互重叠。 这是我的C#代码(字体创建代码在本文末尾)。
我正在编写一个应用程序,它使用PDFbox库来填充PDF文件中的字段。 在其中一个字段中,我将文本设置为希伯来字母。 当我在Android设备上运行代码时,我会得到以下日志: 我试图在堆栈溢出中找到一些关于它的信息,但我找到的答案都与填充表单有关。它都与有关。 你能帮我解决这个错误并用PDFBox在表格中填写希伯来字母吗?