PDFBox API:如何处理西里尔值

我需要使用PDFBox API将西里尔文值添加到字段方面的帮助。这是我到目前为止: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

当我的输入是在拉丁字母表中,它的工作原理非常完美。但我还需要处理西里尔文的输入。 我该怎么办?

p.s.这是我得到的异常: 引起:java.lang.IllegalArgumentException:U + 043D('afii10079')不适用于此字体Helvetica编码:WinAnsiEncoding

回答:

下面的代码在acroform default资源字典,并以默认外观替换名称。当您调用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();

}

以上是 PDFBox API:如何处理西里尔值 的全部内容, 来源链接: utcz.com/qa/266174.html

回到顶部