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); }
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(); }
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(); }
/** * 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)); }
/// <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)); } }
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")); }
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; }
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."); }
/** * 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); }
/** * 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); }