/** * Sets the XFA key from a byte array. The old XFA is erased. * @param form the data * @param reader the reader * @param writer the writer * @throws java.io.IOException on error */ public static void SetXfa(XfaForm form, PdfReader reader, PdfWriter writer) { PdfDictionary af = (PdfDictionary)PdfReader.GetPdfObjectRelease(reader.Catalog.Get(PdfName.ACROFORM)); if (af == null) { return; } PdfObject xfa = GetXfaObject(reader); if (xfa.IsArray()) { PdfArray ar = (PdfArray)xfa; int t = -1; int d = -1; for (int k = 0; k < ar.Size; k += 2) { PdfString s = ar.GetAsString(k); if ("template".Equals(s.ToString())) { t = k + 1; } if ("datasets".Equals(s.ToString())) { d = k + 1; } } if (t > -1 && d > -1) { reader.KillXref(ar.GetAsIndirectObject(t)); reader.KillXref(ar.GetAsIndirectObject(d)); PdfStream tStream = new PdfStream(SerializeDoc(form.templateNode)); tStream.FlateCompress(writer.CompressionLevel); ar[t] = writer.AddToBody(tStream).IndirectReference; PdfStream dStream = new PdfStream(SerializeDoc(form.datasetsNode)); dStream.FlateCompress(writer.CompressionLevel); ar[d] = writer.AddToBody(dStream).IndirectReference; af.Put(PdfName.XFA, new PdfArray(ar)); return; } } reader.KillXref(af.Get(PdfName.XFA)); PdfStream str = new PdfStream(SerializeDoc(form.domDocument)); str.FlateCompress(writer.CompressionLevel); PdfIndirectReference refe = writer.AddToBody(str).IndirectReference; af.Put(PdfName.XFA, refe); }
internal AcroFields(PdfReader reader, PdfWriter writer) { this.reader = reader; this.writer = writer; xfa = new XfaForm(reader); if (writer is PdfStamperImp) { append = ((PdfStamperImp)writer).append; } Fill(); }