2017-12-27 75 views
2

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エンコーディングでは使用できません。

+0

CreateSimpleFormWithEmbeddedFont.javaの例では、特定のフォントを使用する方法、つまりコードを部分的に使用する方法を示しています。任意のPDFや特定のPDFの特定のフィールドにのみ必要ですか?あなたはPDFを共有できますか? –

+0

私はgoogle.driveでPDFを公開するつもりです。 はリンクです - > https://drive.google.com/open?id=1eI1iRQnrxMA2kEVJPLH9FhQMx2_2kMHj – Cronck

答えて

1

以下のコードをWinAnsiEncodingはacroformデフォルトで適切なフォントを追加しますデフォルトのアペンタンスの名前を置き換えます。 PDFBoxは、setValue()を呼び出すときに新しいフォントを使用してフィールドの外観ストリームを再作成します。

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(); 
}