【问题标题】:Completing check boxes within a PDF using iTextSharp使用 iTextSharp 完成 PDF 中的复选框
【发布时间】:2016-09-22 17:28:03
【问题描述】:

我目前正在尝试获取现有的 PDF,找到所有现有的复选框并使用 C# 根据某些条件完成它们。

查看其他相关问题后: https://stackoverflow.com/a/4827996/6328714

我遇到的主要问题是在 PDF 中找到所有 Checkbox 对象——我相信我需要能够在我的代码中引用正确的复选框。

至于查看 PDF 内部结构的工具,我使用的是 PDFXplorer,但在树结构中找到实际复选框时运气不佳。

所以:

  • 我是否~需要~对象才能选中该框?
  • 检查框是否像下面发布的代码一样简单? (如果是这样的话,这似乎相当简单)

以下示例取自链接问题:

PdfReader reader = new PdfReader(fileNameIn);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(fileNameOut));
AcroFields form = stamper.getAcroFields();

form.setField("Name","Test Name");
form.setField("odot","123456");
form.setField("Consortium","A Testing Co");
form.setField("PName","My Name");
form.setField("date","10/14/03");
form.setField("Box1","true"); //This is the checkbox control
stamper.close();

【问题讨论】:

  • 因为这些值只是测试值,与我正在以任何方式/形状或形式使用的 PDF 无关。

标签: c# itext


【解决方案1】:

您要做的第一件事是找到为表单定义的字段,并找出哪些字段是复选框。

阅读此问题以了解这是如何完成的:iText doesn't set checkbox field

public class MainClass {
    public static void main(String[] args) {
        try {
            PdfReader reader = new PdfReader("pdf/fw9_template.pdf");
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("test.pdf"));
            AcroFields form = stamper.getAcroFields();

            String states[] = form.getAppearanceStates("topmostSubform[0].Page1[0].FederalClassification[0].c1_1");
            System.out.println(states);


            for (Iterator i = form.getFields().keySet().iterator(); i.hasNext(); ) {
                String key = (String) i.next();
                System.out.print(key + " : ");
                switch(form.getFieldType(key)) {
                    case AcroFields.FIELD_TYPE_CHECKBOX:
                        System.out.println("Checkbox");
                        break;
                    case AcroFields.FIELD_TYPE_COMBO:
                        System.out.println("Combobox");
                        break;
                    case AcroFields.FIELD_TYPE_LIST:
                        System.out.println("List");
                        break;
                    case AcroFields.FIELD_TYPE_NONE:
                        System.out.println("None");
                        break;
                    case AcroFields.FIELD_TYPE_PUSHBUTTON:
                        System.out.println("Pushbutton");
                        break;
                    case AcroFields.FIELD_TYPE_RADIOBUTTON:
                        System.out.println("Radiobutton");
                        break;
                    case AcroFields.FIELD_TYPE_SIGNATURE:
                        System.out.println("Signature");
                        break;
                    case AcroFields.FIELD_TYPE_TEXT:
                        System.out.println("Text");
                        break;
                    default:
                        System.out.println("?");
                }
            }
            form.setField("topmostSubform[0].Page1[0].FederalClassification[0].c1_1[0]", "true");

            stamper.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

然后你想选中复选框,正如问题Get field value for the check box中所问的那样

testForm.SetField("AmountCollect", "Off");
testForm.SetField("AmountCollect", "Yes");
testForm.SetField("AmountCollect", "0");

对于on状态(阅读How to determine “Checked” value for Checkboxes (from GetAppearanceStates)),不同的复选框可以有不同的值("On""Yes""true""1"、...),所以您必须使用getAppearances() 方法才能知道可以使用哪些值。

当然,所有这些都在 iText 官方网站上进行了详细解释,这是您在寻找答案时应该首先查看的地方:

浏览官方常见问题解答,您会发现 iText 还有一个工具可以检查 PDF 中的对象。该工具称为 RUPS。

【讨论】:

  • 非常感谢您提供的大量信息 - 感谢您与 iText 欢呼,并为问题提供指导!
猜你喜欢
  • 2013-11-11
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多