所有
我正在尝试填写现有的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'"。
还在学习这些东西。
帮助!
答案 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
。