使用iTextSharp问题设置字体

时间:2018-04-24 17:01:46

标签: itext

所有

我正在尝试填写现有的PDF并且无法更改字体。

        var filename = ConfigurationManager.AppSettings["Pdf"];
        var reader = new PdfReader(AppDomain.CurrentDomain.BaseDirectory + filename);
        var ms = new MemoryStream();
        var stamper = new PdfStamper(reader, ms);
        using (StreamWriter sw = new StreamWriter(ms))
        {
            foreach (var key in reader.AcroFields.Fields.Keys)
            {
                stamper.AcroFields.SetFieldProperty(key, "textsize", 8.0f, null);
                stamper.AcroFields.SetFieldProperty(key, "textfont", BaseFont.HELVETICA, null);
                stamper.AcroFields.SetField(key, "some value");
            }
        }
        stamper.FormFlattening = true;
        stamper.Close();
        reader.Close();

我错过了什么?当我编译这段代码时,它会破坏' textfont'代码行并且说"无法转换类型为' System.String'的对象输入' iTextSharp.text.pdf.BaseFont'"。

还在学习这些东西。

帮助!

1 个答案:

答案 0 :(得分:1)

在您的代码中设置

stamper.AcroFields.SetFieldProperty(key, "textfont", BaseFont.HELVETICA, null);
对于属性“textfont”,

AcroFields.SetFieldProperty需要类型为BaseFont的值。

BaseFont.HELVETICA不是特定的BaseFont实例,而是特定基本14字体的名称string常量。

因此,当iTextSharp尝试使用string值作为BaseFont值时,您会在运行时获得该异常。

您可以使用例如

检索Helvetica的BaseFont个实例
BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);

并在BaseFont.HELVETICA来电中使用{而不是SetFieldProperty