GetPageOrigRef() public method

public GetPageOrigRef ( int pageNum ) : PRIndirectReference
pageNum int
return PRIndirectReference
示例#1
0
        public static Hashtable GetNamedDestination(PdfReader reader, bool fromNames)
        {
            IntHashtable pages    = new IntHashtable();
            int          numPages = reader.NumberOfPages;

            for (int k = 1; k <= numPages; ++k)
            {
                pages[reader.GetPageOrigRef(k).Number] = k;
            }
            Hashtable names = fromNames ? reader.GetNamedDestinationFromNames() : reader.GetNamedDestinationFromStrings();

            String[] keys = new String[names.Count];
            names.Keys.CopyTo(keys, 0);
            foreach (String name in keys)
            {
                PdfArray      arr = (PdfArray)names[name];
                StringBuilder s   = new StringBuilder();
                try {
                    s.Append(pages[(arr.GetAsIndirectObject(0)).Number]);
                    s.Append(' ').Append(arr[1].ToString().Substring(1));
                    for (int k = 2; k < arr.Size; ++k)
                    {
                        s.Append(' ').Append(arr[k].ToString());
                    }
                    names[name] = s.ToString();
                }
                catch {
                    names.Remove(name);
                }
            }
            return(names);
        }
示例#2
0
 protected void CloseIt()
 {
     for (int k = 0; k < Readers.Count; ++k)
     {
         ((PdfReader)Readers[k]).RemoveFields();
     }
     for (int r = 0; r < Readers.Count; ++r)
     {
         PdfReader reader = (PdfReader)Readers[r];
         for (int page = 1; page <= reader.NumberOfPages; ++page)
         {
             PageRefs.Add(GetNewReference(reader.GetPageOrigRef(page)));
             PageDics.Add(reader.GetPageN(page));
         }
     }
     MergeFields();
     CreateAcroForms();
     for (int r = 0; r < Readers.Count; ++r)
     {
         PdfReader reader = (PdfReader)Readers[r];
         for (int page = 1; page <= reader.NumberOfPages; ++page)
         {
             PdfDictionary        dic     = reader.GetPageN(page);
             PdfIndirectReference pageRef = GetNewReference(reader.GetPageOrigRef(page));
             PdfIndirectReference parent  = Root.AddPageRef(pageRef);
             dic.Put(PdfName.Parent, parent);
             Propagate(dic, pageRef, false);
         }
     }
     foreach (DictionaryEntry entry in Readers2Intrefs)
     {
         PdfReader reader = (PdfReader)entry.Key;
         try
         {
             File = reader.SafeFile;
             File.ReOpen();
             IntHashtable t    = (IntHashtable)entry.Value;
             int[]        keys = t.ToOrderedKeys();
             for (int k = 0; k < keys.Length; ++k)
             {
                 PrIndirectReference refi = new PrIndirectReference(reader, keys[k]);
                 AddToBody(PdfReader.GetPdfObjectRelease(refi), t[keys[k]]);
             }
         }
         finally
         {
             try
             {
                 File.Close();
                 reader.Close();
             }
             catch
             {
                 // empty on purpose
             }
         }
     }
     Pdf.Close();
 }
示例#3
0
 virtual protected void CloseIt()
 {
     for (int k = 0; k < readers.Count; ++k)
     {
         readers[k].RemoveFields();
     }
     for (int r = 0; r < readers.Count; ++r)
     {
         PdfReader reader = readers[r];
         for (int page = 1; page <= reader.NumberOfPages; ++page)
         {
             pageRefs.Add(GetNewReference(reader.GetPageOrigRef(page)));
             pageDics.Add(reader.GetPageN(page));
         }
     }
     MergeFields();
     CreateAcroForms();
     for (int r = 0; r < readers.Count; ++r)
     {
         PdfReader reader = readers[r];
         for (int page = 1; page <= reader.NumberOfPages; ++page)
         {
             PdfDictionary        dic     = reader.GetPageN(page);
             PdfIndirectReference pageRef = GetNewReference(reader.GetPageOrigRef(page));
             PdfIndirectReference parent  = root.AddPageRef(pageRef);
             dic.Put(PdfName.PARENT, parent);
             Propagate(dic, pageRef, false);
         }
     }
     foreach (KeyValuePair <PdfReader, IntHashtable> entry in readers2intrefs)
     {
         PdfReader reader = entry.Key;
         try {
             file = reader.SafeFile;
             file.ReOpen();
             IntHashtable t    = entry.Value;
             int[]        keys = t.ToOrderedKeys();
             for (int k = 0; k < keys.Length; ++k)
             {
                 PRIndirectReference refi = new PRIndirectReference(reader, keys[k]);
                 AddToBody(PdfReader.GetPdfObjectRelease(refi), t[keys[k]]);
             }
         }
         finally {
             try {
                 file.Close();
                 // TODO: Removed - the user should be responsible for closing all PdfReaders.  But, this could cause a lot of memory leaks in code out there that hasn't been properly closing things - maybe add a finalizer to PdfReader that calls PdfReader#close() ??
                 //reader.Close();
             }
             catch  {
                 // empty on purpose
             }
         }
     }
     pdf.Close();
 }
示例#4
0
        /**
         * Gets a <CODE>List</CODE> with the bookmarks. It returns <CODE>null</CODE> if
         * the document doesn't have any bookmarks.
         * @param reader the document
         * @return a <CODE>List</CODE> with the bookmarks or <CODE>null</CODE> if the
         * document doesn't have any
         */
        public static ArrayList GetBookmark(PdfReader reader)
        {
            PdfDictionary catalog = reader.Catalog;
            PdfObject     obj     = PdfReader.GetPdfObjectRelease(catalog.Get(PdfName.OUTLINES));

            if (obj == null || !obj.IsDictionary())
            {
                return(null);
            }
            PdfDictionary outlines = (PdfDictionary)obj;
            IntHashtable  pages    = new IntHashtable();
            int           numPages = reader.NumberOfPages;

            for (int k = 1; k <= numPages; ++k)
            {
                pages[reader.GetPageOrigRef(k).Number] = k;
                reader.ReleasePage(k);
            }
            return(BookmarkDepth(reader, (PdfDictionary)PdfReader.GetPdfObjectRelease(outlines.Get(PdfName.FIRST)), pages));
        }
示例#5
0
        /// <summary>
        /// Gets a  List  with the bookmarks. It returns  null  if
        /// the document doesn't have any bookmarks.
        /// document doesn't have any
        /// </summary>
        /// <param name="reader">the document</param>
        /// <returns>a  List  with the bookmarks or  null  if the</returns>
        public static ArrayList GetBookmark(PdfReader reader)
        {
            var catalog = reader.Catalog;
            var obj     = PdfReader.GetPdfObjectRelease(catalog.Get(PdfName.Outlines));

            if (obj == null || !obj.IsDictionary())
            {
                return(null);
            }

            var outlines = (PdfDictionary)obj;
            var pages    = new IntHashtable();
            var numPages = reader.NumberOfPages;

            for (var k = 1; k <= numPages; ++k)
            {
                pages[reader.GetPageOrigRef(k).Number] = k;
                reader.ReleasePage(k);
            }
            return(bookmarkDepth(reader, (PdfDictionary)PdfReader.GetPdfObjectRelease(outlines.Get(PdfName.First)), pages));
        }
        /**
         * Gets a <CODE>List</CODE> with the bookmarks that are children of <CODE>outline</CODE>. It returns <CODE>null</CODE> if
         * the document doesn't have any bookmarks.
         * @param reader the document
         * @param outline the outline dictionary to get bookmarks from
         * @param includeRoot indicates if to include <CODE>outline</CODE> parameter itself into returned list of bookmarks
         * @return a <CODE>List</CODE> with the bookmarks or <CODE>null</CODE> if the
         * document doesn't have any
         */
        public static IList <Dictionary <String, Object> > GetBookmark(PdfReader reader, PdfDictionary outline, bool includeRoot)
        {
            if (outline == null)
            {
                return(null);
            }
            IntHashtable pages    = new IntHashtable();
            int          numPages = reader.NumberOfPages;

            for (int k = 1; k <= numPages; ++k)
            {
                pages[reader.GetPageOrigRef(k).Number] = k;
                reader.ReleasePage(k);
            }
            if (includeRoot)
            {
                return(BookmarkDepth(reader, outline, pages, true));
            }
            else
            {
                return(BookmarkDepth(reader, (PdfDictionary)PdfReader.GetPdfObjectRelease(outline.Get(PdfName.FIRST)), pages, false));
            }
        }
示例#7
0
            virtual public int GetDestinationPage()
            {
                if (!IsInternal())
                {
                    return(0);
                }

                // here destination is something like
                // [132 0 R, /XYZ, 29.3898, 731.864502, null]
                PdfIndirectReference refi = destination.GetAsIndirectObject(0);

                PRIndirectReference pr = (PRIndirectReference)refi;
                PdfReader           r  = pr.Reader;

                for (int i = 1; i <= r.NumberOfPages; i++)
                {
                    PRIndirectReference pp = r.GetPageOrigRef(i);
                    if (pp.Generation == pr.Generation && pp.Number == pr.Number)
                    {
                        return(i);
                    }
                }
                throw new ArgumentException(MessageLocalization.GetComposedMessage("page.not.found"));
            }
示例#8
0
 public static Hashtable GetNamedDestination(PdfReader reader, bool fromNames) {
     IntHashtable pages = new IntHashtable();
     int numPages = reader.NumberOfPages;
     for (int k = 1; k <= numPages; ++k)
         pages[reader.GetPageOrigRef(k).Number] = k;
     Hashtable names = fromNames ? reader.GetNamedDestinationFromNames() : reader.GetNamedDestinationFromStrings();
     String[] keys = new String[names.Count];
     names.Keys.CopyTo(keys, 0);
     foreach (String name in keys) {
         PdfArray arr = (PdfArray)names[name];
         StringBuilder s = new StringBuilder();
         try {
             s.Append(pages[(arr.GetAsIndirectObject(0)).Number]);
             s.Append(' ').Append(arr[1].ToString().Substring(1));
             for (int k = 2; k < arr.Size; ++k)
                 s.Append(' ').Append(arr[k].ToString());
             names[name] = s.ToString();
         }
         catch {
             names.Remove(name);
         }
     }
     return names;
 }
示例#9
0
            public int GetDestinationPage()
            {
                if (!IsInternal())
                {
                    return(0);
                }

                // here destination is something like
                // [132 0 R, /XYZ, 29.3898, 731.864502, null]
                PdfIndirectReference refi = _destination.GetAsIndirectObject(0);

                PrIndirectReference pr = (PrIndirectReference)refi;
                PdfReader           r  = pr.Reader;

                for (int i = 1; i <= r.NumberOfPages; i++)
                {
                    PrIndirectReference pp = r.GetPageOrigRef(i);
                    if (pp.Generation == pr.Generation && pp.Number == pr.Number)
                    {
                        return(i);
                    }
                }
                throw new ArgumentException("Page not found.");
            }
示例#10
0
 /**
 * Gets a <CODE>List</CODE> with the bookmarks that are children of <CODE>outline</CODE>. It returns <CODE>null</CODE> if
 * the document doesn't have any bookmarks.
 * @param reader the document
 * @param outline the outline dictionary to get bookmarks from
 * @param includeRoot indicates if to include <CODE>outline</CODE> parameter itself into returned list of bookmarks
 * @return a <CODE>List</CODE> with the bookmarks or <CODE>null</CODE> if the
 * document doesn't have any
 */
 public static IList<Dictionary<String, Object>> GetBookmark(PdfReader reader, PdfDictionary outline, bool includeRoot) {
     if (outline == null)
         return null;
     IntHashtable pages = new IntHashtable();
     int numPages = reader.NumberOfPages;
     for (int k = 1; k <= numPages; ++k) {
         pages[reader.GetPageOrigRef(k).Number] = k;
         reader.ReleasePage(k);
     }
     if (includeRoot)
         return BookmarkDepth(reader, outline, pages, true);
     else
         return BookmarkDepth(reader, (PdfDictionary)PdfReader.GetPdfObjectRelease(outline.Get(PdfName.FIRST)), pages, false);
 }
示例#11
0
 /**
 * Gets a <CODE>List</CODE> with the bookmarks. It returns <CODE>null</CODE> if
 * the document doesn't have any bookmarks.
 * @param reader the document
 * @return a <CODE>List</CODE> with the bookmarks or <CODE>null</CODE> if the
 * document doesn't have any
 */    
 public static IList<Dictionary<String, Object>> GetBookmark(PdfReader reader) {
     PdfDictionary catalog = reader.Catalog;
     PdfObject obj = PdfReader.GetPdfObjectRelease(catalog.Get(PdfName.OUTLINES));
     if (obj == null || !obj.IsDictionary())
         return null;
     PdfDictionary outlines = (PdfDictionary)obj;
     IntHashtable pages = new IntHashtable();
     int numPages = reader.NumberOfPages;
     for (int k = 1; k <= numPages; ++k) {
         pages[reader.GetPageOrigRef(k).Number] = k;
         reader.ReleasePage(k);
     }
     return BookmarkDepth(reader, (PdfDictionary)PdfReader.GetPdfObjectRelease(outlines.Get(PdfName.FIRST)), pages);
 }