iTextSharp.text.pdf.PdfReader.KillXref C# (CSharp) Метод

KillXref() защищенный Метод

protected KillXref ( PdfObject obj ) : void
obj PdfObject
Результат void
        protected internal void KillXref(PdfObject obj) {
            if (obj == null)
                return;
            if ((obj is PdfIndirectReference) && !obj.IsIndirect())
                return;
            switch (obj.Type) {
                case PdfObject.INDIRECT: {
                    int xr = ((PRIndirectReference)obj).Number;
                    obj = (PdfObject)xrefObj[xr];
                    xrefObj[xr] = null;
                    freeXref = xr;
                    KillXref(obj);
                    break;
                }
                case PdfObject.ARRAY: {
                    PdfArray t = (PdfArray)obj;
                    for (int i = 0; i < t.Size; ++i)
                        KillXref(t[i]);
                    break;
                }
                case PdfObject.STREAM:
                case PdfObject.DICTIONARY: {
                    PdfDictionary dic = (PdfDictionary)obj;
                    foreach (PdfName key in dic.Keys){
                        KillXref(dic.Get(key));
                    }
                    break;
                }
            }
        }
        

Usage Example

Пример #1
0
        /**
         * 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);
        }
All Usage Examples Of iTextSharp.text.pdf.PdfReader::KillXref