2016-09-22 2 views
1

В настоящее время я пытаюсь взять существующий PDF-файл, найти все существующие флажки и заполнить их на основе некоторых критериев, используя C#.Завершение флажков в PDF с помощью iTextSharp

После рассмотрения других связанных с этим вопросов: https://stackoverflow.com/a/4827996/6328714

Основной вопрос, я имею в поиске все Checkbox объектов в PDF - который я считаю, мне нужно, чтобы иметь возможность ссылаться на правильный флажок в моем коде.

Что касается инструментов для просмотра внутренней структуры PDF, я использую PDFXplorer, но мне не очень повезло найти фактические флажки в древовидной структуре.

Итак:

  • Do I ~ ~ необходимости объект, чтобы иметь возможность проверить коробку?
  • Проверяет ли ящики так же просто, как размещенный код ниже? (Это кажется довольно прямо вперед, если так)

Ниже пример взят из связанного вопроса:

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(); 
+0

Поскольку эти значения являются просто тестовыми значениями и не привязаны к PDF-файлам, я работаю каким-либо образом/формой или формой. – confusedandamused

ответ

2

Первое, что вы хотите сделать, это найти поля, которые были определены для формы , и узнать, какие из этих полей являются флажками.

Прочитайте этот вопрос, чтобы выяснить, как это делается: 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", "Yes", "true", "1", ...) для на состоянии (см.)), поэтому вам необходимо использовать метод getAppearances(), чтобы узнать, какие значения могут быть использованы.

Все это, конечно, объясняется в деталях на официальном веб-сайте IText, который является первое место, вы должны выглядеть, когда вы ищете ответ:

Сидя официальный FAQ, вы обнаружите, что IText также имеет инструмент для инспектирования объектов внутри PDF. Этот инструмент называется RUPS.

+0

Большое спасибо за богатство информации - я ценю, что вы протягиваете руку и предлагаете руководство для вопросов с помощью iText! – confusedandamused

Смежные вопросы