コード例 #1
0
    private bool ReplaceImage(PDFField field, PdfStamper stamp)
    {
        //ac.debugText("\nreplacin the image:" + field.getValue());
        ArrayList fields = this.FindFieldLocs(field.Name);

        if (fields.Count > 0)
        {
            //ac.debugText("\n\nfields:" + fields.size());
            try
            {
                //File fImg = new File(field.Value);
                PdfContentByte cb = null;
                for (int x = 0; x <= fields.Count - 1; x++)
                {
                    // = stamp.GetOverContent(1);
                    PDFFieldLocation fieldLoc = (PDFFieldLocation)fields[x];
                    //ac.debugText("\n\n(" + fieldLoc.x1 + "," + fieldLoc.y1 + ") \n\t\tWidth:" + (fieldLoc.x2 - fieldLoc.x1) + "\n\t\tHeight:" + (fieldLoc.y2 - fieldLoc.y1));
                    cb = stamp.GetOverContent(fieldLoc.page);
                    Image img = Image.GetInstance(field.ImageValue);
                    // (fImg.toURL());
                    img.SetAbsolutePosition(fieldLoc.x1, fieldLoc.y1);
                    img.ScaleAbsolute((fieldLoc.x2 - fieldLoc.x1), (fieldLoc.y2 - fieldLoc.y1));

                    cb.AddImage(img);
                }

                return(true);
            }
            // e.printStackTrace();
            catch (Exception e)
            {
                throw new Exception("Critical Exception thrown within ReplaceImage", e);
            }
            return(false);
        }
        else
        {
            return(false);
        }
    }
コード例 #2
0
    private void GetFormFields(Stream source)
    {
        PdfReader reader = null;

        try {
            reader = new PdfReader(source);
            PRAcroForm form = reader.AcroForm;
            if (form == null)
            {
                //ac.debugText("This document has no fields.");
                return;
            }
            //PdfLister list = new PdfLister(System.out);
            Hashtable refToField = new Hashtable();
            ArrayList fields     = form.Fields;
            foreach (PRAcroForm.FieldInformation field in fields)
            {
                refToField.Add(field.Ref.Number, field);
            }
            for (int page = 1; page <= reader.NumberOfPages; page++)
            {
                PdfDictionary dPage  = reader.GetPageN(page);
                PdfArray      annots = (PdfArray)PdfReader.GetPdfObject((PdfObject)dPage.Get(PdfName.ANNOTS));
                if (annots == null)
                {
                    break;
                }

                ArrayList           ali  = annots.ArrayList;
                PRIndirectReference iRef = null;
                foreach (PdfObject refObj in ali)
                {
                    PdfDictionary an   = (PdfDictionary)PdfReader.GetPdfObject(refObj);
                    PdfName       name = (PdfName)an.Get(PdfName.SUBTYPE);
                    if (name == null || !name.Equals(PdfName.WIDGET))
                    {
                        break;
                    }


                    PdfArray rect = (PdfArray)PdfReader.GetPdfObject(an.Get(PdfName.RECT));

                    string fName = "";

                    PRAcroForm.FieldInformation field = null;

                    while ((an != null))
                    {
                        PdfString tName = (PdfString)an.Get(PdfName.T);
                        if ((tName != null))
                        {
                            fName = tName.ToString() + "." + fName;
                        }
                        if (refObj.IsIndirect() && field == null)
                        {
                            iRef  = (PRIndirectReference)refObj;
                            field = (PRAcroForm.FieldInformation)refToField[iRef.Number];
                        }
                        //refObj = (PdfObject)an.Get(PdfName.PARENT);
                        an = (PdfDictionary)PdfReader.GetPdfObject((PdfObject)an.Get(PdfName.PARENT));
                    }
                    if (fName.EndsWith("."))
                    {
                        fName = fName.Substring(0, fName.Length - 1);
                    }

                    PDFFieldLocation tempLoc = new PDFFieldLocation();
                    ArrayList        arr     = rect.ArrayList;

                    tempLoc.fieldName = fName;
                    tempLoc.page      = page;
                    tempLoc.x1        = ((PdfNumber)PdfReader.GetPdfObject((PdfObject)arr[0])).FloatValue;
                    tempLoc.y1        = ((PdfNumber)PdfReader.GetPdfObject((PdfObject)arr[1])).FloatValue;
                    tempLoc.x2        = ((PdfNumber)PdfReader.GetPdfObject((PdfObject)arr[2])).FloatValue;
                    tempLoc.y2        = ((PdfNumber)PdfReader.GetPdfObject((PdfObject)arr[3])).FloatValue;

                    this.PFDlocs.Add(tempLoc);
                }
            }
        }
        catch (Exception e) {
            throw new Exception("Critical Exception in GetFormFields", e);
        }
        finally {
            if ((reader != null))
            {
                reader.Close();
            }
        }
    }