Example #1
0
        public static void Test_PdfExportDeflatedStream_01(string pdfFile, int idObject, string streamFile)
        {
            _tr.WriteLine("export stream object {0} of pdf file \"{1}\" to \"{2}\"", idObject, pdfFile, streamFile);
            PB_Pdf.PdfReader pr = null;
            Writer           w  = null;

            try
            {
                pr = new PB_Pdf.PdfReader(pdfFile);
                IPdfObject obj = ReadPdfObject(pr, idObject, "Object");
                w = new Writer(streamFile, FileMode.Create);
                if (obj.deflatedStream != null)
                {
                    w.Write(obj.deflatedStream);
                }
            }
            finally
            {
                if (pr != null)
                {
                    pr.Close();
                }
                if (w != null)
                {
                    w.Close();
                }
            }
        }
Example #2
0
 public static void Test_GetPdfText_01(String file)
 {
     _tr.WriteLine("read pdf file    \"{0}\"", file);
     PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(file);
     try
     {
         IPdfObject obj = ReadPdfObject(pr, 1138, "Object");
     }
     finally
     {
         pr.Close();
     }
 }
Example #3
0
        public static IPdfObject ReadPdfObject(PB_Pdf.PdfReader pr, int id, string name)
        {
            _tr.WriteLine();
            //int id = ((PdfValueObject)(pr.Trailer.values["Root"].value)).id;
            _tr.WriteLine("read {0} object {1}", name, id);
            IPdfObject o = pr.ReadObject(id);

            _tr.WriteLine("{0} object {1}", name, id);
            PrintPdfObject(o);
            if (o.source != null && logSource)
            {
                _tr.WriteLine("Source {0} object {1}", name, id);
                _tr.WriteLine(o.source);
            }
            return(o);
        }
Example #4
0
        public static void Test_PdfExportDeflatedStream_02(String pdfFile, int objectId, string streamFile)
        {
            Writer w = null;

            _tr.WriteLine("export stream object {0} pdf file \"{1}\" to \"{2}\"", objectId, pdfFile, streamFile);
            PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(pdfFile);
            try
            {
                IPdfObject obj = ReadPdfObject(pr, objectId, "Object");
                if (obj.deflatedStream == null)
                {
                    _tr.WriteLine("no stream");
                    return;
                }
                _tr.WriteLine("read data");
                //IPdfInstruction[] instructions = PdfDataReader.PdfReadAll(obj.deflatedStream);
                PdfDataReader pdr = new PdfDataReader(obj.deflatedStream);
                //pdr.Trace += new TraceDelegate(_tr.WriteLine);
                IPdfInstruction[] instructions = pdr.ReadAll();
                _tr.WriteLine("{0} instructions", instructions.Length);
                //var q = from instruction in instructions select instruction.opeString;
                //foreach (string opeString in q.Distinct().OrderBy(opeString => opeString))
                //{
                //    _tr.WriteLine(opeString);
                //}
                w = new Writer(streamFile, FileMode.Create);
                foreach (IPdfInstruction instruction in instructions)
                {
                    //_tr.WriteLine(instruction);
                    //w.WriteLine(instruction.ToString());
                    instruction.Export(w);
                }
            }
            finally
            {
                if (w != null)
                {
                    w.Close();
                }
                pr.Close();
            }
        }
Example #5
0
        public static void Test_GetPdfText_08(String file)
        {
            PB_Pdf.PdfWriter pw = null;
            string file2 = zpath.PathSetFileName(file, Path.GetFileNameWithoutExtension(file) + "_new");
            _tr.WriteLine("read pdf file    \"{0}\"", file);
            _tr.WriteLine("save pdf to file \"{0}\"", file2);
            PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(file);
            pr.Trace += new TraceDelegate(_tr.WriteLine);
            try
            {
                pw = new PB_Pdf.PdfWriter(file2, FileMode.Create);
                pw.reader = pr;

                IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].value.valueObjectId, "Info");
                pw.WriteObject(info, "Info");

                IPdfObject root = ReadPdfObject(pr, pr.Trailer["Root"].value.valueObjectId, "Root");
                pw.WriteObject(root, "Root");

                IPdfObject pages = ReadPdfObject(pr, root.value["Pages"].value.valueObjectId, "Pages");
                pages.value["Kids"].value.arrayValues = new IPdfValue[] { pages.value["Kids"].value.arrayValues[0] };
                pages.value["Count"].value.valueInt = 1;
                pw.WriteObject(pages);

                IPdfObject page1 = ReadPdfObject(pr, pages.value["Kids"].value[0].valueObjectId, "Page 1");
                pw.WriteObject(page1);

                IPdfObject page1Content = ReadPdfObject(pr, page1.value["Contents"].value.valueObjectId, "Contents page 1");
                page1Content.value.objectValues.Remove("Filter");
                page1Content.stream = page1Content.deflatedStream;
                page1Content.value.objectValues["Length"].value.valueInt = page1Content.stream.Length;
                pw.WriteObject(page1Content);

                IPdfObject page1Ressource = ReadPdfObject(pr, page1.value["Resources"].value.valueObjectId, "Resources page 1");
                Dictionary<string, PdfNValue>  objectValues = new Dictionary<string, PdfNValue>();
                objectValues["TPL1"] = page1Ressource.value["XObject"].value["TPL1"];
                page1Ressource.value["XObject"].value.objectValues = objectValues;
                pw.WriteObject(page1Ressource);

                IPdfObject page1Ressource_01 = ReadPdfObject(pr, page1Ressource.value["XObject"].value["TPL1"].value.valueObjectId, "Resources page 1 /TPL1");
                page1Ressource_01.value.objectValues.Remove("Filter");
                page1Ressource_01.stream = page1Ressource_01.deflatedStream;
                page1Ressource_01.value.objectValues["Length"].value.valueInt = page1Ressource_01.stream.Length;
                pw.WriteObjectWithChilds(page1Ressource_01);

                //IPdfObject page1Ressource_ProcSet = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ProcSet"].value.valueObjectId, "Resources page 1 /TPL1 ProcSet");

                //IPdfObject page1Ressource_Font_01 = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["Font"].value["F23"].value.valueObjectId, "Resources page 1 /TPL1 Font F23");
                //IPdfObject page1Ressource_Font_01_Widths = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Widths");
                //IPdfObject page1Ressource_Font_01_Encoding = ReadPdfObject(pr, page1Ressource_Font_01.value["Encoding"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Encoding");
                //IPdfObject page1Ressource_Font_01_FontDescriptor = ReadPdfObject(pr, page1Ressource_Font_01.value["FontDescriptor"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor");
                //IPdfObject page1Ressource_Font_01_FontDescriptor_FontFile3 = ReadPdfObject(pr, page1Ressource_Font_01_FontDescriptor.value["FontFile3"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor FontFile3");
                //IPdfObject page1Ressource_Font_01_ToUnicode = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 ToUnicode");

                //IPdfObject page1Ressource_Img_01 = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["XObject"].value["img8"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8");
                //IPdfObject page1Ressource_Img_01_Length = ReadPdfObject(pr, page1Ressource_Img_01.value["Length"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8 Length");

                //IPdfObject page1Ressource_OPMON = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ExtGState"].value["OPMON"].value.valueObjectId, "Resources page 1 /TPL1 ExtGState OPMON");

            }
            finally
            {
                pr.Close();
                if (pw != null) pw.Close();
            }
        }
Example #6
0
        //public static void Test_GetPdfText_01()
        //{
        //    string file = @"c:\pib\media\print\Le monde\_quotidien\Le monde - 2012-12\Le monde - 2012-12-06 - no 21113.pdf";
        //    _tr.WriteLine("read pdf file \"{0}\"", file);
        //    string s = Test_GetPdfText_01(file);
        //    _tr.WriteLine(s);
        //    //PdfTextExtractor.GetTextFromPage();
        //    //ITextExtractionStrategy
        //    // iTextSharp.text.pdf.parser.LocationTextExtractionStrategy
        //}

        public static void Test_GetPdfText_07(String file)
        {
            _tr.WriteLine("read pdf file \"{0}\"", file);
            PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(file);
            pr.KeepObjectSource = true;
            try
            {
                //_tr.WriteLine();
                //_tr.WriteLine("read xref position");
                //pr.ReadXrefPosition();
                //_tr.WriteLine("xref table position : {0}", pr.XrefPosition.zToHex());

                //_tr.WriteLine();
                //_tr.WriteLine("read xref headers");
                //pr.ReadXrefHeaders();
                //_tr.WriteLine("trailer position : {0}", pr.TrailerPosition.zToHex());
                //_tr.WriteLine("objects number   : {0}", pr.ObjectsNumber);
                //foreach (PdfXrefHeader header in pr.XrefHeaders)
                //{
                //    _tr.WriteLine("xref header      : pos {0} id {1} nb {2}", header.filePosition.zToHex(), header.objectId, header.objectNb);
                //}

                //_tr.WriteLine();
                //_tr.WriteLine("read trailer");
                //pr.ReadTrailer();
                _tr.WriteLine("trailer");
                //PrintPdfObject(pr.Trailer);
                PrintPdfTrailer(pr.Trailer);
                //if (pr.Trailer.source != null)
                //{
                //    _tr.WriteLine("Source trailer");
                //    _tr.WriteLine(pr.Trailer.source);
                //}

                //_tr.WriteLine();
                //_tr.WriteLine("read xref");
                //pr.ReadXref();
                //int i = 0;
                //foreach (PdfXref xref in pr.Xref.Values)
                //{
                //    _tr.WriteLine("xref             : id {0,5} pos {1} generation {2}", xref.objectId, xref.filePosition.zToHex(), xref.generationNumber);
                //    if (++i == 10) break;
                //}

                //IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].valueObjectId, "Info");
                IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].value.valueObjectId, "Info");
                IPdfObject root = ReadPdfObject(pr, pr.Trailer["Root"].value.valueObjectId, "Root");
                IPdfObject pages = ReadPdfObject(pr, root.value["Pages"].value.valueObjectId, "Pages");
                IPdfObject page1 = ReadPdfObject(pr, pages.value["Kids"].value[0].valueObjectId, "Page 1");
                IPdfObject page1Content = ReadPdfObject(pr, page1.value["Contents"].value.valueObjectId, "Contents page 1");
                IPdfObject page1Ressource = ReadPdfObject(pr, page1.value["Resources"].value.valueObjectId, "Resources page 1");
                //IPdfObject page1Ressource_01 = ReadPdfObject(pr, 59, "Contents page 1 (2)");
                IPdfObject page1Ressource_01 = ReadPdfObject(pr, page1Ressource.value["XObject"].value["TPL1"].value.valueObjectId, "Resources page 1 /TPL1");
                IPdfObject page1Ressource_ProcSet = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ProcSet"].value.valueObjectId, "Resources page 1 /TPL1 ProcSet");

                IPdfObject page1Ressource_Font_01 = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["Font"].value["F23"].value.valueObjectId, "Resources page 1 /TPL1 Font F23");
                IPdfObject page1Ressource_Font_01_Widths = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Widths");
                IPdfObject page1Ressource_Font_01_Encoding = ReadPdfObject(pr, page1Ressource_Font_01.value["Encoding"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Encoding");
                IPdfObject page1Ressource_Font_01_FontDescriptor = ReadPdfObject(pr, page1Ressource_Font_01.value["FontDescriptor"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor");
                IPdfObject page1Ressource_Font_01_FontDescriptor_FontFile3 = ReadPdfObject(pr, page1Ressource_Font_01_FontDescriptor.value["FontFile3"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor FontFile3");
                IPdfObject page1Ressource_Font_01_ToUnicode = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 ToUnicode");

                IPdfObject page1Ressource_Img_01 = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["XObject"].value["img8"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8");
                IPdfObject page1Ressource_Img_01_Length = ReadPdfObject(pr, page1Ressource_Img_01.value["Length"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8 Length");

                IPdfObject page1Ressource_OPMON = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ExtGState"].value["OPMON"].value.valueObjectId, "Resources page 1 /TPL1 ExtGState OPMON");
                //_tr.WriteLine("stream as string :");
                //_tr.WriteLine(page1Ressource_01.deflatedStream.zzToString());
                //_tr.WriteLine();
                //IPdfObject obj = ReadPdfObject(pr, 1043, "Object 1043");
            }
            finally
            {
                pr.Close();
            }
        }
Example #7
0
        public static void Test_PdfImportStream_01(string inputPdfFile, string outputPdfFile, string streamFile)
        {
            _tr.WriteLine("import stream for object TPL1 of pdf file \"{0}\" from \"{1}\" and save pdf to \"{2}\"", inputPdfFile, streamFile, outputPdfFile);
            PB_Pdf.PdfReader pr = null;
            Reader r = null;
            PB_Pdf.PdfWriter pw = null;
            try
            {
                pr = new PB_Pdf.PdfReader(inputPdfFile);
                //IPdfObject obj = ReadPdfObject(pr, idObject, "Object");
                r = new Reader(streamFile);
                //obj.stream = r.ReadBytes((int)r.Length);
                //PdfNValue length = obj.value["Length"];
                //if (length == null || !length.value.isInt()) throw new PBException("error wrong /Length of object {0}", idObject);
                //length.value.valueInt = obj.stream.Length;

                pw = new PB_Pdf.PdfWriter(outputPdfFile, FileMode.Create);
                pw.reader = pr;
                IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].value.valueObjectId, "Info");
                pw.WriteObject(info, "Info");
                IPdfObject root = ReadPdfObject(pr, pr.Trailer["Root"].value.valueObjectId, "Root");
                pw.WriteObject(root, "Root");

                IPdfObject pages = ReadPdfObject(pr, root.value["Pages"].value.valueObjectId, "Pages");
                pw.WriteObject(pages);

                IPdfObject page1 = ReadPdfObject(pr, pages.value["Kids"].value[0].valueObjectId, "Page 1");
                pw.WriteObject(page1);

                IPdfObject page1Content = ReadPdfObject(pr, page1.value["Contents"].value.valueObjectId, "Contents page 1");
                pw.WriteObject(page1Content);

                IPdfObject page1Ressource = ReadPdfObject(pr, page1.value["Resources"].value.valueObjectId, "Resources page 1");
                pw.WriteObject(page1Ressource);

                IPdfObject page1Ressource_01 = ReadPdfObject(pr, page1Ressource.value["XObject"].value["TPL1"].value.valueObjectId, "Resources page 1 /TPL1");

                // import stream from file
                page1Ressource_01.stream = r.ReadBytes((int)r.Length);
                PdfNValue length = page1Ressource_01.value["Length"];
                if (length == null || !length.value.isInt()) throw new PBException("error wrong /Length of object {0}", page1Ressource_01.id);
                length.value.valueInt = page1Ressource_01.stream.Length;

                pw.WriteObjectWithChilds(page1Ressource_01);
            }
            finally
            {
                if (pr != null) pr.Close();
                if (r != null) r.Close();
                if (pw != null) pw.Close();
            }
        }
Example #8
0
 public static void Test_PdfExportDeflatedStream_01(string pdfFile, int idObject, string streamFile)
 {
     _tr.WriteLine("export stream object {0} of pdf file \"{1}\" to \"{2}\"", idObject, pdfFile, streamFile);
     PB_Pdf.PdfReader pr = null;
     Writer w = null;
     try
     {
         pr = new PB_Pdf.PdfReader(pdfFile);
         IPdfObject obj = ReadPdfObject(pr, idObject, "Object");
         w = new Writer(streamFile, FileMode.Create);
         if (obj.deflatedStream != null)
             w.Write(obj.deflatedStream);
     }
     finally
     {
         if (pr != null) pr.Close();
         if (w != null) w.Close();
     }
 }
Example #9
0
 public static void Test_PdfExportDeflatedStream_02(String pdfFile, int objectId, string streamFile)
 {
     Writer w = null;
     _tr.WriteLine("export stream object {0} pdf file \"{1}\" to \"{2}\"", objectId, pdfFile, streamFile);
     PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(pdfFile);
     try
     {
         IPdfObject obj = ReadPdfObject(pr, objectId, "Object");
         if (obj.deflatedStream == null)
         {
             _tr.WriteLine("no stream");
             return;
         }
         _tr.WriteLine("read data");
         //IPdfInstruction[] instructions = PdfDataReader.PdfReadAll(obj.deflatedStream);
         PdfDataReader pdr = new PdfDataReader(obj.deflatedStream);
         //pdr.Trace += new TraceDelegate(_tr.WriteLine);
         IPdfInstruction[] instructions = pdr.ReadAll();
         _tr.WriteLine("{0} instructions", instructions.Length);
         //var q = from instruction in instructions select instruction.opeString;
         //foreach (string opeString in q.Distinct().OrderBy(opeString => opeString))
         //{
         //    _tr.WriteLine(opeString);
         //}
         w = new Writer(streamFile, FileMode.Create);
         foreach (IPdfInstruction instruction in instructions)
         {
             //_tr.WriteLine(instruction);
             //w.WriteLine(instruction.ToString());
             instruction.Export(w);
         }
     }
     finally
     {
         if (w != null) w.Close();
         pr.Close();
     }
 }
Example #10
0
 public static void Test_GetPdfText_01(String file)
 {
     _tr.WriteLine("read pdf file    \"{0}\"", file);
     PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(file);
     try
     {
         IPdfObject obj = ReadPdfObject(pr, 1138, "Object");
     }
     finally
     {
         pr.Close();
     }
 }
Example #11
0
        public static void Test_GetPdfText_08(String file)
        {
            PB_Pdf.PdfWriter pw    = null;
            string           file2 = zpath.PathSetFileName(file, Path.GetFileNameWithoutExtension(file) + "_new");

            _tr.WriteLine("read pdf file    \"{0}\"", file);
            _tr.WriteLine("save pdf to file \"{0}\"", file2);
            PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(file);
            pr.Trace += new TraceDelegate(_tr.WriteLine);
            try
            {
                pw        = new PB_Pdf.PdfWriter(file2, FileMode.Create);
                pw.reader = pr;

                IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].value.valueObjectId, "Info");
                pw.WriteObject(info, "Info");

                IPdfObject root = ReadPdfObject(pr, pr.Trailer["Root"].value.valueObjectId, "Root");
                pw.WriteObject(root, "Root");

                IPdfObject pages = ReadPdfObject(pr, root.value["Pages"].value.valueObjectId, "Pages");
                pages.value["Kids"].value.arrayValues = new IPdfValue[] { pages.value["Kids"].value.arrayValues[0] };
                pages.value["Count"].value.valueInt   = 1;
                pw.WriteObject(pages);

                IPdfObject page1 = ReadPdfObject(pr, pages.value["Kids"].value[0].valueObjectId, "Page 1");
                pw.WriteObject(page1);

                IPdfObject page1Content = ReadPdfObject(pr, page1.value["Contents"].value.valueObjectId, "Contents page 1");
                page1Content.value.objectValues.Remove("Filter");
                page1Content.stream = page1Content.deflatedStream;
                page1Content.value.objectValues["Length"].value.valueInt = page1Content.stream.Length;
                pw.WriteObject(page1Content);

                IPdfObject page1Ressource = ReadPdfObject(pr, page1.value["Resources"].value.valueObjectId, "Resources page 1");
                Dictionary <string, PdfNValue> objectValues = new Dictionary <string, PdfNValue>();
                objectValues["TPL1"] = page1Ressource.value["XObject"].value["TPL1"];
                page1Ressource.value["XObject"].value.objectValues = objectValues;
                pw.WriteObject(page1Ressource);

                IPdfObject page1Ressource_01 = ReadPdfObject(pr, page1Ressource.value["XObject"].value["TPL1"].value.valueObjectId, "Resources page 1 /TPL1");
                page1Ressource_01.value.objectValues.Remove("Filter");
                page1Ressource_01.stream = page1Ressource_01.deflatedStream;
                page1Ressource_01.value.objectValues["Length"].value.valueInt = page1Ressource_01.stream.Length;
                pw.WriteObjectWithChilds(page1Ressource_01);

                //IPdfObject page1Ressource_ProcSet = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ProcSet"].value.valueObjectId, "Resources page 1 /TPL1 ProcSet");

                //IPdfObject page1Ressource_Font_01 = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["Font"].value["F23"].value.valueObjectId, "Resources page 1 /TPL1 Font F23");
                //IPdfObject page1Ressource_Font_01_Widths = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Widths");
                //IPdfObject page1Ressource_Font_01_Encoding = ReadPdfObject(pr, page1Ressource_Font_01.value["Encoding"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Encoding");
                //IPdfObject page1Ressource_Font_01_FontDescriptor = ReadPdfObject(pr, page1Ressource_Font_01.value["FontDescriptor"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor");
                //IPdfObject page1Ressource_Font_01_FontDescriptor_FontFile3 = ReadPdfObject(pr, page1Ressource_Font_01_FontDescriptor.value["FontFile3"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor FontFile3");
                //IPdfObject page1Ressource_Font_01_ToUnicode = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 ToUnicode");

                //IPdfObject page1Ressource_Img_01 = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["XObject"].value["img8"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8");
                //IPdfObject page1Ressource_Img_01_Length = ReadPdfObject(pr, page1Ressource_Img_01.value["Length"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8 Length");

                //IPdfObject page1Ressource_OPMON = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ExtGState"].value["OPMON"].value.valueObjectId, "Resources page 1 /TPL1 ExtGState OPMON");
            }
            finally
            {
                pr.Close();
                if (pw != null)
                {
                    pw.Close();
                }
            }
        }
Example #12
0
        //public static void Test_GetPdfText_01()
        //{
        //    string file = @"c:\pib\media\print\Le monde\_quotidien\Le monde - 2012-12\Le monde - 2012-12-06 - no 21113.pdf";
        //    _tr.WriteLine("read pdf file \"{0}\"", file);
        //    string s = Test_GetPdfText_01(file);
        //    _tr.WriteLine(s);
        //    //PdfTextExtractor.GetTextFromPage();
        //    //ITextExtractionStrategy
        //    // iTextSharp.text.pdf.parser.LocationTextExtractionStrategy
        //}

        public static void Test_GetPdfText_07(String file)
        {
            _tr.WriteLine("read pdf file \"{0}\"", file);
            PB_Pdf.PdfReader pr = new PB_Pdf.PdfReader(file);
            pr.KeepObjectSource = true;
            try
            {
                //_tr.WriteLine();
                //_tr.WriteLine("read xref position");
                //pr.ReadXrefPosition();
                //_tr.WriteLine("xref table position : {0}", pr.XrefPosition.zToHex());

                //_tr.WriteLine();
                //_tr.WriteLine("read xref headers");
                //pr.ReadXrefHeaders();
                //_tr.WriteLine("trailer position : {0}", pr.TrailerPosition.zToHex());
                //_tr.WriteLine("objects number   : {0}", pr.ObjectsNumber);
                //foreach (PdfXrefHeader header in pr.XrefHeaders)
                //{
                //    _tr.WriteLine("xref header      : pos {0} id {1} nb {2}", header.filePosition.zToHex(), header.objectId, header.objectNb);
                //}

                //_tr.WriteLine();
                //_tr.WriteLine("read trailer");
                //pr.ReadTrailer();
                _tr.WriteLine("trailer");
                //PrintPdfObject(pr.Trailer);
                PrintPdfTrailer(pr.Trailer);
                //if (pr.Trailer.source != null)
                //{
                //    _tr.WriteLine("Source trailer");
                //    _tr.WriteLine(pr.Trailer.source);
                //}

                //_tr.WriteLine();
                //_tr.WriteLine("read xref");
                //pr.ReadXref();
                //int i = 0;
                //foreach (PdfXref xref in pr.Xref.Values)
                //{
                //    _tr.WriteLine("xref             : id {0,5} pos {1} generation {2}", xref.objectId, xref.filePosition.zToHex(), xref.generationNumber);
                //    if (++i == 10) break;
                //}

                //IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].valueObjectId, "Info");
                IPdfObject info           = ReadPdfObject(pr, pr.Trailer["Info"].value.valueObjectId, "Info");
                IPdfObject root           = ReadPdfObject(pr, pr.Trailer["Root"].value.valueObjectId, "Root");
                IPdfObject pages          = ReadPdfObject(pr, root.value["Pages"].value.valueObjectId, "Pages");
                IPdfObject page1          = ReadPdfObject(pr, pages.value["Kids"].value[0].valueObjectId, "Page 1");
                IPdfObject page1Content   = ReadPdfObject(pr, page1.value["Contents"].value.valueObjectId, "Contents page 1");
                IPdfObject page1Ressource = ReadPdfObject(pr, page1.value["Resources"].value.valueObjectId, "Resources page 1");
                //IPdfObject page1Ressource_01 = ReadPdfObject(pr, 59, "Contents page 1 (2)");
                IPdfObject page1Ressource_01      = ReadPdfObject(pr, page1Ressource.value["XObject"].value["TPL1"].value.valueObjectId, "Resources page 1 /TPL1");
                IPdfObject page1Ressource_ProcSet = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ProcSet"].value.valueObjectId, "Resources page 1 /TPL1 ProcSet");

                IPdfObject page1Ressource_Font_01                          = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["Font"].value["F23"].value.valueObjectId, "Resources page 1 /TPL1 Font F23");
                IPdfObject page1Ressource_Font_01_Widths                   = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Widths");
                IPdfObject page1Ressource_Font_01_Encoding                 = ReadPdfObject(pr, page1Ressource_Font_01.value["Encoding"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 Encoding");
                IPdfObject page1Ressource_Font_01_FontDescriptor           = ReadPdfObject(pr, page1Ressource_Font_01.value["FontDescriptor"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor");
                IPdfObject page1Ressource_Font_01_FontDescriptor_FontFile3 = ReadPdfObject(pr, page1Ressource_Font_01_FontDescriptor.value["FontFile3"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 FontDescriptor FontFile3");
                IPdfObject page1Ressource_Font_01_ToUnicode                = ReadPdfObject(pr, page1Ressource_Font_01.value["Widths"].value.valueObjectId, "Resources page 1 /TPL1 Font F23 ToUnicode");

                IPdfObject page1Ressource_Img_01        = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["XObject"].value["img8"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8");
                IPdfObject page1Ressource_Img_01_Length = ReadPdfObject(pr, page1Ressource_Img_01.value["Length"].value.valueObjectId, "Resources page 1 /TPL1 XObject img8 Length");

                IPdfObject page1Ressource_OPMON = ReadPdfObject(pr, page1Ressource_01.value["Resources"].value["ExtGState"].value["OPMON"].value.valueObjectId, "Resources page 1 /TPL1 ExtGState OPMON");
                //_tr.WriteLine("stream as string :");
                //_tr.WriteLine(page1Ressource_01.deflatedStream.zzToString());
                //_tr.WriteLine();
                //IPdfObject obj = ReadPdfObject(pr, 1043, "Object 1043");
            }
            finally
            {
                pr.Close();
            }
        }
Example #13
0
        public static void Test_PdfImportStream_01(string inputPdfFile, string outputPdfFile, string streamFile)
        {
            _tr.WriteLine("import stream for object TPL1 of pdf file \"{0}\" from \"{1}\" and save pdf to \"{2}\"", inputPdfFile, streamFile, outputPdfFile);
            PB_Pdf.PdfReader pr = null;
            Reader           r  = null;

            PB_Pdf.PdfWriter pw = null;
            try
            {
                pr = new PB_Pdf.PdfReader(inputPdfFile);
                //IPdfObject obj = ReadPdfObject(pr, idObject, "Object");
                r = new Reader(streamFile);
                //obj.stream = r.ReadBytes((int)r.Length);
                //PdfNValue length = obj.value["Length"];
                //if (length == null || !length.value.isInt()) throw new PBException("error wrong /Length of object {0}", idObject);
                //length.value.valueInt = obj.stream.Length;

                pw        = new PB_Pdf.PdfWriter(outputPdfFile, FileMode.Create);
                pw.reader = pr;
                IPdfObject info = ReadPdfObject(pr, pr.Trailer["Info"].value.valueObjectId, "Info");
                pw.WriteObject(info, "Info");
                IPdfObject root = ReadPdfObject(pr, pr.Trailer["Root"].value.valueObjectId, "Root");
                pw.WriteObject(root, "Root");

                IPdfObject pages = ReadPdfObject(pr, root.value["Pages"].value.valueObjectId, "Pages");
                pw.WriteObject(pages);

                IPdfObject page1 = ReadPdfObject(pr, pages.value["Kids"].value[0].valueObjectId, "Page 1");
                pw.WriteObject(page1);

                IPdfObject page1Content = ReadPdfObject(pr, page1.value["Contents"].value.valueObjectId, "Contents page 1");
                pw.WriteObject(page1Content);

                IPdfObject page1Ressource = ReadPdfObject(pr, page1.value["Resources"].value.valueObjectId, "Resources page 1");
                pw.WriteObject(page1Ressource);

                IPdfObject page1Ressource_01 = ReadPdfObject(pr, page1Ressource.value["XObject"].value["TPL1"].value.valueObjectId, "Resources page 1 /TPL1");

                // import stream from file
                page1Ressource_01.stream = r.ReadBytes((int)r.Length);
                PdfNValue length = page1Ressource_01.value["Length"];
                if (length == null || !length.value.isInt())
                {
                    throw new PBException("error wrong /Length of object {0}", page1Ressource_01.id);
                }
                length.value.valueInt = page1Ressource_01.stream.Length;

                pw.WriteObjectWithChilds(page1Ressource_01);
            }
            finally
            {
                if (pr != null)
                {
                    pr.Close();
                }
                if (r != null)
                {
                    r.Close();
                }
                if (pw != null)
                {
                    pw.Close();
                }
            }
        }