using System; using System.IO; using pdftron; using pdftron.PDF; using pdftron.SDF; namespace PDFNetFailed { class Program { static void ProcessElements(ElementReader reader) { Element element; while ((element = reader.Next()) != null){ switch (element.GetType()) { case Element.Type.e_text_begin: { ProcessText(reader); break; } case Element.Type.e_form: { reader.FormBegin(); ProcessElements(reader); reader.End(); break; } } } } static void ProcessText(ElementReader page_reader) { Element element; while ((element = page_reader.Next()) != null) { switch (element.GetType()) { case Element.Type.e_text_end: return; case Element.Type.e_text: { GState gs = element.GetGState(); Font font = gs.GetFont(); if (font.GetType() == Font.Type.e_Type3) { for (CharIterator itr = element.GetCharIterator(); itr.HasNext(); itr.Next()) { CharData charData = itr.Current(); Obj type3GlyphStream = font.GetType3GlyphStream(charData.char_code); if (type3GlyphStream != null) { using (var reader = new ElementReader()) { reader.Begin(type3GlyphStream); Element el; while ((el = reader.Next()) != null) { // fails while iterating } reader.End(); } } page_reader.Type3FontBegin(itr.Current()); ProcessElements(page_reader); page_reader.End(); } } break; } } } } static void Main(string[] args) { try { PDFNet.Initialize(); using (var doc = new PDFDoc("input.pdf")) { doc.InitSecurityHandler(); int pageCount = doc.GetPageCount(); for (int i = 1; i <= pageCount; i++) { Page page = doc.GetPage(i); using (var elementReader = new ElementReader()) { elementReader.Begin(page); ProcessElements(elementReader); elementReader.End(); } } } } catch(Exception ex) { Console.WriteLine(ex); } finally { Console.WriteLine("Completed"); Console.ReadKey(); } } } }