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); } }
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(); } } }