示例#1
2
        /// <summary>
        /// Combines all the students into a single PDF with each page a seperate report.
        /// </summary>\
        void ExportToSinglePDF()
        {
            string savePath = System.IO.Path.Combine(System.IO.Path.GetFullPath(textSavePath.Text), string.Format("{0}.pdf", textFileName.Text));
            string templatePath = System.IO.Path.GetFullPath(textTempLocation.Text);

            int finishedReports = 0;

            using (Document doc = new Document())
            {
                using (PdfSmartCopy copy = new PdfSmartCopy(doc, new FileStream(savePath, FileMode.Create)))
                {
                    doc.Open();

                    foreach (var student in StudentList)
                    {
                        PdfReader reader = new PdfReader(templatePath);

                        using (MemoryStream ms = new MemoryStream())
                        {
                            using (PdfStamper stamper = new PdfStamper(reader, ms))
                            {
                                var form = stamper.AcroFields;

                                //Setting the text of the template to the stored info
                                form.SetField("Street", student.Address);
                                form.SetField("CityZipState", student.CityZipState);
                                form.SetField("ClassName", student.ClassName);
                                form.SetField("Comments", student.Comments);
                                form.SetField("Grade", student.Grade.ToString());
                                form.SetField("Critique", student.Critique);
                                form.SetField("HighSchool", student.HighSchool);
                                form.SetField("Session", student.Session);
                                form.SetField("Absences", student.SemesterTotalAbs.ToString());
                                form.SetField("Tardies", student.SemesterTotalTdy.ToString());
                                form.SetField("NetAbsences", student.SemesterNetAbs.ToString());
                                form.SetField("StuNameReversed", student.NameReversed);

                                form.SetField("Date", DateTime.Now.ToShortDateString());

                                form.RenameField("Comments", string.Format("Comments{0}", finishedReports));
                                form.RenameField("Date", string.Format("Date{0}", finishedReports));

                                //Flatten the fields that we do not want editable

                                stamper.FormFlattening = true;

                                stamper.PartialFormFlattening("StuNameReversed");
                                stamper.PartialFormFlattening("Street");
                                stamper.PartialFormFlattening("CityZipState");
                                stamper.PartialFormFlattening("HighSchool");
                                stamper.PartialFormFlattening("ClassName");
                                stamper.PartialFormFlattening("Session");
                                stamper.PartialFormFlattening("Absences");
                                stamper.PartialFormFlattening("Tardies");
                                stamper.PartialFormFlattening("NetAbsences");
                                stamper.PartialFormFlattening("Grade");
                                stamper.PartialFormFlattening("Critique");
                                stamper.PartialFormFlattening("Date");
                            }

                            reader = new PdfReader(ms.ToArray());
                            //Adds page to the output pdf
                            copy.AddPage(copy.GetImportedPage(reader, 1));

                            //Report progress to update status text
                            bgProgressThread.ReportProgress(++finishedReports);
                        }
                    }// Student Foreach end
                }
            }
        }
示例#2
0
// ---------------------------------------------------------------------------
    public void Write(Stream stream) {
      using (ZipFile zip = new ZipFile()) {
        MovieAds movieAds = new MovieAds();
        byte[] pdf = movieAds.CreateTemplate();
        zip.AddEntry(TEMPLATE, pdf);       
        
        using (MemoryStream msDoc = new MemoryStream()) {
          using (Document document = new Document()) {
            using (PdfSmartCopy copy = new PdfSmartCopy(document, msDoc)) {
              document.Open();
              PdfReader reader;
              PdfStamper stamper = null;
              AcroFields form = null;
              int count = 0;
              MemoryStream ms = null;
              using (ms) {
                foreach (Movie movie in PojoFactory.GetMovies()) {
                  if (count == 0) {
                    ms = new MemoryStream();
                    reader = new PdfReader(RESOURCE);
                    stamper = new PdfStamper(reader, ms);
                    stamper.FormFlattening = true;
                    form = stamper.AcroFields;
                  }
                  count++;
                  PdfReader ad = new PdfReader(
                    movieAds.FillTemplate(pdf, movie)
                  );
                  PdfImportedPage page = stamper.GetImportedPage(ad, 1);
                  PushbuttonField bt = form.GetNewPushbuttonFromField(
                    "movie_" + count
                  );
                  bt.Layout = PushbuttonField.LAYOUT_ICON_ONLY;
                  bt.ProportionalIcon = true;
                  bt.Template = page;
                  form.ReplacePushbuttonField("movie_" + count, bt.Field);
                  if (count == 16) {
                    stamper.Close();
                    reader = new PdfReader(ms.ToArray());
                    copy.AddPage(copy.GetImportedPage(reader, 1));
                    count = 0;
                  }
                }
                if (count > 0) {
                  stamper.Close();
                  reader = new PdfReader(ms.ToArray());
                  copy.AddPage(copy.GetImportedPage(reader, 1));
                }
              }
            }
          }
          zip.AddEntry(RESULT, msDoc.ToArray());
        }

        zip.AddFile(RESOURCE, "");
        zip.Save(stream);             
      }
    }
示例#3
0
 public void OptimizePDFFile(Stream outputStream, Stream inputStream)
 {
     using (var doc = new Document())
     {
         using (var reader = new PdfReader(inputStream))
         {
             using (var copi = new PdfSmartCopy(doc, outputStream))
             {
                 doc.Open();
                 var p = copi.GetImportedPage(reader, 1);
                 copi.AddPage(p);
             }
         }
     }
 }
示例#4
0
        public static Stream JoinPdfs(bool InsertBlankPages, List<Stream> Pdfs)
        {
            if (Pdfs.Count == 0)
                throw new System.ArgumentNullException(nameof(Pdfs));

            // Only One PDF - Possible Reference Bug v's Memory/Speed (Returning Param Memory Stream)
            if (Pdfs.Count == 1)
                return Pdfs[0];

            // Join Pdfs
            var msBuilder = new MemoryStream();

            var pdfLastPageSize = PageSize.A4;
            var pdfDoc = new Document();
            var pdfCopy = new PdfSmartCopy(pdfDoc, msBuilder);
            pdfDoc.Open();
            pdfCopy.CloseStream = false;

            for (int i = 0; i < Pdfs.Count; i++)
            {
                var pdf = Pdfs[i];
                var pdfReader = new PdfReader(pdf);

                if (InsertBlankPages && (pdfCopy.CurrentPageNumber % 2) == 0)
                {
                    pdfCopy.AddPage(pdfLastPageSize, 0);
                }

                for (int indexPage = 1; indexPage <= pdfReader.NumberOfPages; indexPage++)
                {
                    pdfLastPageSize = pdfReader.GetPageSizeWithRotation(indexPage);
                    var page = pdfCopy.GetImportedPage(pdfReader, indexPage);
                    pdfDoc.SetPageSize(pdfLastPageSize);
                    pdfCopy.AddPage(page);
                }

                pdfReader.Close();
            }

            pdfDoc.Close();
            pdfCopy.Close();
            msBuilder.Position = 0;

            return msBuilder;
        }
示例#5
0
// ---------------------------------------------------------------------------
    public override void Write(Stream stream) {
      using (ZipFile zip = new ZipFile()) { 
        using (MemoryStream ms = new MemoryStream()) {
          // step 1
          using (Document document = new Document()) {
            // step 2
            using (PdfSmartCopy copy = new PdfSmartCopy(document, ms)) {
              // step 3
              document.Open();
              // step 4
              AddDataSheets(copy);
            }
          }
          zip.AddEntry(RESULT, ms.ToArray());        
        }
        zip.AddFile(DATASHEET_PATH, "");
        zip.Save(stream);
      }    
    } 
        public byte[] MergePdfForms(System.Collections.Generic.List <byte[]> files)
        {
            if (files.Count > 1)
            {
                using (System.IO.MemoryStream msOutput = new System.IO.MemoryStream())
                {
                    iTextSharp.text.Document doc = new iTextSharp.text.Document();

                    using (iTextSharp.text.pdf.PdfSmartCopy pCopy = new iTextSharp.text.pdf.PdfSmartCopy(doc, msOutput)
                    {
                        PdfVersion = iTextSharp.text.pdf.PdfWriter.VERSION_1_7
                    })
                    {
                        doc.Open();
                        foreach (byte[] oFile in files)
                        {
                            using (iTextSharp.text.pdf.PdfReader pdfFile = new iTextSharp.text.pdf.PdfReader(oFile))
                            {
                                for (int i = 1; i <= pdfFile.NumberOfPages; i++)
                                {
                                    pCopy.AddPage(pCopy.GetImportedPage(pdfFile, i));
                                    pCopy.FreeReader(pdfFile);
                                }
                            }
                        }
                    }


                    return(msOutput.ToArray());
                }
            }
            else if (files.Count == 1)
            {
                return(new System.IO.MemoryStream(files[0]).ToArray());
            }

            return(null);
        }
示例#7
0
        /// <summary>
        /// Merges pdf files from a byte list
        /// </summary>
        /// <param name="files">list of files to merge</param>
        /// <returns>memory stream containing combined pdf</returns>
        public static string MergePdfForms(List<string> file_names, string output) {
            

            if (file_names.Count > 1) {

                List<byte[]> files = new List<byte[]>();
                foreach (string file_name in file_names) {
                    var file = File.ReadAllBytes(file_name);
                    files.Add(file);
                }

                string[] names;
                PdfStamper stamper;
                MemoryStream msTemp = null;
                PdfReader pdfTemplate = null;
                PdfReader pdfFile;
                Document doc;
                PdfWriter pCopy;
                MemoryStream msOutput = new MemoryStream();

                pdfFile = new PdfReader(files[0]);

                doc = new Document();
                pCopy = new PdfSmartCopy(doc, msOutput);
                pCopy.PdfVersion = PdfWriter.VERSION_1_7;

                doc.Open();

                for (int k = 0; k < files.Count; k++) {
                    for (int i = 1; i < pdfFile.NumberOfPages + 1; i++) {
                        msTemp = new MemoryStream();
                        pdfTemplate = new PdfReader(files[k]);

                        stamper = new PdfStamper(pdfTemplate, msTemp);

                        names = new string[stamper.AcroFields.Fields.Keys.Count];
                        stamper.AcroFields.Fields.Keys.CopyTo(names, 0);
                        foreach (string name in names) {
                            stamper.AcroFields.RenameField(name, name + "_file" + k.ToString());
                        }

                        stamper.Close();
                        pdfFile = new PdfReader(msTemp.ToArray());
                        ((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i));
                        pCopy.FreeReader(pdfFile);
                    }
                }

                FileStream f = new FileStream(output, FileMode.Create);
                msOutput.WriteTo(f);
                msOutput.Flush();
                f.Flush();
                

                pdfFile.Close();
                pCopy.Close();
                doc.Close();
                msOutput.Close();
                f.Close();

                return output;
            }
            else if (file_names.Count == 1) {

                File.Copy(file_names.First(), output);
                return output;
            }

            return null;
        }
        virtual public void MergeAndStampPdf(bool resetStampEachPage, String[] input, String output, String stamp)
        {
            PdfReader stampReader = new PdfReader(pdfContent[stamp]);
            List<PdfReader> readersToClose = new List<PdfReader>();
            readersToClose.Add(stampReader);

            MemoryStream baos = new MemoryStream();

            try
            {
                Document document = new Document();

                PdfCopy writer = new PdfSmartCopy(document, baos);
                try
                {

                    document.Open();

                    int stampPageNum = 1;

                    foreach (string element in input)
                    {
                        // create a reader for the input document
                        PdfReader documentReader = new PdfReader(
                                new RandomAccessFileOrArray(
                                    new RandomAccessSourceFactory().CreateSource(pdfContent[element])
                                )
                            , null);

                        for (int pageNum = 1; pageNum <= documentReader.NumberOfPages; pageNum++)
                        {

                            // import a page from the main file
                            PdfImportedPage mainPage = writer.GetImportedPage(documentReader, pageNum);

                            // make a stamp from the page and get under content...
                            PdfCopy.PageStamp pageStamp = writer.CreatePageStamp(mainPage);

                            // import a page from a file with the stamp...
                            if (resetStampEachPage)
                            {
                                stampReader = new PdfReader(pdfContent[stamp]);
                                readersToClose.Add(stampReader);
                            }
                            PdfImportedPage stampPage = writer.GetImportedPage(stampReader, stampPageNum++);

                            // add the stamp template, update stamp, and add the page
                            pageStamp.GetOverContent().AddTemplate(stampPage, 0, 0);
                            pageStamp.AlterContents();
                            writer.AddPage(mainPage);

                            if (stampPageNum > stampReader.NumberOfPages)
                                stampPageNum = 1;
                        }
                    }
                }
                finally
                {
                    writer.Close();
                    document.Close();
                }
            }
            finally
            {
                foreach (PdfReader stampReaderToClose in readersToClose)
                {
                    stampReaderToClose.Close();
                }
            }
            pdfContent[output] = baos.ToArray();
        }
示例#9
0
        virtual public void XmpEncodingTest() {
            String fileName = "xmp_UTF-16BE-encoding";
            Document document = new Document();
            PdfSmartCopy copy = new PdfSmartCopy(document, new FileStream(OUT_FOLDER + fileName, FileMode.Create));

            document.Open();

            PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf");
            int pageCount = reader.NumberOfPages;

            for (int currentPage = 1; currentPage <= pageCount; currentPage++) {
                PdfImportedPage page = copy.GetImportedPage(reader, currentPage);
                copy.AddPage(page);
            }


            MemoryStream os = new MemoryStream();
            XmpWriter xmp = new XmpWriter(os, XmpWriter.UTF16, 2000);
            DublinCoreProperties.AddSubject(xmp.XmpMeta, "Hello World");
            DublinCoreProperties.AddSubject(xmp.XmpMeta, "XMP & Metadata");
            DublinCoreProperties.AddSubject(xmp.XmpMeta, "Metadata");
            xmp.Close();

            copy.XmpMetadata = os.ToArray();

            string metadataXml = System.Text.Encoding.GetEncoding("UTF-16BE").GetString(copy.XmpMetadata);

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(metadataXml);  //<-- This is where the exception is thrown


            document.Close();
            copy.Close();
            reader.Close();
        }
示例#10
0
        virtual public void XmpEncodingTest() {
            String fileName = "xmp_utf-8_encoding";
            Document document = new Document();
            PdfSmartCopy copy = new PdfSmartCopy(document, new FileStream(OUT_FOLDER + fileName, FileMode.Create));

            document.Open();

            PdfReader reader = new PdfReader(CMP_FOLDER + "pdf_metadata.pdf");
            int pageCount = reader.NumberOfPages;

            for (int currentPage = 1; currentPage <= pageCount; currentPage++) {
                PdfImportedPage page = copy.GetImportedPage(reader, currentPage);
                copy.AddPage(page);
            }


            PdfAConformanceLevel pdfaLevel = PdfAConformanceLevel.PDF_A_1B;
            MemoryStream os = new MemoryStream();
            PdfAXmpWriter xmp = new PdfAXmpWriter(os, copy.Info, pdfaLevel, copy);
            xmp.Close();

            copy.XmpMetadata = os.ToArray();

            string metadataXml = System.Text.Encoding.GetEncoding("UTF-8").GetString(copy.XmpMetadata);

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(metadataXml);  //<-- This is where the exception is thrown

            
            document.Close();
            copy.Close();
            reader.Close();
        }
 private void init()
 {
     _document = new Document();
     _writer = new PdfSmartCopy(_document, OutputFileStream);
     _writer.SetFullCompression();
     _document.Open();
 }
示例#12
0
        /**
         * Test to make sure that the following issue is fixed: http://sourceforge.net/mailarchive/message.php?msg_id=30891213
         */
        public void TestDecodeParmsArrayWithNullItems() {
            Document document = new Document();
            MemoryStream byteStream = new MemoryStream();
            PdfSmartCopy pdfSmartCopy = new PdfSmartCopy(document, byteStream);
            document.Open();

            PdfReader reader = TestResourceUtils.GetResourceAsPdfReader(RESOURCES, "imgWithDecodeParms.pdf");
            pdfSmartCopy.AddPage(pdfSmartCopy.GetImportedPage(reader, 1));

            document.Close();
            reader.Close();

            reader = new PdfReader(byteStream.ToArray());
            PdfDictionary page = reader.GetPageN(1);
            PdfDictionary resources = page.GetAsDict(PdfName.RESOURCES);
            PdfDictionary xObject = resources.GetAsDict(PdfName.XOBJECT);
            PdfStream img = xObject.GetAsStream(new PdfName("Im0"));
            PdfArray decodeParms = img.GetAsArray(PdfName.DECODEPARMS);
            Assert.AreEqual(2, decodeParms.Size);
            Assert.IsTrue(decodeParms[0] is PdfNull);

            reader.Close();
        }
示例#13
0
        public static byte[] Merge(string[] documentPaths) {
            byte[] mergedDocument;

            using (MemoryStream memoryStream = new MemoryStream())
            using (Document document = new Document())
            {
                PdfSmartCopy pdfSmartCopy = new PdfSmartCopy(document, memoryStream);
                document.Open();

                foreach (string docPath in documentPaths)
                {
                    PdfReader reader = new PdfReader(docPath);
                    try
                    {
                        reader.ConsolidateNamedDestinations();
                        int numberOfPages = reader.NumberOfPages;
                        for (int page = 0; page < numberOfPages; )
                        {
                            PdfImportedPage pdfImportedPage = pdfSmartCopy.GetImportedPage(reader, ++page);
                            pdfSmartCopy.AddPage(pdfImportedPage);
                        }
                    }
                    finally
                    {
                        reader.Close();
                    }
                }

                document.Close();
                mergedDocument = memoryStream.ToArray();
            }

            return mergedDocument;
        }
        private static MemoryStream MergePdfs(List<byte[]> files)
        {
            MemoryStream msOutput = new MemoryStream();
            try
            {
                if (files.Count > 1)
                {
                    PdfReader pdfFile;
                    Document doc;
                    PdfWriter pCopy;

                    pdfFile = new PdfReader(files[0]);

                    doc = new Document();
                    pCopy = new PdfSmartCopy(doc, msOutput);

                    doc.Open();

                    for (int k = 0; k < files.Count; k++)
                    {
                        pdfFile = new PdfReader(files[k]);
                        for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)
                        {
                            ((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i));
                        }
                        pCopy.FreeReader(pdfFile);
                    }

                    pdfFile.Close();
                    pCopy.Close();
                    doc.Close();

                    return msOutput;
                }
                else if (files.Count == 1)
                {
                    return new MemoryStream(files[0]);
                }
            }
            catch
            {

            }
            finally
            {
                msOutput.Close();
                msOutput.Dispose();
            }
            return null;
        }