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

SelectPages() приватный Метод

private SelectPages ( ArrayList pagesToKeep ) : void
pagesToKeep System.Collections.ArrayList
Результат void
            internal void SelectPages(ArrayList pagesToKeep) {
                IntHashtable pg = new IntHashtable();
                ArrayList finalPages = new ArrayList();
                int psize = Size;
                foreach (int p in pagesToKeep) {
                    if (p >= 1 && p <= psize && !pg.ContainsKey(p)) {
                        pg[p] = 1;
                        finalPages.Add(p);
                    }
                }
                if (reader.partial) {
                    for (int k = 1; k <= psize; ++k) {
                        GetPageOrigRef(k);
                        ResetReleasePage();
                    }
                }
                PRIndirectReference parent = (PRIndirectReference)reader.catalog.Get(PdfName.PAGES);
                PdfDictionary topPages = (PdfDictionary)PdfReader.GetPdfObject(parent);
                ArrayList newPageRefs = new ArrayList(finalPages.Count);
                PdfArray kids = new PdfArray();
                foreach (int p in finalPages) {
                    PRIndirectReference pref = GetPageOrigRef(p);
                    ResetReleasePage();
                    kids.Add(pref);
                    newPageRefs.Add(pref);
                    GetPageN(p).Put(PdfName.PARENT, parent);
                }
                AcroFields af = reader.AcroFields;
                bool removeFields = (af.Fields.Count > 0);
                for (int k = 1; k <= psize; ++k) {
                    if (!pg.ContainsKey(k)) {
                        if (removeFields)
                            af.RemoveFieldsFromPage(k);
                        PRIndirectReference pref = GetPageOrigRef(k);
                        int nref = pref.Number;
                        reader.xrefObj[nref] = null;
                        if (reader.partial) {
                            reader.xref[nref * 2] = -1;
                            reader.xref[nref * 2 + 1] = 0;
                        }
                    }
                }
                topPages.Put(PdfName.COUNT, new PdfNumber(finalPages.Count));
                topPages.Put(PdfName.KIDS, kids);
                refsp = null;
                refsn = newPageRefs;
            }
        }