使用 iTextSharp 完成 PDF 中的复选框
Completing check boxes within a PDF using iTextSharp
我目前正在尝试获取现有的 PDF,找到所有现有的复选框并使用 C# 根据某些条件完成它们。
查看其他相关问题后:
我遇到的主要问题是找到 PDF 中的所有复选框对象 - 我相信我需要能够在我的代码中引用正确的复选框。
至于查看 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();
您要做的第一件事是找到为表单定义的字段,并找出这些字段中哪些是复选框。
阅读这个问题以了解这是如何完成的:
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[,不同的复选框可以有不同的值("On"
、"Yes"
、"true"
、"1"
、...) =39=]状态(读取How to determine “Checked” value for Checkboxes (from GetAppearanceStates)),所以你必须使用getAppearances()
方法才能知道可以使用哪些值。
当然,所有这些都在官方 iText 网站上进行了非常详细的解释,这是您在寻找答案时应该首先查看的地方:
- How to get specific types from AcroFields? Like PushButtonField, RadioCheckField, etc
- How to check a check box?
- ...
浏览官方FAQ,你会发现iText还有一个工具可以检查PDF中的对象。该工具称为 RUPS。
我目前正在尝试获取现有的 PDF,找到所有现有的复选框并使用 C# 根据某些条件完成它们。
查看其他相关问题后:
我遇到的主要问题是找到 PDF 中的所有复选框对象 - 我相信我需要能够在我的代码中引用正确的复选框。
至于查看 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();
您要做的第一件事是找到为表单定义的字段,并找出这些字段中哪些是复选框。
阅读这个问题以了解这是如何完成的:
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[,不同的复选框可以有不同的值("On"
、"Yes"
、"true"
、"1"
、...) =39=]状态(读取How to determine “Checked” value for Checkboxes (from GetAppearanceStates)),所以你必须使用getAppearances()
方法才能知道可以使用哪些值。
当然,所有这些都在官方 iText 网站上进行了非常详细的解释,这是您在寻找答案时应该首先查看的地方:
- How to get specific types from AcroFields? Like PushButtonField, RadioCheckField, etc
- How to check a check box?
- ...
浏览官方FAQ,你会发现iText还有一个工具可以检查PDF中的对象。该工具称为 RUPS。