2015-07-10 149 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,它可以保护您的代码不受编码问题的影响。