internal void AddAnnotation(PdfAnnotation annot, PdfDictionary pageN) { List<PdfAnnotation> allAnnots = new List<PdfAnnotation>(); if (annot.IsForm()) { fieldsAdded = true; GetAcroFields(); PdfFormField field = (PdfFormField)annot; if (field.Parent != null) return; ExpandFields(field, allAnnots); } else allAnnots.Add(annot); for (int k = 0; k < allAnnots.Count; ++k) { annot = allAnnots[k]; if (annot.PlaceInPage > 0) pageN = reader.GetPageN(annot.PlaceInPage); if (annot.IsForm()) { if (!annot.IsUsed()) { HashSet2<PdfTemplate> templates = annot.GetTemplates(); if (templates != null) fieldTemplates.AddAll(templates); } PdfFormField field = (PdfFormField)annot; if (field.Parent == null) AddDocumentField(field.IndirectReference); } 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); MarkUsed(pageN); } else annots = (PdfArray)pdfobj; annots.Add(annot.IndirectReference); MarkUsed(annots); 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.Top - rect.Top, rect.Right, pageSize.Top - rect.Bottom, rect.Left)); break; case 180: annot.Put(PdfName.RECT, new PdfRectangle( pageSize.Right - rect.Left, pageSize.Top - rect.Bottom, pageSize.Right - rect.Right, pageSize.Top - rect.Top)); break; case 270: annot.Put(PdfName.RECT, new PdfRectangle( rect.Bottom, pageSize.Right - rect.Left, rect.Top, pageSize.Right - rect.Right)); break; } } } } if (!annot.IsUsed()) { annot.SetUsed(); AddToBody(annot, annot.IndirectReference); } } }