iTextSharp:填充数据时,Pdf矩形单选按钮变为圆形按钮

时间:2018-08-28 18:39:14

标签: c# itext

我正在尝试填充现有的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

2 个答案:

答案 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;