2015-07-10 42 views
0

我試圖使用以下代碼來設置iText的表單字段值,但無法顯示字符ӧ。 test-form-fill.pdf由Adobe LifeCycle表單設計器創建。請幫忙!無法在acro表單字段中顯示特殊字符

InputStream is = new FileInputStream("doc/test-form-fill.pdf"); 
OutputStream os = new FileOutputStream("doc/test-form-fill-done.pdf"); 

PdfReader reader = new PdfReader(is); 

PdfStamper stamper = new PdfStamper(reader, os); 


AcroFields form = stamper.getAcroFields(); 

form.setField("field1", "ӧ11111"); 

stamper.setFormFlattening(true); 
stamper.close(); 
reader.close(); 


is.close(); 

os.close(); 
+0

此問題已被回答之前:http://stackoverflow.com/questions/24305574/arabic-data-disappears-on-form-flattening-in-itext我想這個問題標記爲重複,但一個可以只選擇接受的答案或者至少有一個投票的回答。 –

回答

0

ӧ字符可能顯示不出來,因爲這是用於表單字段的字體不知道如何得出這樣的性格。看看在FillFormSpecialChars2例如導致form_special_chars.pdf

enter image description here

您需要定義這樣的置換字體:

public void manipulatePdf(String src, String dest) throws DocumentException, IOException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, 
      new FileOutputStream(dest)); 
    AcroFields fields = stamper.getAcroFields(); 
    BaseFont bf = BaseFont.createFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, false, null, null, false); 
    fields.setFieldProperty("Name", "textfont", bf, null); 
    fields.setField("Name", "\u04e711111"); 
    stamper.setFormFlattening(true); 
    stamper.close(); 
} 

在我的情況下,FONT指FreeSans:

public static final String FONT = "resources/fonts/FreeSans.ttf"; 

FreeSans知道如何繪製ӧ,但隨時可以更換FONT與支持這些字符的任何其他字體的路徑。

如您所見,我還將ӧ更改爲\u04e7,它可以保護您的代碼不受編碼問題的影響。