public void SmartCopySignedDocuments() { string file = RESOURCES + "hello_signed1.pdf"; Directory.CreateDirectory("PdfCopyTest/"); Document pdfDocument = new Document(); PdfSmartCopy copier = new PdfSmartCopy(pdfDocument, new FileStream("PdfCopyTest/SmartCopySignedDocuments.pdf", FileMode.Create)); pdfDocument.Open(); PdfReader reader1 = new PdfReader(file); copier.AddPage(copier.GetImportedPage(reader1, 1)); copier.FreeReader(reader1); reader1 = new PdfReader(file); copier.AddPage(copier.GetImportedPage(reader1, 1)); copier.FreeReader(reader1); pdfDocument.Close(); PdfReader reader = new PdfReader("PdfCopyTest/SmartCopySignedDocuments.pdf"); PdfDictionary sig = (PdfDictionary)reader.GetPdfObject(8); PdfDictionary sigRef = sig.GetAsArray(PdfName.REFERENCE).GetAsDict(0); Assert.True(PdfName.SIGREF.Equals(sigRef.GetAsName(PdfName.TYPE))); Assert.False(sigRef.Contains(PdfName.DATA)); }
/// <summary> /// Creates a single PDF from multiple at a specified location /// </summary> private static void MergePdf() { String result = @"d:\PDF\Output\mergefile.pdf"; Document document = new Document(); //create PdfSmartCopy object PdfSmartCopy copy = new PdfSmartCopy(document, new FileStream(result, FileMode.Create)); copy.SetFullCompression(); //open the document document.Open(); PdfReader reader = null; foreach (var file in new DirectoryInfo(@"D:\PDF\Output").GetFiles("*.pdf").OrderBy(x => x.Name)) { if (file.Name == "mergefile.pdf") { continue; } //create PdfReader object reader = new PdfReader(file.FullName); //merge combine pages for (int page = 1; page <= reader.NumberOfPages; page++) { copy.AddPage(copy.GetImportedPage(reader, page)); } } //close the document object document.Close(); }
private void addFilePages(Stream fileStream) { PdfReader reader = null; try { _fileNumber++; _attachmentsCount += copyAttachments(fileStream); fileStream = fileStream.ReopenForReading(); reader = new PdfReader(fileStream); reader.ConsolidateNamedDestinations(); addBookmark(reader); int numberOfPages = reader.NumberOfPages; for (int pageNumber = 1; pageNumber <= numberOfPages; pageNumber++) { var size = reader.GetPageSizeWithRotation(pageNumber); _document.SetPageSize(size); _document.NewPage(); _overallPageNumber++; var page = _writer.GetImportedPage(reader, pageNumber); addContentToPage(reader, size, page); _writer.AddPage(page); } } finally { if (reader != null) { _writer.FreeReader(reader); } } }
public static void ConcatPages(List <PdfActionResult> docs, string outputFilePath, Rectangle pageSize) { try { // Capture the correct size and orientation for the page: using (var resultDoc = new Document(pageSize)) using (var fs = new FileStream(outputFilePath, FileMode.Create)) using (var pdfCopy = new PdfSmartCopy(resultDoc, fs)) { resultDoc.Open(); foreach (var doc in docs) { using (PdfReader reader = new PdfReader(doc.ResultPdfPath)) { PdfImportedPage importedPage = pdfCopy.GetImportedPage(reader, doc.Action.ModelPageIndex); pdfCopy.AddPage(importedPage); } } } } catch (Exception ex) { throw new Exception("Impossible to concatenate Pages", ex); } }
/// <summary> /// 合并生成的pdf文件流 /// </summary> /// <param name="pdfStreams">多个pdf文件字节</param> /// <returns>返回合并之后的pdf文件流</returns> public static MemoryStream MergePdfs(List <byte[]> pdfStreams) { try { Document document = new Document(); MemoryStream mergePdfStream = new MemoryStream(); //这里用的是smartCopy,整篇文档只会导入一份字体。属于可接受范围内 PdfSmartCopy copy = new PdfSmartCopy(document, mergePdfStream); document.Open(); for (int i = 0; i < pdfStreams.Count; i++) { byte[] stream = pdfStreams[i]; PdfReader reader = new PdfReader(stream); //for循环新增文档页数,并copy pdf数据 document.NewPage(); PdfImportedPage imported = copy.GetImportedPage(reader, 1); copy.AddPage(imported); reader.Close(); } copy.Close(); document.Close(); return(mergePdfStream); } catch (Exception ex) { ex.ToString(); return(null); } }
/** * Test to make sure that the following issue is fixed: http://sourceforge.net/mailarchive/message.php?msg_id=30891213 */ virtual 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(); }
public MemoryStream MergePdfForms(List <byte[]> files) { if (files.Count > 1) { PdfReader pdfFile; Document doc; PdfWriter pCopy; MemoryStream msOutput = new MemoryStream(); 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])); } return(null); }
//======================================== // // //======================================== private void ExtractAndSaveFile(string sourcePdfFilePath, string outpuPdfFileName, int startPage, int numberOfPages) { using (PdfReader reader = new PdfReader(sourcePdfFilePath)) { Document document = new Document(); PdfSmartCopy partial = new PdfSmartCopy(document, new FileStream(outpuPdfFileName, FileMode.Create)); partial.SetPdfVersion(PdfWriter.PDF_VERSION_1_5); partial.CompressionLevel = PdfStream.BEST_COMPRESSION; partial.SetFullCompression(); document.Open(); for (int pagenumber = startPage; pagenumber < (startPage + numberOfPages); pagenumber++) { if (reader.NumberOfPages >= pagenumber) { partial.AddPage(partial.GetImportedPage(reader, pagenumber)); } else { break; } } document.Close(); } }
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); }
public MemoryStream MergePdfForms(List <byte[]> files) { if (files.Count > 1) { string[] names; PdfStamper stamper; MemoryStream msTemp = null; PdfReader pdfTemplate = null; PdfReader pdfFile; Document doc; PdfWriter pCopy; var msOutput = new MemoryStream(); pdfFile = new PdfReader(files[0]); doc = new Document(); pCopy = new PdfSmartCopy(doc, msOutput) { PdfVersion = PdfWriter.VERSION_1_7 }; doc.Open(); for (var k = 0; k < files.Count; k++) { for (var 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 (var 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); } } pdfFile.Close(); pCopy.Close(); doc.Close(); return(msOutput); } else if (files.Count == 1) { return(new MemoryStream(files[0])); } return(null); }
public bool Split(Stream os, long sizeInBytes) { if (!HasMorePages()) { os.Close(); return(false); } overSized = false; Document document = new Document(); PdfCopy copy = new PdfSmartCopy(document, os); document.Open(); bool hasPage = false; PdfResourceCounter counter = new PdfResourceCounter(reader.Trailer); long trailer = counter.GetLength(null); IDictionary <int, PdfObject> resources = counter.Resources; long length = 0; long page; while (HasMorePages()) { counter = new PdfResourceCounter(reader.GetPageN(currentPage)); page = counter.GetLength(resources); resources = counter.Resources; length += page + trailer + XrefLength(resources.Count); if (LOGGER.IsLogging(Level.INFO)) { LOGGER.Info(String.Format("Page {0}: Comparing {1} with {2}", currentPage, length, sizeInBytes)); LOGGER.Info(String.Format(" page {0} trailer {1} xref {2}", page, trailer, XrefLength(resources.Count))); } if (!hasPage || length < sizeInBytes) { hasPage = true; copy.AddPage(copy.GetImportedPage(reader, currentPage)); length = copy.Os.Counter; if (LOGGER.IsLogging(Level.INFO)) { LOGGER.Info(String.Format("Size after adding page: {0}", length)); } if (length > sizeInBytes) { overSized = true; } currentPage++; } else { LOGGER.Info("Page doesn't fit"); break; } } document.Close(); return(true); }
/// <summary> /// <para>(ESP) Este metodo es recursivo, se encarga de asignar los bookmarks y asignarles su parent</para> /// <para>(ENG) this method is recursive, assign the parent for each file</para> /// </summary> /// <param name="doc"> /// <para>(ESP) Este es el documento actual</para> /// <para>(ENG) this is the current document</para> /// </param> /// <param name="pdfCopy"> /// <para>(ESP)es el documento que hará el smart copy</para> /// <para>(ENG) this is the pdfsmartcopy for the append another pdf</para> /// </param> /// <param name="marcadorNombreLibro"> /// <para>(ESP) este es el parent</para> /// <para>(ENG) this is the parent</para> /// </param> /// <param name="enlace"> /// <para>(ESP) Esta es la estructura del documento, donde contiene nombre y url del documento</para> /// <para>(ENG) This is the structure's document, this contains the name and url's file </para> /// </param> /// <param name="rutaPDFs"> /// <para>(ESP)Es donde se generan los documentos</para> /// <para>(ENG)Its the path for create the files</para> /// </param> public static void GenerarHijosEstructura(Document doc, PdfSmartCopy pdfCopy, PdfOutline marcadorNombreLibro, Modelo.POCOs.EstructuraPDF enlace, string rutaPDFs) { try { PdfContentByte pb = pdfCopy.DirectContent; //Crea el link para la sección Anchor section1 = new Anchor(enlace.Nombre) { Name = enlace.Nombre }; Paragraph psecton1 = new Paragraph(); psecton1.Add(section1); //mostrar la sección 1 en una ubicación específica del documento ColumnText.ShowTextAligned(pb, Element.ALIGN_LEFT, psecton1, 36, PageSize.A4.Height - 100, 0); //(ESP) Se crea el marcador para este documento, se hace referencia al documento padre (parent) //(ENG) create the bookmark for this document, and create the reference with the parent var mbot = new PdfOutline(marcadorNombreLibro, PdfAction.GotoLocalPage(enlace.Nombre, false), enlace.Nombre); //(ESP) Se lee el documento //(ENG) read the file PdfReader reader = new PdfReader(enlace.UrlDocumento); //(ESP) Se adjuntan las paginas al documento //(ENG) Copy each page in the current pdfcopy for (int I = 1; I <= reader.NumberOfPages; I++) { doc.SetPageSize(reader.GetPageSizeWithRotation(1)); PdfImportedPage page = pdfCopy.GetImportedPage(reader, I); pdfCopy.AddPage(page); } //Clean up pdfCopy.FreeReader(reader); reader.Close(); if (enlace.Hijos.Any()) { foreach (var cadaHijo in enlace.Hijos) { //(ESP) aquí está la clave, esto es recurisvo //(ENG) this is the magic, its recursive GenerarHijosEstructura(doc, pdfCopy, mbot, cadaHijo, rutaPDFs); } } } catch (Exception error) { } }
public void fillPDF(string templatePath, IEnumerable <IPdfMergeData> mergeDataItems, System.IO.MemoryStream outputstream) { var pagesAll = new List <byte[]>(); byte[] pageBytes = null; foreach (var mergeItem in mergeDataItems) { var templateReader = new iTextSharp.text.pdf.PdfReader(templatePath); using (var tempStream = new System.IO.MemoryStream()) { PdfStamper stamper = new PdfStamper(templateReader, tempStream); stamper.FormFlattening = true; AcroFields fields = stamper.AcroFields; stamper.Writer.CloseStream = false; var fieldVals = mergeItem.MergeFieldValues; foreach (string name in fieldVals.Keys) { fields.SetField(name, fieldVals[name]); } stamper.Close(); tempStream.Position = 0; pageBytes = tempStream.ToArray(); pagesAll.Add(pageBytes); } } Document mainDocument = new Document(PageSize.A4); var pdfCopier = new PdfSmartCopy(mainDocument, outputstream); pdfCopier.CloseStream = false; mainDocument.Open(); foreach (var pageByteArray in pagesAll) { mainDocument.NewPage(); pdfCopier.AddPage(pdfCopier.GetImportedPage(new PdfReader(pageByteArray), 1)); } pdfCopier.Close(); outputstream.Position = 0; }
//Burst-- Make each page of an existing multi-page PDF document //as another brand new PDF document private void PDFBurst() { string pdfTemplatePath = Server.MapPath(P_InputStream3); PdfReader reader = new PdfReader(pdfTemplatePath); //PdfCopy copy; PdfSmartCopy copy; for (int i = 1; i < reader.NumberOfPages; i++) { Document d1 = new Document(); copy = new PdfSmartCopy(d1, new FileStream(Server.MapPath(P_OutputStream).Replace(".pdf", i.ToString() + ".pdf"), FileMode.Create)); d1.Open(); copy.AddPage(copy.GetImportedPage(reader, i)); d1.Close(); } }
public static bool Execute(String[] sourcePaths, String targetPath) { try { Console.WriteLine("Begin merging {0} pdf documents . . . ", sourcePaths.Length); byte[] mergedPdf = null; using (MemoryStream ms = new MemoryStream()) { using (Document document = new Document(PageSize.A4, 4, 3, 3, 3)) { using (PdfCopy copy = new PdfSmartCopy(document, ms)) { document.Open(); for (int i = 0; i < sourcePaths.Length; ++i) { Console.WriteLine("Extracting {0} . . . ", sourcePaths[i]); PdfReader reader = new PdfReader(sourcePaths[i]); // loop over the pages in that document int n = reader.NumberOfPages; for (int page = 0; page < n;) { copy.AddPage(copy.GetImportedPage(reader, ++page)); } copy.FreeReader(reader); reader.Close(); } } } mergedPdf = ms.ToArray(); Console.WriteLine(String.Format("Merging {0} bytes of pdf documents", mergedPdf.Length)); using (Stream os = new FileStream(targetPath, FileMode.Create)) { os.Write(mergedPdf, 0, mergedPdf.Length); os.Flush(); } return(true); } } catch (Exception ex) { throw ex; } }
public static void WriteInTemplate(List<Models.Statement> statementList) { try { string invoiceNumber = statementList.FirstOrDefault().Invoice.ToString().Trim(); using (Document document = new Document()) { FileStream fileStream = new FileStream(HostingEnvironment.MapPath("~/Content/reports/" + invoiceNumber + ".pdf"), FileMode.Create); using (PdfSmartCopy smartCopy = new PdfSmartCopy(document, fileStream)) { document.Open(); PdfReader pdfReader = new PdfReader(HostingEnvironment.MapPath("~/Content/InvoiceTemplate/invoiceTemplate.pdf")); using (var memoryStream = new MemoryStream()) { using (PdfStamper pdfStamper = new PdfStamper(pdfReader, memoryStream)) { string month = null; string day = null; string year = null; AcroFields pdfFields = pdfStamper.AcroFields; {//billing address pdfFields.SetField("BillToCompany", statementList.FirstOrDefault().BillToCompany.ToString().Trim().ToUpper()); pdfFields.SetField("BillToContact", statementList.FirstOrDefault().BillToContact.ToString().Trim().ToUpper()); pdfFields.SetField("ShipToCompany", statementList.FirstOrDefault().ShipToCompany.ToString().Trim().ToUpper()); pdfFields.SetField("ShipToContact", statementList.FirstOrDefault().ShipToContact.ToString().Trim().ToUpper()); pdfFields.SetField("PONumber", statementList.FirstOrDefault().PurchaseOrderNo.ToString().Trim()); pdfFields.SetField("OrderNumber", statementList.FirstOrDefault().Order_Number.ToString().Trim()); pdfFields.SetField("ShippingMethod", statementList.FirstOrDefault().Shipping_Method.ToString().Trim()); pdfFields.SetField("PaymentTerms", statementList.FirstOrDefault().Payment_Terms.ToString().Trim()); } pdfStamper.FormFlattening = true; // generate a flat PDF } pdfReader = new PdfReader(memoryStream.ToArray()); smartCopy.AddPage(smartCopy.GetImportedPage(pdfReader, 1)); } } } emailController.CreateMessageWithAttachment(invoiceNumber); } catch (Exception e) { } }
public static byte[] DeletePages(byte[] fileContents, int[] pages) { using (var memoryStream = new MemoryStream()) { using (var document = new Document(PageSize.A4)) { using (var pdfReader = new PdfReader(fileContents)) { pages = pages .Where(o => o >= 1 && o <= pdfReader.NumberOfPages) .Distinct() .ToArray(); if (pages.Length < pdfReader.NumberOfPages) { using (var copyWriter = new PdfSmartCopy(document, memoryStream)) { document.Open(); copyWriter.RegisterFonts(); var contents = copyWriter.DirectContent; for (int i = 1; i <= pdfReader.NumberOfPages; i++) { if (!pages.Contains(i)) { var importedPage = copyWriter.GetImportedPage(pdfReader, i); copyWriter.AddPage(importedPage); } } document.Close(); copyWriter.RegisterProperties(); fileContents = memoryStream.ToArray(); } } } } } return(fileContents); }
public void TrimLeftandRightFoall(string sourceFilePath, string outputFilePath, float cropwidth) { PdfReader pdfReader = new PdfReader(sourceFilePath); float widthTo_Trim = Utilities.MillimetersToPoints(cropwidth); using (var output = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write)) { // Create a new document Document doc = new Document(); // Make a copy of the document PdfSmartCopy smartCopy = new PdfSmartCopy(doc, output); // Open the newly created document doc.Open(); // Loop through all pages of the source document for (int i = 1; i <= pdfReader.NumberOfPages; i++) { // Get a page var page = pdfReader.GetPageN(i); iTextSharp.text.Rectangle cropbox = pdfReader.GetCropBox(i); float width = cropbox.Width; float height = cropbox.Height; PdfRectangle rectLeftside = new PdfRectangle(widthTo_Trim, widthTo_Trim, width - widthTo_Trim, height - widthTo_Trim); page.Put(PdfName.MEDIABOX, rectLeftside); var copiedPage = smartCopy.GetImportedPage(pdfReader, i); smartCopy.AddPage(copiedPage); } doc.Close(); } }
public static byte[] SavePDF(IList <byte[]> Lbyte) { Document document = new Document(); MemoryStream memory = new MemoryStream(); //这里用的是smartCopy,整篇文档只会导入一份字体。属于可接受范围内 PdfSmartCopy copy = new PdfSmartCopy(document, memory); document.Open(); PdfReader reader = new PdfReader(Lbyte.FirstOrDefault()); document.NewPage(); for (int i = 1; i <= reader.NumberOfPages; i++) { //for循环新增文档页数,并copy pdf数据 PdfImportedPage imported = copy.GetImportedPage(reader, i); copy.AddPage(imported); } reader.Close(); copy.Close(); document.Close(); return(memory.ToArray()); }
public static Byte[] MultiplePDF(string[] mySelectIDArray, string reportName, string schoolyear, string schoolcode, string sessionID) { Document doc = new Document(); MemoryStream msOutput = new MemoryStream(); // PdfCopy pCopy; PdfCopy pCopy = new PdfSmartCopy(doc, msOutput); doc.Open(); for (int j = 0; j < mySelectIDArray.Length; j++) { string userID = HttpContext.Current.User.Identity.Name; string employeeID = mySelectIDArray[j].ToString(); if (employeeID != "") { try { Byte[] myPDF; myPDF = GetOneReport(reportName, userID, schoolyear, schoolcode, sessionID); MemoryStream stream1 = new MemoryStream(myPDF); PdfReader pdfFile1 = new PdfReader(stream1.ToArray()); for (int i = 1; i <= pdfFile1.NumberOfPages; i++) { pCopy.AddPage(pCopy.GetImportedPage(pdfFile1, i)); } pdfFile1.Close(); } catch { } } } try { pCopy.Close(); doc.Close(); } catch { } return(msOutput.ToArray()); }
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(); }
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 static void CombineAndSavePdf(string savePath, List <string> lstPdfFiles) { using (Stream outputPdfStream = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.None)) { Document document = new Document(); PdfSmartCopy copy = new PdfSmartCopy(document, outputPdfStream); document.Open(); PdfReader reader; int totalPageCnt; PdfStamper stamper; string[] fieldNames; foreach (string file in lstPdfFiles) { reader = new PdfReader(file); totalPageCnt = reader.NumberOfPages; for (int pageCnt = 0; pageCnt < totalPageCnt;) { //have to create a new reader for each page or PdfStamper will throw error reader = new PdfReader(file); stamper = new PdfStamper(reader, outputPdfStream); fieldNames = new string[stamper.AcroFields.Fields.Keys.Count]; stamper.AcroFields.Fields.Keys.CopyTo(fieldNames, 0); foreach (string name in fieldNames) { stamper.AcroFields.RenameField(name, name + "_file" + pageCnt.ToString()); } copy.AddPage(copy.GetImportedPage(reader, ++pageCnt)); } copy.FreeReader(reader); } document.Close(); } }
public static byte[] zCombinePdfs(List <byte[]> files) { if (files.Count > 1) { MemoryStream msOutput = new MemoryStream(); PdfReader reader = new PdfReader(files[0]); Document doc = new Document(); PdfSmartCopy copy = new PdfSmartCopy(doc, msOutput); doc.Open(); for (int k = 0; k < files.Count; k++) { for (int i = 1; i < reader.NumberOfPages + 1; i++) { copy.AddPage(copy.GetImportedPage(reader, i)); copy.FreeReader(reader); } } reader.Close(); copy.Close(); doc.Close(); return(msOutput.ToArray()); } else if (files.Count == 1) { return(files[0]); } return(null); }
private void merge_btn_Click(object sender, EventArgs e) { //gets the size of linked list... int list_len = 0; list_len = path_link.len(); //If user tries to merge without choosing two files atleast... while (list_len == 0) { MessageBox.Show("Please Choose Files First !"); choose_btn_Click(sender, e); return; } //path of our merged file... string outputPdfPath = @"C:\Users\umair\source\repos\basic\basic\mergedDoc\getMerged.pdf"; //Creates a new Document... Document doc = new Document(); //Creates an outputStream file for the doc... FileStream out_file = new FileStream(outputPdfPath, FileMode.Create); //Creates a copy of document... PdfSmartCopy copy_doc = new PdfSmartCopy(doc, out_file); //open document doc.Open(); Node curr = path_link.head; //Merge all files in a link list for (int f = 0; f < list_len; f++) { //Reads pdf... PdfReader read_pdf = new PdfReader(curr.path); //gets total number of pages in read_pdf; int TotalPages = read_pdf.NumberOfPages; //Adding each page in doc... for (int i = 1; i <= TotalPages; i++) { //get each page of file and adding it to doc... PdfImportedPage get_page = copy_doc.GetImportedPage(read_pdf, i); copy_doc.AddPage(get_page); } curr = curr.next; read_pdf.Close(); } //save the output file doc.Close(); DialogResult show_dialog = MessageBox.Show("Download your Merged File !", "Success!", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (show_dialog == DialogResult.OK) { System.Diagnostics.Process.Start(outputPdfPath); } if (show_dialog == DialogResult.Cancel) { this.Hide(); merge_page h = new merge_page(); h.Show(); } }
//2.2.1 //fill text to each PDF except group E letters__________________________________________________________________ 2.2.2 private void FillTextToPDF_POR(string inputPDFFile, PdfSmartCopy copy, FPL1LTR pageInfo, string LtrSubGrp, string PtnCNY) { using (var baos = new MemoryStream()) //inputHead=p1_inPOR_xxxxxx.PDF { using (PdfReader templateReader = new PdfReader(GlobalVar.wPATH() + inputPDFFile.Replace("inXXX_", "inPOR_"))) //input= "d:\L1Letters\" + "inPOR_A1提款信_MO_1-18480_page18480_1.PDF" { using (PdfStamper stamper = new PdfStamper(templateReader, baos)) { //create a font family (細明體HKSCS + EUDC) string fontPath = @"d:\MINGLIU.TTC,2"; //path + @"\MINGLIU.TTC,2"; BaseFont bfChinese = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); string fontPath2 = @"d:\EUDC.TTF"; BaseFont bfChinese2 = BaseFont.CreateFont(fontPath2, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); List <BaseFont> FontFamily = new List <BaseFont>(); FontFamily.Add(bfChinese); FontFamily.Add(bfChinese2); AcroFields fields = stamper.AcroFields; fields.SubstitutionFonts = FontFamily; fields.GenerateAppearances = true; fields.SetField("cname", pageInfo.PTNCNA); stamper.AcroFields.SetFieldProperty("pname", "textsize", 0f, null); //font auto resize (0f) fields.SetField("pname", pageInfo.PTNNAM); fields.SetField("ltrno", pageInfo.LTRNO); fields.SetField("idno", pageInfo.PTNIDN.Substring(0, 4) + "XXXX"); fields.SetField("ofcdate", DateTime.Now.ToString("dd/MM/yyyy")); fields.SetField("ptnno", pageInfo.PTNNO); fields.SetField("idx", pageInfo.IDX.ToString()); fields.SetField("ltrgrp", pageInfo.LTRGRP); stamper.AcroFields.SetFieldProperty("addr1", "textsize", 0f, null); fields.SetField("addr1", pageInfo.ADDR1); if (pageInfo.ADDR2.Trim() == "") //向前移 (如空白, 分段地址向上移) { if (pageInfo.ADDR3.Trim() == "") { pageInfo.ADDR2 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } else { pageInfo.ADDR2 = pageInfo.ADDR3; pageInfo.ADDR3 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } } if (pageInfo.ADDR3.Trim() == "") //向前移 (如空白, 分段地址向上移) { pageInfo.ADDR3 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } stamper.AcroFields.SetFieldProperty("addr2", "textsize", 0f, null); fields.SetField("addr2", pageInfo.ADDR2.Trim()); stamper.AcroFields.SetFieldProperty("addr3", "textsize", 0f, null); fields.SetField("addr3", pageInfo.ADDR3.Trim()); fields.SetField("addr4", pageInfo.ADDR4); if (pageInfo.LTRGRP.Trim() == "D") //3.3 政府管理子帳戶結餘, 3.4 提取款項原因 (未滿65歲) { if (pageInfo.UPLBAL < pageInfo.TXNBAL) //未滿65歲 (LA), 提款上限 (UPLBAL) < 結餘 (TXNBAL) then uplbal else txnbal { fields.SetField("p1balance", "O montante máximo a levantar é de MOP$" + String.Format("{0:#,#00.00}", pageInfo.UPLBAL) + " (incluindo a verba do ano " + DateTime.Now.Year.ToString() + ")."); } else { fields.SetField("p1balance", "O montante máximo a levantar é de MOP$" + String.Format("{0:#,#00.00}", pageInfo.TXNBAL) + " (incluindo a verba do ano " + DateTime.Now.Year.ToString() + ")."); } fields.SetField("p2age", "Não ter completado 65 anos de idade, e estar a receber a pensão de invalidez do Fundo de Segurança Social há mais de um ano ou o subsídio de invalidez especial do Instituto de Acção Social."); } else { fields.SetField("p1balance", "O saldo é de MOP$" + String.Format("{0:#,#00.00}", pageInfo.TXNBAL) + " (incluindo a verba do ano " + DateTime.Now.Year.ToString() + ")."); fields.SetField("p2age", "Ter completado 65 anos de idade."); } if (pageInfo.LTRGRP.Trim() == "C") //3.5 款項發放 { //fields.SetField("p4bank1", "Por depósito na minha conta bancária em MOP n.º_____Banco___"); //全型underline fields.SetField("p4bank1", "Por depósito na conta bancária em MOP nº_________Banco___"); //全型underline fields.SetField("p4bank2", "(Deve anexar fotocópias do BIRM e da conta bancária)"); fields.SetField("p4bank3", ""); fields.SetField("p4bank4", ""); fields.SetField("p4bank5", ""); } else { fields.SetField("p4bank1", "A verba será depositada na conta bancária do requerente pela ordem"); fields.SetField("p4bank2", "seguinte: 1. Conta bancária na qual recebe a pensão para idosos ou pensão de"); fields.SetField("p4bank3", "invalidez do FSS. 2. Conta bancária na qual recebe o subsídio para idosos do"); fields.SetField("p4bank4", "Instituto de Acção Social. 3. Conta bancária na qual recebe o subsídio de"); fields.SetField("p4bank5", "invalidez especial do Instituto de Acção Social."); } if (pageInfo.LTRGRP.Trim() == "A") { fields.SetField("p6point", "6."); fields.SetField("p6label", "Inscrição de levantamento"); fields.SetField("p6label2", "automático de verbas:"); fields.SetField("p6auto1", "Se concordar , pode participar na “Inscrição de levantamento"); fields.SetField("p6auto2", "automático de verbas” (vide Guia para a inscrição de levantamento"); fields.SetField("p6auto3", "automático de verbas), tomando conhecimento de que a partir do ano"); fields.SetField("p6auto4", "seguinte ao registo, não é preciso efectuar o requerimento de"); fields.SetField("p6auto5", "levantamento de verba desde que sejam preenchidos os requisitos no"); fields.SetField("p6auto6", "ano em causa. A verba do ano relevante será atribuída na conta"); fields.SetField("p6auto7", "bancária acima referida."); string fontPath3 = @"c:\windows\fonts\Webdings.TTF"; BaseFont bfChinese3 = BaseFont.CreateFont(fontPath3, BaseFont.IDENTITY_V, BaseFont.EMBEDDED); List <BaseFont> FontFamily3 = new List <BaseFont>(); FontFamily3.Add(bfChinese3); AcroFields fields3 = stamper.AcroFields; fields3.SubstitutionFonts = FontFamily3; fields3.SetField("p6chkbox", ""); _GenQRCode(stamper, "QRcode", pageInfo.PTNNO); } stamper.FormFlattening = true; } using (var template_filled = new PdfReader(baos.ToArray())) { copy.AddPage(copy.GetImportedPage(template_filled, 1)); } } } // end : fill text in a PDF }
//2.2.1 //fill text to each PDF except group E letters__________________________________________________________________ 2.2.1 private void FillTextToPDF_CHN(string inputPDFFile, PdfSmartCopy copy, FPL1LTR pageInfo, string LtrSubGrp, string PtnCNY) { // Console.WriteLine("start chn " + pageInfo.LTRNO + " === " + DateTime.Now.ToString()); using (var baos = new MemoryStream()) //p1_inCHN_xxxxxx.PDF { //using (PdfReader templateReader = new PdfReader(outputPDFFile)) //source template PDF (chn version) d:\L1Letters\L1_Letters_chn_template.pdf using (PdfReader templateReader = new PdfReader(GlobalVar.wPATH() + inputPDFFile.Replace("inXXX_", "inCHN_"))) //input= "d:\L1Letters\" + "p1_inCHN_A1提款信_MO_1-18480_page18480_1.PDF" { using (PdfStamper stamper = new PdfStamper(templateReader, baos)) //convert inXXX_ to inCHN_ { //create a font family (細明體HKSCS + EUDC) string fontPath = @"d:\MINGLIU.TTC,2"; //path + @"\MINGLIU.TTC,2"; BaseFont bfChinese = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); string fontPath2 = @"d:\EUDC.TTF"; BaseFont bfChinese2 = BaseFont.CreateFont(fontPath2, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); List <BaseFont> FontFamily = new List <BaseFont>(); FontFamily.Add(bfChinese); FontFamily.Add(bfChinese2); AcroFields fields = stamper.AcroFields; fields.SubstitutionFonts = FontFamily; fields.GenerateAppearances = true; fields.SetField("cname", pageInfo.PTNCNA); stamper.AcroFields.SetFieldProperty("pname", "textsize", 0f, null); //font auto resize (0f) fields.SetField("pname", pageInfo.PTNNAM); fields.SetField("ltrno", pageInfo.LTRNO); fields.SetField("idno", pageInfo.PTNIDN.Substring(0, 4) + "XXXX"); fields.SetField("ofcdate", DateTime.Now.ToString("dd/MM/yyyy")); fields.SetField("ptnno", pageInfo.PTNNO); fields.SetField("idx", pageInfo.IDX.ToString()); fields.SetField("ltrgrp", pageInfo.LTRGRP); stamper.AcroFields.SetFieldProperty("addr1", "textsize", 0f, null); fields.SetField("addr1", pageInfo.ADDR1); if (pageInfo.ADDR2.Trim() == "") //向前移 (如空白, 分段地址向上移) { if (pageInfo.ADDR3.Trim() == "") { pageInfo.ADDR2 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } else { pageInfo.ADDR2 = pageInfo.ADDR3; pageInfo.ADDR3 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } } if (pageInfo.ADDR3.Trim() == "") //向前移 (如空白, 分段地址向上移) { pageInfo.ADDR3 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } stamper.AcroFields.SetFieldProperty("addr2", "textsize", 0f, null); fields.SetField("addr2", pageInfo.ADDR2.Trim()); stamper.AcroFields.SetFieldProperty("addr3", "textsize", 0f, null); fields.SetField("addr3", pageInfo.ADDR3.Trim()); fields.SetField("addr4", pageInfo.ADDR4); if (pageInfo.LTRGRP.Trim() == "D") //3.3 政府管理子帳戶結餘, 3.4 提取款項原因 { fields.SetField("p1balance", "可提取的款項為澳門幣" + String.Format("{0:#,#00.00}", pageInfo.TXNBAL) + "(已包括" + DateTime.Now.Year.ToString() + "年度的款項)"); stamper.AcroFields.SetFieldProperty("p2age", "textsize", 0f, null); //font auto resize (0f) fields.SetField("p2age", "未滿65歲,正收取社會保障基金殘疾金超過一年或社會工作局特別殘疾津貼"); } else { fields.SetField("p1balance", "結餘為澳門幣" + String.Format("{0:#,#00.00}", pageInfo.TXNBAL) + "(已包括" + DateTime.Now.Year.ToString() + "年度的款項)"); fields.SetField("p2age", "已年滿65歲"); } if (pageInfo.LTRGRP.Trim() == "C") //3.5 款項發放 { fields.SetField("p4bank1", "存入本人澳門幣銀行帳號__________銀行名稱_______"); //全型underline fields.SetField("p4bank2", "(須附同澳門居民身份證影印本及銀行帳號影印本)"); fields.SetField("p4bank3", ""); } else { fields.SetField("p4bank1", "款項將按以下順序存入申請人的銀行帳戶:1.收取社會保障基金養老金或"); fields.SetField("p4bank2", "殘疾金的銀行帳戶、2.收取社會工作局敬老金的銀行帳戶、3.收取社會工"); fields.SetField("p4bank3", "作局特別殘疾津貼的銀行帳戶。"); } if (pageInfo.LTRGRP.Trim() == "A") { fields.SetField("p6point", "6."); fields.SetField("p6label", "自動提款登記:"); fields.SetField("p6auto1", "同意參與《自動提款登記》(詳見自動提款登記指南),並知悉自登"); fields.SetField("p6auto2", "記翌年起在符合條件的年度可無需辦理提款申請,相關年度的分配款"); fields.SetField("p6auto3", "項將發放至上述的銀行帳戶。"); string fontPath3 = @"c:\windows\fonts\Webdings.TTF"; BaseFont bfChinese3 = BaseFont.CreateFont(fontPath3, BaseFont.IDENTITY_V, BaseFont.EMBEDDED); List <BaseFont> FontFamily3 = new List <BaseFont>(); FontFamily3.Add(bfChinese3); AcroFields fields3 = stamper.AcroFields; fields3.SubstitutionFonts = FontFamily3; fields3.SetField("p6chkbox", ""); _GenQRCode(stamper, "QRcode", pageInfo.PTNNO); } stamper.FormFlattening = true; } using (var template_filled = new PdfReader(baos.ToArray())) { copy.AddPage(copy.GetImportedPage(template_filled, 1)); } } } // end : fill text in a PDF //Console.WriteLine("end chn " + pageInfo.LTRNO + " === " + DateTime.Now.ToString()); }
public static void GenerateDeck(Guid deckGuid, bool generateMissingCards, bool singleDoc = true) { var jsonFile = Repository.GetDeckJsonFile(deckGuid); if (!File.Exists(jsonFile)) { return; } var deck = JsonConvert.DeserializeObject <Deck>(File.ReadAllText(jsonFile)); using (FileStream zipToOpen = new FileStream(Repository.GetDeckZipFile(deckGuid), FileMode.Create)) { using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create)) { var licfiles = Directory.GetFiles(Repository.LicPath); foreach (var licfile in licfiles) { var licName = Path.GetFileName(licfile); archive.CreateEntryFromFile(licfile, licName); } foreach (var deckCard in deck.DeckCards) { var cardPdf = Repository.GetPdfFile(deckCard.Card.Guid); if (!File.Exists(cardPdf)) { if (generateMissingCards) { CardGenerator.CreatePngJob(deckCard.Card.Guid, deckCard.Card.Faction.Name, deckCard.Card.Type.Name); } else { continue; } } if (!singleDoc) { var entryName = SanitizeName(deckCard.Card.Name); for (var i = 0; i < deckCard.Quantity; i++) { archive.CreateEntryFromFile(cardPdf, $"{entryName}_{i + 1}.pdf"); } } } var cardBackPdfFile = Repository.GetBackPdfFile(); if (!File.Exists(cardBackPdfFile)) { if (generateMissingCards) { CardGenerator.CreateBackPdfJob(); } } if (!singleDoc) { if (File.Exists(cardBackPdfFile)) { archive.CreateEntryFromFile(cardBackPdfFile, $"back.pdf"); } } var deckFormatFile = Repository.GetDeckFormatFile(deckGuid); if (File.Exists(deckFormatFile)) { archive.CreateEntryFromFile(deckFormatFile, $"deck.txt"); } if (singleDoc) { var deckpdf = Repository.GetDeckFile(deck.Guid); using (FileStream stream = new FileStream(deckpdf, FileMode.Create)) { using (Document pdfDoc = new Document()) { pdfDoc.AddAuthor($"{deck.Creator.Name}"); pdfDoc.AddCreator($"{deck.Creator.Name} - wtactics.org"); pdfDoc.AddTitle($"{deck.Name} - wtactics.org"); PdfCopy pdf = new PdfSmartCopy(pdfDoc, stream); pdfDoc.Open(); foreach (var deckCard in deck.DeckCards) { var cardPdf = Repository.GetPdfFile(deckCard.Card.Guid); using (var reader = new PdfReader(cardPdf)) { for (var i = 0; i < deckCard.Quantity; i++) { pdf.AddPage(pdf.GetImportedPage(reader, 1)); } } } using (var reader = new PdfReader(cardBackPdfFile)) { pdf.AddPage(pdf.GetImportedPage(reader, 1)); } } archive.CreateEntryFromFile(deckpdf, $"deck.pdf"); } } } } }
public static bool MergePdfs(string folderInput, string mergePdfName, ref List <ColumbusIndex> documentsToMerge) { using (FileStream stream = new FileStream(mergePdfName, FileMode.Create)) { var totalDocs = 0; PdfReader reader = null; Document document = new Document(); PdfSmartCopy pdf = new PdfSmartCopy(document, stream); List <ColumbusIndex> tempList = new List <ColumbusIndex>(); try { document.Open(); foreach (var doc in documentsToMerge) { tempList.Add(doc); if (totalDocs > 0) { if (documentsToMerge[totalDocs - 1].PdfTempData != null) { documentsToMerge[totalDocs - 1].PdfTempData = null; //Release from memory } } totalDocs++; try { if (doc.PdfTempData == null) { doc.PdfTempData = File.ReadAllBytes(Path.Combine(folderInput, doc.FileName)); } reader = new PdfReader(doc.PdfTempData); doc.Pages = reader.NumberOfPages; if (doc.Pages == 0) { throw new Exception("Do not allow documents with zero pages"); } for (int i = 1; i <= doc.Pages; i++) { //import the page from source pdf var copiedPage = pdf.GetImportedPage(reader, i); // add the page to the new document if (pdf != null) { pdf.AddPage(copiedPage); } } if (pdf != null && reader != null) { pdf.FreeReader(reader); pdf.Flush(); } if (reader != null) { reader.Close(); } long fileSize = new FileInfo(mergePdfName).Length; long columbusPDFMaxSize = Convert.ToInt64(ConfigurationManager.AppSettings["ColumbusPDFMaxSize"]); if (fileSize > columbusPDFMaxSize) //If file size is bigger than 200mb, start a new file { GenerateControlFile(mergePdfName, tempList); documentsToMerge = documentsToMerge.Except(tempList).ToList(); return(true); } } catch (Exception ex1) { doc.FileMissing = true; throw new ProcessingException("COMBINE PDF: [" + Path.Combine(folderInput, doc.FileName) + "] " + ex1.Message + " : " + ex1.StackTrace); } } //Generate control file for last merged PDF GenerateControlFile(mergePdfName, tempList); documentsToMerge = documentsToMerge.Except(tempList).ToList(); return(true); } catch (Exception ex) { Log.Error(string.Format("Failed to merge files in {0} to {1}. ex: {2}", folderInput, mergePdfName, ex)); if (reader != null) { reader.Close(); } return(false); } finally { if (document != null) { document.Close(); } } } }
//2.4.1 //fill text to each PDF withgroup E letters_____________________________________________________________________ E.2 private void FillTextToPDF_E(string inputPDFFile, PdfSmartCopy copy, FPL1LTR pageInfo, string LtrSubGrp, string PtnCNY) { using (var baos = new MemoryStream()) { using (PdfReader templateReader = new PdfReader(GlobalVar.wPATH() + inputPDFFile)) //source template PDF (group E only) d:\L1Letters\E_Letters_template.pdf { using (PdfStamper stamper = new PdfStamper(templateReader, baos)) { //create a font family (細明體HKSCS + EUDC) string fontPath = @"d:\MINGLIU.TTC,2"; //path + @"\MINGLIU.TTC,2"; BaseFont bfChinese = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); string fontPath2 = @"d:\EUDC.TTF"; BaseFont bfChinese2 = BaseFont.CreateFont(fontPath2, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); List <BaseFont> FontFamily = new List <BaseFont>(); FontFamily.Add(bfChinese); FontFamily.Add(bfChinese2); AcroFields fields = stamper.AcroFields; fields.SubstitutionFonts = FontFamily; fields.GenerateAppearances = true; fields.SetField("cname", pageInfo.PTNCNA); stamper.AcroFields.SetFieldProperty("pname", "textsize", 0f, null); //font auto resize (0f) fields.SetField("pname", pageInfo.PTNNAM); fields.SetField("ltrno", pageInfo.LTRNO); fields.SetField("idno", pageInfo.PTNIDN.Substring(0, 4) + "XXXX"); fields.SetField("ofcdate", DateTime.Now.ToString("dd/MM/yyyy")); fields.SetField("ptnno", pageInfo.PTNNO); fields.SetField("ptnnoidx", pageInfo.PTNNO.Trim() + "/" + pageInfo.IDX.ToString().Trim()); fields.SetField("barcode", pageInfo.PTNNO + "-" + pageInfo.LTRNO); stamper.AcroFields.SetFieldProperty("addr1", "textsize", 0f, null); fields.SetField("addr1", pageInfo.ADDR1); if (pageInfo.ADDR2.Trim() == "") //向前移 (如空白, 分段地址向上移) { if (pageInfo.ADDR3.Trim() == "") { pageInfo.ADDR2 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } else { pageInfo.ADDR2 = pageInfo.ADDR3; pageInfo.ADDR3 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } } if (pageInfo.ADDR3.Trim() == "") //向前移 (如空白, 分段地址向上移) { pageInfo.ADDR3 = pageInfo.ADDR4; pageInfo.ADDR4 = ""; } stamper.AcroFields.SetFieldProperty("addr2", "textsize", 0f, null); fields.SetField("addr2", pageInfo.ADDR2.Trim()); stamper.AcroFields.SetFieldProperty("addr3", "textsize", 0f, null); fields.SetField("addr3", pageInfo.ADDR3.Trim()); fields.SetField("addr4", pageInfo.ADDR4); //_GenQRCode(stamper, "QRcode", pageInfo.PTNNO); //E-Letters don't need QRcode! Requested by Elyse on 17/7/2019 stamper.FormFlattening = true; } using (var template_filled = new PdfReader(baos.ToArray())) { copy.AddPage(copy.GetImportedPage(template_filled, 1)); } } } // end : fill text in a PDF (group E only) }
public bool Split(Stream os, long sizeInBytes) { if (!HasMorePages()) { os.Close(); return false; } overSized = false; Document document = new Document(); PdfCopy copy = new PdfSmartCopy(document, os); document.Open(); bool hasPage = false; PdfResourceCounter counter = new PdfResourceCounter(reader.Trailer); long trailer = counter.GetLength(null); IDictionary<int, PdfObject> resources = counter.Resources; long length = 0; long page; while (HasMorePages()) { counter = new PdfResourceCounter(reader.GetPageN(currentPage)); page = counter.GetLength(resources); resources = counter.Resources; length += page + trailer + XrefLength(resources.Count); LOGGER.Info(String.Format("Page {0}: Comparing {1} with {2}", currentPage, length, sizeInBytes)); LOGGER.Info(String.Format(" page {0} trailer {1} xref {2}", page, trailer, XrefLength(resources.Count))); if (!hasPage || length < sizeInBytes) { hasPage = true; copy.AddPage(copy.GetImportedPage(reader, currentPage)); length = copy.Os.Counter; LOGGER.Info(String.Format("Size after adding page: {0}", length)); if (length > sizeInBytes) overSized = true; currentPage++; } else { LOGGER.Info("Page doesn't fit"); break; } } document.Close(); return true; }