public byte[] PrintSignToPDF_MemoriaAllPages_TextSharp(Stream File, String Firma, String Firmante) { MemoryStream outputPdfStream = new MemoryStream(); PdfDocument document = PdfDocument.FromStream(File); document.SerialNumber = "s/va4uPX-1f/a0cHS-wcqFnYOT-gpOHk4qL-h5OAgp2C-gZ2KioqK"; PdfFont pdfFont = document.CreateStandardFont(PdfStandardFont.Helvetica); byte[] pdfBuffer = document.WriteToMemory(); var reader = new iTextSharp.text.pdf.PdfReader(pdfBuffer); var stamper = new iTextSharp.text.pdf.PdfStamper(reader, outputPdfStream); iTextSharp.text.pdf.PdfContentByte pdfContentByte2; iTextSharp.text.Rectangle pageSize; int NumOfPages = document.Pages.Count; for (int j = 1; j <= NumOfPages; j++) { pdfContentByte2 = stamper.GetOverContent(j); pageSize = reader.GetPageSizeWithRotation(j); pdfContentByte2.BeginText(); //Firma = String.Format("{0} {1}", Firma, Firmante); string[] arrays = Firma.Split(' '); //iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA, Encoding.ASCII.EncodingName, true, true); iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont("c:/windows/fonts/arial.ttf", iTextSharp.text.pdf.BaseFont.IDENTITY_H, true, true); pdfContentByte2.SetFontAndSize(baseFont, 8); //pdfContentByte2.SetRGBColorFill(192, 192, 192); pdfContentByte2.SetRGBColorFill(0, 0, 0); StringBuilder bloqueFirma = new StringBuilder(); int contador = 0; int saltoLineaPixeles = 0; for (int i = 0; i < arrays.Length; i++) { bloqueFirma.Append(arrays[i]); bloqueFirma.Append(" "); contador++; if ((contador == 35) || ((saltoLineaPixeles > 13) && (contador == 36))) { pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, bloqueFirma.ToString(), pageSize.Width - (pageSize.Width / 2) - 100, (pageSize.Height / 5) - saltoLineaPixeles - 100, 0); contador = 0; bloqueFirma = new StringBuilder(); saltoLineaPixeles = saltoLineaPixeles + 10; } else if ((i + 1) == arrays.Length) { pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, bloqueFirma.ToString(), pageSize.Width - (pageSize.Width / 2) - 100, (pageSize.Height / 5) - saltoLineaPixeles - 100, 0); saltoLineaPixeles = saltoLineaPixeles + 10; } } String[] datos = Firmante.Split('['); String Firmante_ = datos[0]; String pagina = datos[1]; //Firmante_ = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(Firmante_))); pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, Firmante_.ToString(), pageSize.Width - (pageSize.Width / 2) - 100, (pageSize.Height / 5) - saltoLineaPixeles - 100, 0); saltoLineaPixeles = saltoLineaPixeles + 10; pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, pagina.ToString(), pageSize.Width - (pageSize.Width / 2) - 100, (pageSize.Height / 5) - saltoLineaPixeles - 100, 0); pdfContentByte2.EndText(); } stamper.Close(); outputPdfStream.Close(); outputPdfStream.Dispose(); document.Close(); return outputPdfStream.GetBuffer(); }
static private string WriteCompatiblePdf(string sFilename) { // string s = System.IO.Path.GetTempPath(); string sNewPdf = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".pdf"; sNewPdfs.Add(sNewPdf); iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sFilename); // we retrieve the total number of pages int n = reader.NumberOfPages; // step 1: creation of a document-object iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(sNewPdf, FileMode.Create)); //write pdf that pdfsharp can understand writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4); // step 3: we open the document document.Open(); iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; iTextSharp.text.pdf.PdfImportedPage page; int rotation; int i = 0; while (i < n) { i++; document.SetPageSize(reader.GetPageSizeWithRotation(i)); document.NewPage(); page = writer.GetImportedPage(reader, i); rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } // step 5: we close the document document.Close(); return(sNewPdf); }
private System.IO.MemoryStream reorderSaddleStitchBrief(System.IO.MemoryStream orig_stream) { System.IO.MemoryStream dest_stream = null; try { dest_stream = new System.IO.MemoryStream(); var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray()); var order = new SaddleStitchPageOrder(reader.NumberOfPages); reader.SelectPages(order.PageOrder); var pdfdoc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); var pdfcopy_provider = new iTextSharp.text.pdf.PdfCopy(pdfdoc, dest_stream); pdfdoc.Open(); iTextSharp.text.pdf.PdfImportedPage importedPage; for (int i = 1; i <= reader.NumberOfPages; i++) { importedPage = pdfcopy_provider.GetImportedPage(reader, i); pdfcopy_provider.AddPage(importedPage); } pdfdoc.Close(); reader.Close(); } catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); } return(dest_stream); }
private System.IO.MemoryStream addBlankPages(System.IO.MemoryStream orig_stream, int num_to_add = 1) { if (num_to_add == 0) { return(orig_stream); } System.IO.MemoryStream dest_stream = null; try { dest_stream = new System.IO.MemoryStream(); var reader = new iTextSharp.text.pdf.PdfReader(orig_stream.ToArray()); var stamper = new iTextSharp.text.pdf.PdfStamper(reader, dest_stream); for (var i = 1; i <= num_to_add; i++) { stamper.InsertPage(reader.NumberOfPages + 1, reader.GetPageSizeWithRotation(1)); } stamper.Close(); reader.Close(); } catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); } return(dest_stream); }
/// <summary> /// from http://forum.pdfsharp.net/viewtopic.php?p=2069 /// uses itextsharp to convert any pdf to 1.4 compatible pdf /// </summary> static private string WritePdf1pt4Version(string inputPath) { var tempFileName = Path.GetTempFileName(); File.Delete(tempFileName); string outputPath = tempFileName + ".pdf"; iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(inputPath); // we retrieve the total number of pages int n = reader.NumberOfPages; // step 1: creation of a document-object iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(outputPath, FileMode.Create)); //write pdf that pdfsharp can understand writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4); // step 3: we open the document document.Open(); iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; iTextSharp.text.pdf.PdfImportedPage page; int rotation; int i = 0; while (i < n) { i++; document.SetPageSize(reader.GetPageSizeWithRotation(i)); document.NewPage(); page = writer.GetImportedPage(reader, i); rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } // step 5: we close the document document.Close(); return(outputPath); }
public void ExtractPage(string sourcePdfPath, string outputPdfPath, int pageNumber, int pageend) { iTextSharp.text.pdf.PdfReader reader = null; iTextSharp.text.Document document = null; iTextSharp.text.pdf.PdfCopy pdfCopyProvider = null; iTextSharp.text.pdf.PdfImportedPage importedPage = null; try { // Intialize a new PdfReader instance with the contents of the source Pdf file: reader = new iTextSharp.text.pdf.PdfReader(sourcePdfPath); // Capture the correct size and orientation for the page: document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(pageNumber)); // Initialize an instance of the PdfCopyClass with the source // document and an output file stream: pdfCopyProvider = new iTextSharp.text.pdf.PdfCopy(document, new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create)); document.Open(); // Extract the desired page number: if (pageNumber == pageend) { importedPage = pdfCopyProvider.GetImportedPage(reader, pageNumber + 1); pdfCopyProvider.AddPage(importedPage); } else { for (int i = pageNumber; i <= pageend; i++) { importedPage = pdfCopyProvider.GetImportedPage(reader, i + 1); pdfCopyProvider.AddPage(importedPage); } } document.Close(); reader.Close(); } catch (Exception ex) { _arCommonService.CreateErrorLog(ex.Message, ex.StackTrace); } }
public static bool AddBlankPage(string src) { string dest = (System.IO.Path.GetDirectoryName(src) + @"\temp " + DateTime.Now.ToString("ddMMyyyyhhmmssffff")); try { using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create)) { iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src); iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, stream); stamper.InsertPage(reader.NumberOfPages + 1, reader.GetPageSizeWithRotation(1)); stamper.Close(); reader.Close(); } System.IO.File.Delete(src); System.IO.File.Move(dest, src); return(true); } catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); } }
Page[] IExtractDocument.GetBlocks(byte[] contents) { List <Page> lstPages = new List <Page>(); using (iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(contents)) { int numOfPages = reader.NumberOfPages; for (int page = 1; page <= numOfPages; page++) { iTextSharp.text.Rectangle r = reader.GetPageSizeWithRotation(page); var pg = new Page(); pg.Width = r.Width; pg.Height = r.Height; lstPages.Add(pg); var strat = new CustomLocationStrategy(); iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, page, strat); pg.Blocks = strat.Blocks.ToArray(); } } return(lstPages.ToArray()); }
private void SaveFile(int desde) { if (CDPSession.Current.File == null) { return; } var pageCount = GetPageCount(); var currentPage = 1; CDPSession.Current.File.InputStream.Position = 0; using (var ms = new MemoryStream()) { CDPSession.Current.File.InputStream.CopyTo(ms); var reader = new iTextSharp.text.pdf.PdfReader(ms.ToArray()); for (var i = 1; i <= pageCount; i++) { var newFile = string.Format("{0}{1}.pdf", _folder, desde); var doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(currentPage)); var pdfCpy = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(newFile, System.IO.FileMode.Create)); doc.Open(); for (var j = 1; j <= 4; j++) { iTextSharp.text.pdf.PdfImportedPage page = pdfCpy.GetImportedPage(reader, currentPage); //pdfCpy.SetFullCompression(); pdfCpy.AddPage(page); currentPage += 1; } desde++; doc.Close(); pdfCpy.Close(); } reader.Close(); } }
public void MergePdf(string[] pdfFiles, string outputPath) { int pdfCount = 0; int f = 0; string filename = String.Empty; iTextSharp.text.pdf.PdfReader reader = null; int pageCount = 0; iTextSharp.text.Document pdfDoc = null; iTextSharp.text.pdf.PdfWriter writer = null; iTextSharp.text.pdf.PdfContentByte cb = null; iTextSharp.text.pdf.PdfImportedPage page = null; int rotation = 0; iTextSharp.text.Font bookmarkFont = iTextSharp.text.FontFactory.GetFont(iTextSharp.text.FontFactory.HELVETICA, 4, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.RED); try { pdfCount = pdfFiles.Length; if (pdfCount > 1) { filename = pdfFiles[f]; reader = new iTextSharp.text.pdf.PdfReader(filename); pageCount = reader.NumberOfPages; pdfDoc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18); writer = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, new System.IO.FileStream(outputPath, System.IO.FileMode.Create)); pdfDoc.AddAuthor("OPGK w Lublinie sp. z o. o. Sławomir Aleksak"); pdfDoc.AddCreator("Konwerter"); pdfDoc.Open(); cb = writer.DirectContent; while (f < pdfCount) { var i = 0; while (i < pageCount) { i += 1; pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i)); pdfDoc.NewPage(); if (i == 1) { iTextSharp.text.Paragraph para = new iTextSharp.text.Paragraph(System.IO.Path.GetFileName(filename).ToUpper(), bookmarkFont); iTextSharp.text.Chapter chpter = new iTextSharp.text.Chapter(para, f + 1); pdfDoc.Add(chpter); } page = writer.GetImportedPage(reader, i); rotation = reader.GetPageRotation(i); if (rotation == 90) { cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height); } if (rotation == 270) { cb.AddTemplate(page, 0, 1.0F, -1.0F, 0, reader.GetPageSizeWithRotation(i).Width + 60, -30); } else { cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0); } } f += 1; if (f < pdfCount) { filename = pdfFiles[f]; reader = new iTextSharp.text.pdf.PdfReader(filename); pageCount = reader.NumberOfPages; } } pdfDoc.Close(); } } catch (Exception ex) { throw ex; } }
public void splitPdfByPages(String sourcePdf, int numOfPages, string baseNameOutPdf) { int pageCount = 0; string path = Path.GetFullPath(sourcePdf); string separtator = "_"; string extension = ".pdf"; try { raf = new iTextSharp.text.pdf.RandomAccessFileOrArray(sourcePdf); reader = new iTextSharp.text.pdf.PdfReader(raf, null); pageCount = reader.NumberOfPages; if (pageCount < numOfPages) { MessageBox.Show("Nie ma co dzielić"); } else { string counter; string ext = System.IO.Path.GetExtension(baseNameOutPdf); string outfile = string.Empty; double m = pageCount / numOfPages; int n = (int)Math.Ceiling(m); int currentPage = 1; string thename = Path.GetFileNameWithoutExtension(sourcePdf); string name = Path.GetFileName(sourcePdf); for (int i = 1; i <= pageCount; i++) { if (i < 10) { counter = "00"; } else { counter = "0"; } outfile = path.Replace(name, "") + thename + separtator + counter + i + extension; doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(currentPage)); pdfCpy = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(outfile, System.IO.FileMode.Create)); doc.Open(); if (i < n) { for (int j = 1; j <= numOfPages; j++) { page = pdfCpy.GetImportedPage(reader, currentPage); pdfCpy.AddPage(page); currentPage += 1; } } else { for (int j = currentPage; j <= pageCount; j++) { page = pdfCpy.GetImportedPage(reader, j); pdfCpy.AddPage(page); } } doc.Close(); Console.Beep(); } } reader.Close(); } catch (Exception ex) { throw ex; } }
public byte[] PrintSignToPDF_TextSharp(Stream File, String Firma, String Firmante) { MemoryStream outputPdfStream = new MemoryStream(); PdfDocument document = PdfDocument.FromStream(File); document.SerialNumber = "s/va4uPX-1f/a0cHS-wcqFnYOT-gpOHk4qL-h5OAgp2C-gZ2KioqK"; PdfFont pdfFont = document.CreateStandardFont(PdfStandardFont.Helvetica); byte[] pdfBuffer = document.WriteToMemory(); var reader = new iTextSharp.text.pdf.PdfReader(pdfBuffer); var stamper = new iTextSharp.text.pdf.PdfStamper(reader, outputPdfStream); iTextSharp.text.pdf.PdfContentByte pdfContentByte2; iTextSharp.text.Rectangle pageSize; try { pdfContentByte2 = stamper.GetOverContent(1); pageSize = reader.GetPageSizeWithRotation(1); pdfContentByte2.BeginText(); } catch { pdfContentByte2 = stamper.GetOverContent(2);//PafinaFirma = 2 pageSize = reader.GetPageSizeWithRotation(1); pdfContentByte2.BeginText(); } //Firma = String.Format("{0} {1}", Firma, Firmante); string[] arrays = Firma.Split(' '); //iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.HELVETICA_BOLD, Encoding.ASCII.EncodingName, false); iTextSharp.text.pdf.BaseFont baseFont = iTextSharp.text.pdf.BaseFont.CreateFont("c:/windows/fonts/arial.ttf", iTextSharp.text.pdf.BaseFont.IDENTITY_H, true); pdfContentByte2.SetFontAndSize(baseFont, 12); pdfContentByte2.SetRGBColorFill(0, 0, 0); StringBuilder bloqueFirma = new StringBuilder(); int contador = 0; int saltoLineaPixeles = 5; for (int i = 0; i < arrays.Length; i++) { bloqueFirma.Append(arrays[i]); bloqueFirma.Append(" "); contador++; if ((contador == 35) || ((saltoLineaPixeles > 13) && (contador == 36))) { pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, bloqueFirma.ToString(), pageSize.Width - (pageSize.Width / 5), (pageSize.Height / 3) - saltoLineaPixeles - 110, 0); contador = 0; bloqueFirma = new StringBuilder(); saltoLineaPixeles = saltoLineaPixeles + 20; } else if ((i + 1) == arrays.Length) { pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, bloqueFirma.ToString(), pageSize.Width - (pageSize.Width / 5), (pageSize.Height / 3) - saltoLineaPixeles - 110, 0); saltoLineaPixeles = saltoLineaPixeles + 20; } } pdfContentByte2.ShowTextAligned(iTextSharp.text.pdf.PdfContentByte.ALIGN_LEFT, Firmante.ToString(), pageSize.Width - (pageSize.Width / 5), (pageSize.Height / 3) - saltoLineaPixeles - 110, 0); pdfContentByte2.EndText(); stamper.Close(); outputPdfStream.Close(); outputPdfStream.Dispose(); document.Close(); return outputPdfStream.GetBuffer(); }
private static void MergeFiles(string destinationFile, string[] sourceFiles) { if (System.IO.File.Exists(destinationFile)) { System.IO.File.Delete(destinationFile); } string[] sSrcFile; sSrcFile = new string[sourceFiles.Count()]; string[] arr = new string[sourceFiles.Count()]; for (int i = 0; i <= sourceFiles.Length - 1; i++) { if (sourceFiles[i] != null) { if (sourceFiles[i].Trim() != "") { arr[i] = sourceFiles[i].ToString(); } } } if (arr != null) { sSrcFile = new string[sourceFiles.Count()]; for (int ic = 0; ic <= arr.Length - 1; ic++) { sSrcFile[ic] = arr[ic].ToString(); } } try { int f = 0; iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]); int n = reader.NumberOfPages; using (iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4)) { iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); document.Open(); iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; iTextSharp.text.pdf.PdfImportedPage page; int rotation; while (f < sSrcFile.Length) { int i = 0; while (i < n) { i++; document.SetPageSize(iTextSharp.text.PageSize.A4); document.NewPage(); page = writer.GetImportedPage(reader, i); rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } //Response.Write("\n Processed page " + i); } f++; if (f < sSrcFile.Length) { reader = new iTextSharp.text.pdf.PdfReader(sSrcFile[f]); n = reader.NumberOfPages; // Response.Write("There are " + n + " pages in the original file."); } } // Response.Write("Success"); document.Close(); } } catch (Exception e) { // Response.Write(e.Message); } }
public static bool SaddleStitch_ReorderPagesForLayout(string src) { string dest = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(src), "ss brief reordered.pdf"); try { using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create)) { iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src); SaddleStitchPageOrder order = new SaddleStitchPageOrder(reader.NumberOfPages); reader.SelectPages(order.PageOrder); iTextSharp.text.Document pdfdoc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); iTextSharp.text.pdf.PdfCopy pdfcopy_provider = new iTextSharp.text.pdf.PdfCopy(pdfdoc, stream); pdfdoc.Open(); iTextSharp.text.pdf.PdfImportedPage importedPage; for (int i = 1; i <= reader.NumberOfPages; i++) { importedPage = pdfcopy_provider.GetImportedPage(reader, i); pdfcopy_provider.AddPage(importedPage); } pdfdoc.Close(); reader.Close(); } System.IO.File.Delete(src); System.IO.File.Move(dest, src); return(true); } catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); } }
public static bool CombineBriefPages_AddingBlanks( List <CockleFilePdf> srcFiles, string src, TypeOfBindEnum bind) { // new attempt Dec 28, to account for divider pages (or any page without text) // text has to start on odd-numbered page, if followed by divider page // first, add 2 pages for each divider page, to account for front and back. // then, when everything is together, cycle through doc to add extra dividers... // ... so that text always falls on odd-numbered page // should work for both Saddle Stitch and Perfect Bind // create new list without cover, ordered by rank List <CockleFilePdf> files = new List <CockleFilePdf>( srcFiles .Where(f => f.FileType != SourceFileTypeEnum.Cover) .Where(f => f.FileType != SourceFileTypeEnum.InsideCv) .Where(f => f.FileType != SourceFileTypeEnum.SidewaysPage) .Where(f => f.FileType != SourceFileTypeEnum.Brief_Foldout) .Where(f => f.FileType != SourceFileTypeEnum.Brief_ZFold) .Where(f => f.FileType != SourceFileTypeEnum.App_Foldout) .Where(f => f.FileType != SourceFileTypeEnum.App_ZFold) .Where(f => f.FileType != SourceFileTypeEnum.Unrecognized) .OrderBy(f => f.Rank)); if (files.Count < 1) { return(false); } // what if files.Count == 1 ??? just return ??? int pageCount = 0; bool hasDividers = false; bool firstAppFileFound = false; int firstPageOfApp = -1; try { using (var stream = new System.IO.FileStream(src, System.IO.FileMode.Create)) { // initiate iTextSharp processes iTextSharp.text.Document pdfdoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER); iTextSharp.text.pdf.PdfCopy pdfcopy = new iTextSharp.text.pdf.PdfCopy(pdfdoc, stream); pdfdoc.Open(); // merge pdfs in folder CockleFilePdf f; for (int i = 0; i < files.Count; i++) { f = files[i]; // read file iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(f.FullName); int filePageCount = reader.NumberOfPages; // set up pdfstamper iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, stream); // look for divider pages here, add blank if exists List <int> divider_pages = new List <int>(); iTextSharp.text.pdf.parser.PdfReaderContentParser parser = new iTextSharp.text.pdf.parser.PdfReaderContentParser(reader); for (int j = 1; j <= reader.NumberOfPages; j++) { iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy extract = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); var extractedText = parser.ProcessContent(j, extract); string textFromPage = extractedText.GetResultantText(); int cnt = textFromPage.ToCharArray().Count(); int mch_cnt = System.Text.RegularExpressions.Regex.Matches(textFromPage, @"A(PPENDIX|ppendix)").Count; if (System.Text.RegularExpressions.Regex.Matches(textFromPage, @"\S").Count == 0) { // collect blank pages divider_pages.Add(j); } else if (cnt < 50 && mch_cnt > 0) { // collect other divider pages divider_pages.Add(j); } } if (divider_pages.Count > 0) { hasDividers = true; int k = 0; // adjust for total page number change foreach (int page in divider_pages) { stamper.InsertPage(page + k, reader.GetPageSizeWithRotation(1)); filePageCount = reader.NumberOfPages; k++; } } // add blank page if needed to make even number if (files[i].FileType == SourceFileTypeEnum.Index || files[i].FileType == SourceFileTypeEnum.Brief || files[i].FileType == SourceFileTypeEnum.App_Index || files[i].FileType == SourceFileTypeEnum.Motion || files[i].FileType == SourceFileTypeEnum.Divider_Page) { f.AssignNeedsBlankPage(files, reader.NumberOfPages); if (f.NeedsBlankPage) { //PdfStamper stamper2 = new PdfStamper(reader, stream); stamper.InsertPage(reader.NumberOfPages + 1, reader.GetPageSizeWithRotation(1)); filePageCount = reader.NumberOfPages; } } // with last document in 'files', add extra pages to make divisible by 4 if (bind == TypeOfBindEnum.SaddleStitch && i == files.Count - 1) { if (bind == TypeOfBindEnum.SaddleStitch && (pageCount + reader.NumberOfPages) % 4 != 0) { //PdfStamper stamper3 = new PdfStamper(reader, stream); while ((pageCount + reader.NumberOfPages) % 4 != 0) { stamper.InsertPage(reader.NumberOfPages + 1, reader.GetPageSizeWithRotation(1)); } } } // get first page of first app file if (!firstAppFileFound && files[i].FileType == SourceFileTypeEnum.App_File) { firstAppFileFound = true; firstPageOfApp = pageCount + 1; } // add document to 'src' pdfcopy.AddDocument(new iTextSharp.text.pdf.PdfReader(reader)); pageCount += reader.NumberOfPages; } pdfcopy.Close(); pdfdoc.CloseDocument(); } // final cycle, if dividers, to make sure text starts on odd-sided pages if (bind == TypeOfBindEnum.PerfectBind && hasDividers) { string dest = (System.IO.Path.GetDirectoryName(src) + @"\temp " + DateTime.Now.ToString("ddMMyyyyhhmmssffff")); using (var stream = new System.IO.FileStream(dest, System.IO.FileMode.Create)) { iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(src); iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, stream); // get all blank pages in appendix iTextSharp.text.pdf.parser.PdfReaderContentParser parser = new iTextSharp.text.pdf.parser.PdfReaderContentParser(reader); List <List <int> > groupsOfBlanks = new List <List <int> >(); List <int> group_list = new List <int>(); int x; for (x = firstPageOfApp; x <= reader.NumberOfPages; x++) { iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy extract = new iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy(); var extractedText = parser.ProcessContent(x, extract); string textFromPage = extractedText.GetResultantText(); // find blank pages and cluster into group_list if (System.Text.RegularExpressions.Regex.Matches(textFromPage, @"\S").Count == 0) { // capture blank page cluster (??? but what if only 1 page ???) if (group_list.Count == 0 || group_list.Contains(x - 1)) { group_list.Add(x); } } else { // find first page after cluster if (group_list.Count > 0) { if (group_list.Last() % 2 == 1) { // add blank page stamper.InsertPage(group_list.Last() + 1, reader.GetPageSizeWithRotation(1)); } } // clear list group_list.Clear(); } } stamper.Close(); reader.Close(); } System.IO.File.Delete(src); System.IO.File.Move(dest, src); } } catch (Exception excpt) { System.Diagnostics.Debug.WriteLine(excpt); return(false); } return(true); }
public static string PrintPDFResize(string fileNamePath) { Debug.Log("CashmaticApp", "PrintPDFResize"); string fileDirectory = Path.GetDirectoryName(fileNamePath); string fileName = Path.GetFileNameWithoutExtension(fileNamePath); string newFile = fileDirectory + "\\" + fileName + "_print.pdf"; try { // open the reader iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(fileNamePath); iTextSharp.text.Rectangle size = reader.GetPageSizeWithRotation(1); //Document document = new Document(size); iTextSharp.text.Document document = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(size.Width + 15, size.Height + Global.CardPaymentPrintPageSizeAddHeight)); // open the writer FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write); iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, fs); document.Open(); // the pdf content iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; if (Global.cardholderReceipt != "") { // select the font properties iTextSharp.text.pdf.BaseFont bf = iTextSharp.text.pdf.BaseFont.CreateFont(iTextSharp.text.pdf.BaseFont.COURIER_BOLD, iTextSharp.text.pdf.BaseFont.CP1252, iTextSharp.text.pdf.BaseFont.EMBEDDED); cb.SetColorFill(iTextSharp.text.BaseColor.BLACK); cb.SetFontAndSize(bf, 8); int StartAt = Global.CardPaymentPrintStartAt + Global.CardPaymentPrintPageSizeAddHeight; foreach (string line in Global.cardholderReceipt.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)) { // write the text in the pdf content cb.BeginText(); // put the alignment and coordinates here cb.ShowTextAligned(0, line, Global.CardPaymentPrintLeft, StartAt, 0); cb.EndText(); StartAt = StartAt - Global.CardPaymentPrintLineHeight; } } //// create the new page and add it to the pdf iTextSharp.text.pdf.PdfImportedPage page = writer.GetImportedPage(reader, 1); cb.AddTemplate(page, 10, +Global.CardPaymentPrintPageSizeAddHeight); // close the streams and voilá the file should be changed :) document.Close(); fs.Close(); writer.Close(); reader.Close(); } catch (Exception ex) { Debug.Log("CashmaticApp", ex.ToString()); } return(newFile); }