如何在使用iText展平模板后嵌入字体?

时间:2015-12-17 13:13:19

标签: java fonts itext itextpdf

我想使用模板自动生成一些中文PDF文档,这就是我所做的:

  1. 使用Acrobat制作模板,将所有AcroField设置在正确的位置。
  2. 将所有AcroField的字体设置为STXiHei
  3. 使用Java和iText填充这些字段。
  4. 代码如下:

    BaseFont STXiHei = BaseFont.createFont(getResource("STXiHei.ttf"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    
    PdfReader reader = new PdfReader(getResource("template.pdf"));
    FileOutputStream stream = new FileOutputStream("doc.pdf");
    PdfStamper stamper = new PdfStamper(reader, stream);
    AcroFields form = stamper.getAcroFields();
    form.setField("Buyer_Name", "购货方");
    stamper.setFormFlattening(true);
    form.setFieldProperty("Buyer_Name", "textfont", STXiHei, null);
    form.addSubstitutionFont(STXiHei);
    stamper.close();
    

    我必须使用字体STXiHei,我的模板中的中文文字是这个字体。

    问题是:我无法完全控制输入文本的字体。一些应用程序可以正确呈现(Adobe Reader),其中一些使用替换字体(Chrome),其中最糟糕的是崩溃(某些Android PDF呈现库)。

    我认为这是因为我没有为输入文本嵌入STXiHei,这可以从字体页面确认:

    Font Page

    你可以看到最后一个与其他的不同,编码与我输入的不同。那么我该如何解决这个问题?

0 个答案:

没有答案