示例#1
0
 private void expandFields(PdfFormField field, ArrayList allAnnots) {
   allAnnots.add(field);
   ArrayList kids = field.getKids();
   if (kids != null) {
     for (int k = 0; k < kids.size(); ++k) expandFields((PdfFormField) kids.get(k), allAnnots);
   }
 }
示例#2
0
 private void addFieldResources(PdfDictionary catalog) throws IOException {
   if (fieldArray == null) return;
   PdfDictionary acroForm = new PdfDictionary();
   catalog.put(PdfName.ACROFORM, acroForm);
   acroForm.put(PdfName.FIELDS, fieldArray);
   acroForm.put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g "));
   if (fieldTemplates.isEmpty()) return;
   PdfDictionary dr = new PdfDictionary();
   acroForm.put(PdfName.DR, dr);
   for (PdfTemplate template : fieldTemplates) {
     PdfFormField.mergeResources(dr, (PdfDictionary) template.getResources());
   }
   // if (dr.get(PdfName.ENCODING) == null) dr.put(PdfName.ENCODING, PdfName.WIN_ANSI_ENCODING);
   PdfDictionary fonts = dr.getAsDict(PdfName.FONT);
   if (fonts == null) {
     fonts = new PdfDictionary();
     dr.put(PdfName.FONT, fonts);
   }
   if (!fonts.contains(PdfName.HELV)) {
     PdfDictionary dic = new PdfDictionary(PdfName.FONT);
     dic.put(PdfName.BASEFONT, PdfName.HELVETICA);
     dic.put(PdfName.ENCODING, PdfName.WIN_ANSI_ENCODING);
     dic.put(PdfName.NAME, PdfName.HELV);
     dic.put(PdfName.SUBTYPE, PdfName.TYPE1);
     fonts.put(PdfName.HELV, addToBody(dic).getIndirectReference());
   }
   if (!fonts.contains(PdfName.ZADB)) {
     PdfDictionary dic = new PdfDictionary(PdfName.FONT);
     dic.put(PdfName.BASEFONT, PdfName.ZAPFDINGBATS);
     dic.put(PdfName.NAME, PdfName.ZADB);
     dic.put(PdfName.SUBTYPE, PdfName.TYPE1);
     fonts.put(PdfName.ZADB, addToBody(dic).getIndirectReference());
   }
 }
示例#3
0
 private void expandFields(PdfFormField field, ArrayList<PdfAnnotation> allAnnots) {
   allAnnots.add(field);
   ArrayList<PdfFormField> kids = field.getKids();
   if (kids != null) {
     for (PdfFormField f : kids) expandFields(f, allAnnots);
   }
 }
 void createWidgets(ArrayList<Object> list, AcroFields.Item item) {
   for (int k = 0; k < item.size(); ++k) {
     list.add(item.getPage(k));
     PdfDictionary merged = item.getMerged(k);
     PdfObject dr = merged.get(PdfName.DR);
     if (dr != null)
       PdfFormField.mergeResources(resources, (PdfDictionary) PdfReader.getPdfObject(dr));
     PdfDictionary widget = new PdfDictionary();
     for (Object element : merged.getKeys()) {
       PdfName key = (PdfName) element;
       if (widgetKeys.containsKey(key)) widget.put(key, merged.get(key));
     }
     widget.put(iTextTag, new PdfNumber(item.getTabOrder(k).intValue() + 1));
     list.add(widget);
   }
 }
示例#5
0
 public void addAnnotation(PdfAnnotation annot) {
   try {
     ArrayList allAnnots = new ArrayList();
     if (annot.isForm()) {
       PdfFormField field = (PdfFormField) annot;
       if (field.getParent() != null) return;
       expandFields(field, allAnnots);
       if (cstp.fieldTemplates == null) cstp.fieldTemplates = new HashMap();
     } else allAnnots.add(annot);
     for (int k = 0; k < allAnnots.size(); ++k) {
       annot = (PdfAnnotation) allAnnots.get(k);
       if (annot.isForm()) {
         if (!annot.isUsed()) {
           HashMap templates = annot.getTemplates();
           if (templates != null) cstp.fieldTemplates.putAll(templates);
         }
         PdfFormField field = (PdfFormField) annot;
         if (field.getParent() == null) addDocumentField(field.getIndirectReference());
       }
       if (annot.isAnnotation()) {
         PdfObject pdfobj = PdfReader.getPdfObject(pageN.get(PdfName.ANNOTS), pageN);
         PdfArray annots = null;
         if (pdfobj == null || !pdfobj.isArray()) {
           annots = new PdfArray();
           pageN.put(PdfName.ANNOTS, annots);
         } else annots = (PdfArray) pdfobj;
         annots.add(annot.getIndirectReference());
         if (!annot.isUsed()) {
           PdfRectangle rect = (PdfRectangle) annot.get(PdfName.RECT);
           if (rect != null
               && (rect.left() != 0
                   || rect.right() != 0
                   || rect.top() != 0
                   || rect.bottom() != 0)) {
             int rotation = reader.getPageRotation(pageN);
             Rectangle pageSize = reader.getPageSizeWithRotation(pageN);
             switch (rotation) {
               case 90:
                 annot.put(
                     PdfName.RECT,
                     new PdfRectangle(
                         pageSize.getTop() - rect.bottom(),
                         rect.left(),
                         pageSize.getTop() - rect.top(),
                         rect.right()));
                 break;
               case 180:
                 annot.put(
                     PdfName.RECT,
                     new PdfRectangle(
                         pageSize.getRight() - rect.left(),
                         pageSize.getTop() - rect.bottom(),
                         pageSize.getRight() - rect.right(),
                         pageSize.getTop() - rect.top()));
                 break;
               case 270:
                 annot.put(
                     PdfName.RECT,
                     new PdfRectangle(
                         rect.bottom(),
                         pageSize.getRight() - rect.left(),
                         rect.top(),
                         pageSize.getRight() - rect.right()));
                 break;
             }
           }
         }
       }
       if (!annot.isUsed()) {
         annot.setUsed();
         cstp.addToBody(annot, annot.getIndirectReference());
       }
     }
   } catch (IOException e) {
     throw new ExceptionConverter(e);
   }
 }