示例#1
0
        // <summary>
        // This method combines pdf forms with xml data
        // </summary>
        // <param name="m_FormName">pdf form file path</param>
        // <param name="oData">xml dataset</param>
        // <returns>memory stream containing the pdf data</returns>
        private MemoryStream GeneratePDF(string m_FormName, XmlDocument oData)
        {
            PdfReader    pdfTemplate;
            PdfStamper   stamper;
            PdfReader    tempPDF;
            Document     doc;
            MemoryStream msTemp;
            PdfWriter    pCopy;
            MemoryStream msOutput = new MemoryStream();

            pdfTemplate = new PdfReader(m_FormName);

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

            pCopy.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, new PdfBoolean(true));
            pCopy.AddViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);

            doc.Open();

            for (int i = 1; i < pdfTemplate.NumberOfPages + 1; i++)
            {
                msTemp      = new MemoryStream();
                pdfTemplate = new PdfReader(m_FormName);

                stamper = new PdfStamper(pdfTemplate, msTemp);

                // map xml values to pdf form controls (element name = control name)
                foreach (XmlElement oElem in oData.SelectNodes("/Users/User"))
                {
                    stamper.AcroFields.SetField(oElem.Name, oElem.InnerText);
                }

                stamper.FormFlattening = true;
                stamper.Close();
                tempPDF = new PdfReader(msTemp.ToArray());
                ((PdfCopy)pCopy).AddPage(pCopy.GetImportedPage(tempPDF, i));
                pCopy.FreeReader(tempPDF);
            }

            doc.Close();

            return(msOutput);
        }
        private void MixPDFs(string pathPDF1, string pathPDF2)
        {
            string NewMixedPDFfilePath = Path.Combine(pathLocalResourcesAndroid, "NewPDF.pdf");

            PdfReader pdfReader1 = new PdfReader(pathPDF1);
            PdfReader pdfReader2 = new PdfReader(pathPDF2);

            //Memorystream usado para writer del nuevo pdf. Todo el contenido añadido al pdf será
            //almacenado en el memoryStream al ser asociado en la instancia del PDFWriter
            MemoryStream memoryStream = new MemoryStream();
            Document     newPDF       = new Document(PageSize.LETTER);

            var writer = new PdfCopy(newPDF, memoryStream);

            writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE);// Añadimos los atributos del nuevo PDF

            //Nuevo PDF
            newPDF.AddAuthor("Fran");
            newPDF.AddTitle("Mezcla de fichero PDF");
            newPDF.AddCreator("Fran Cedron");
            newPDF.AddCreationDate();

            // Abrimos el documento
            newPDF.Open();

            //PDF1
            CopyPDFPages(pdfReader1.NumberOfPages, writer, pdfReader1);

            //PDF2
            CopyPDFPages(pdfReader1.NumberOfPages, writer, pdfReader2);

            newPDF.Close();
            writer.Close();                         // En el caso que querramos guardarlo en una carpeta

            byte[] bytArr = memoryStream.ToArray(); //array de bytes con el contenido del pdf almacenado en el memory stream

            using (FileStream fs = File.Create(NewMixedPDFfilePath))
            {
                fs.Write(bytArr, 0, (int)bytArr.Length);
            }

            Debug.WriteLine("El fichero existe: creando mezcla fichero");
        }