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