我正在尝试填充现有的PDF。我正在尝试填充一个矩形单选按钮。但是当我把它放在价值上时。外观从矩形变为圆形。
这是我的代码:
using (var existingFileStream = new FileStream(existingFileNameWithPath, FileMode.Open, FileAccess.Read))
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
{
// Open existing PDF
var pdfReader = new PdfReader(existingFileStream);
// PdfStamper, which will create
var stamper = new PdfStamper(pdfReader, newFileStream,'\0', true);
var form = stamper.AcroFields;
form.SetField("Application for Export", "New");
stamper.Close();
pdfReader.Close();
}
我要制作的PDF类似于此pdf:https://www.faa.gov/documentLibrary/media/Form/FAA_Form_8130-1.pdf
答案 0 :(得分:3)
PDF中的表单字段有点独特。他们定义了应该使用显式绘制操作在打开,关闭,有时甚至是聚焦(处于主动按下状态)状态下的外观。
填充表单时,iText必须创建这些值,因为无法保证它们的存在(尤其是当您使用iText创建表单时!),并且iText会插入“典型”外观。对于单选按钮,这是一个圆形按钮。请注意,至少对于我来说,圆形按钮仅在我主动单击按钮时出现。
您有两个选择-相信所讨论的PDF已经具有外观状态,并禁用生成状态(您列出的PDF确实具有这些状态)
PdfReader reader = new PdfReader(INPUT_FILE);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(OUTPUT_FILE));
AcroFields fields = stamper.getAcroFields();
fields.setGenerateAppearances(false); //Add this line
fields.setField("Application for Export", "New");
stamper.close();
或者,您可以手动编写绘图操作,然后自己将其插入到表单字段的外观状态中。
答案 1 :(得分:0)
如果要填充文本字段,则需要setGenerateAppearences = true。此代码有助于解决-
AcroFields fields = stamper.AcroFields;
fields.GenerateAppearances = false;
fields.SetField("IndividualChk", "On");
fields.GenerateAppearances = true;
fields.SetField("InvestorName", "Mensh");
stamper.FormFlattening = true;