protected void FlatFreeTextFields()
{
if (append)
throw new ArgumentException(MessageLocalization.GetComposedMessage("freetext.flattening.is.not.supported.in.append.mode"));
for (int page = 1; page <= reader.NumberOfPages; ++page) {
PdfDictionary pageDic = reader.GetPageN(page);
PdfArray annots = pageDic.GetAsArray(PdfName.ANNOTS);
if (annots == null)
continue;
for (int idx = 0; idx < annots.Size; ++idx) {
PdfObject annoto = annots.GetDirectObject(idx);
if ((annoto is PdfIndirectReference) && !annoto.IsIndirect())
continue;
PdfDictionary annDic = (PdfDictionary)annoto;
if (!((PdfName)annDic.Get(PdfName.SUBTYPE)).Equals(PdfName.FREETEXT))
continue;
PdfNumber ff = annDic.GetAsNumber(PdfName.F);
int flags = (ff != null) ? ff.IntValue : 0;
if ( (flags & PdfFormField.FLAGS_PRINT) != 0 && (flags & PdfFormField.FLAGS_HIDDEN) == 0) {
PdfObject obj1 = annDic.Get(PdfName.AP);
if (obj1 == null)
continue;
PdfDictionary appDic = (obj1 is PdfIndirectReference) ?
(PdfDictionary) PdfReader.GetPdfObject(obj1) : (PdfDictionary) obj1;
PdfObject obj = appDic.Get(PdfName.N);
PdfAppearance app = null;
if (obj != null) {
PdfObject objReal = PdfReader.GetPdfObject(obj);
if (obj is PdfIndirectReference && !obj.IsIndirect())
app = new PdfAppearance((PdfIndirectReference)obj);
else if (objReal is PdfStream) {
((PdfDictionary)objReal).Put(PdfName.SUBTYPE, PdfName.FORM);
app = new PdfAppearance((PdfIndirectReference)obj);
}
else {
if (objReal.IsDictionary()) {
PdfName as_p = appDic.GetAsName(PdfName.AS);
if (as_p != null) {
PdfIndirectReference iref = (PdfIndirectReference)((PdfDictionary)objReal).Get(as_p);
if (iref != null) {
app = new PdfAppearance(iref);
if (iref.IsIndirect()) {
objReal = PdfReader.GetPdfObject(iref);
((PdfDictionary)objReal).Put(PdfName.SUBTYPE, PdfName.FORM);
}
}
}
}
}
}
if (app != null) {
Rectangle box = PdfReader.GetNormalizedRectangle(annDic.GetAsArray(PdfName.RECT));
PdfContentByte cb = this.GetOverContent(page);
cb.SetLiteral("Q ");
cb.AddTemplate(app, box.Left, box.Bottom);
cb.SetLiteral("q ");
}
}
}
for (int idx = 0; idx < annots.Size; ++idx) {
PdfDictionary annot = annots.GetAsDict(idx);
if (annot != null) {
if (PdfName.FREETEXT.Equals(annot.Get(PdfName.SUBTYPE))) {
annots.Remove(idx);
--idx;
}
}
}
if (annots.IsEmpty()) {
PdfReader.KillIndirect(pageDic.Get(PdfName.ANNOTS));
pageDic.Remove(PdfName.ANNOTS);
}
}
}