public static byte[] MergePdfs(IEnumerable<byte[]> inputFiles) { MemoryStream outputStream = new MemoryStream(); Document document = new Document(); PdfWriter writer = PdfWriter.GetInstance(document, outputStream); document.Open(); PdfContentByte content = writer.DirectContent; foreach (byte[] input in inputFiles) { PdfReader reader = new PdfReader(input); for (int i = 1; i <= reader.NumberOfPages; i++) { document.SetPageSize(reader.GetPageSizeWithRotation(i)); document.NewPage(); PdfImportedPage page = writer.GetImportedPage(reader, i); int rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) { content.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } } document.Close(); return outputStream.ToArray(); }
// --------------------------------------------------------------------------- public void Write(Stream stream) { // Use old example to create PDF MovieTemplates mt = new MovieTemplates(); byte[] pdf = Utility.PdfBytes(mt); using (ZipFile zip = new ZipFile()) { using (MemoryStream ms = new MemoryStream()) { // step 1 using (Document document = new Document()) { // step 2 PdfWriter writer = PdfWriter.GetInstance(document, ms); // step 3 document.Open(); // step 4 PdfPTable table = new PdfPTable(2); PdfReader reader = new PdfReader(pdf); int n = reader.NumberOfPages; PdfImportedPage page; for (int i = 1; i <= n; i++) { page = writer.GetImportedPage(reader, i); table.DefaultCell.Rotation = -reader.GetPageRotation(i); table.AddCell(Image.GetInstance(page)); } document.Add(table); } zip.AddEntry(RESULT, ms.ToArray()); } zip.AddEntry(Utility.ResultFileName(mt.ToString() + ".pdf"), pdf); zip.Save(stream); } }
public void AddPdf(string sInFilePath, ref iTextSharp.text.Document oPdfDoc, ref PdfWriter oPdfWriter) { iTextSharp.text.pdf.PdfContentByte oDirectContent = oPdfWriter.DirectContent; iTextSharp.text.pdf.PdfReader oPdfReader = new iTextSharp.text.pdf.PdfReader(sInFilePath); int iNumberOfPages = oPdfReader.NumberOfPages; int iPage = 0; while ((iPage < iNumberOfPages)) { iPage += 1; int iRotation = oPdfReader.GetPageRotation(iPage); iTextSharp.text.pdf.PdfImportedPage oPdfImportedPage = oPdfWriter.GetImportedPage(oPdfReader, iPage); oPdfDoc.SetPageSize(oPdfReader.GetPageSizeWithRotation(iPage)); oPdfDoc.NewPage(); if ((iRotation == 90) | (iRotation == 270)) { oDirectContent.AddTemplate(oPdfImportedPage, 0, -1f, 1f, 0, 0, oPdfReader.GetPageSizeWithRotation(iPage).Height); } else { oDirectContent.AddTemplate(oPdfImportedPage, 1f, 0, 0, 1f, 0, 0); } } }
// --------------------------------------------------------------------------- /** * Inspect a PDF file and write the info to a txt file * @param writer StringBuilder * @param pdf PDF file bytes * @param fileName PDF filename */ public static void Inspect(StringBuilder sb, byte[] pdf, string fileName) { PdfReader reader = new PdfReader(pdf); sb.Append(fileName); sb.Append(Environment.NewLine); sb.Append("Number of pages: "); sb.Append(reader.NumberOfPages); sb.Append(Environment.NewLine); Rectangle mediabox = reader.GetPageSize(1); sb.Append("Size of page 1: ["); sb.Append(mediabox.Left); sb.Append(','); sb.Append(mediabox.Bottom); sb.Append(','); sb.Append(mediabox.Right); sb.Append(','); sb.Append(mediabox.Top); sb.Append("]"); sb.Append(Environment.NewLine); sb.Append("Rotation of page 1: "); sb.Append(reader.GetPageRotation(1)); sb.Append(Environment.NewLine); sb.Append("Page size with rotation of page 1: "); sb.Append(reader.GetPageSizeWithRotation(1)); sb.Append(Environment.NewLine); sb.Append("Is rebuilt? "); sb.Append(reader.IsRebuilt().ToString()); sb.Append(Environment.NewLine); sb.Append("Is encrypted? "); sb.Append(reader.IsEncrypted().ToString()); sb.Append(Environment.NewLine); sb.Append(Environment.NewLine); }
public void AddFile(string fileName) { var reader = new PdfReader(fileName); for (var i = 1; i <= reader.NumberOfPages; i++) { var size = reader.GetPageSizeWithRotation(i); _document.SetPageSize(size); _document.NewPage(); var page = _writer.GetImportedPage(reader, i); var rotation = reader.GetPageRotation(i); switch (rotation) { case 90: _writer.DirectContent.AddTemplate(page, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(i).Height); break; // TODO case 180 case 270: _writer.DirectContent.AddTemplate(page, 0, 1, -1, 0, reader.GetPageSizeWithRotation(i).Width, 0); break; default: _writer.DirectContent.AddTemplate(page, 0, 0); break; } } reader.Close(); }
public string MergeMultiplePDFsToPDF(string[] fileList, string outMergeFile) { string returnStr = ""; try { int f = 0; // we create a reader for a certain document PdfReader reader = new PdfReader(fileList[f]); // we retrieve the total number of pages int n = reader.NumberOfPages; //There are " + n + " pages in the original file. // step 1: creation of a document-object Document document = new Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create)); // step 3: we open the document document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; // step 4: we add content while (f < fileList.Length) { 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); } //Processed page i } f++; if (f < fileList.Length) { reader = new PdfReader(fileList[f]); // we retrieve the total number of pages n = reader.NumberOfPages; //There are " + n + " pages in the original file. } } // step 5: we close the document document.Close(); returnStr = "Succeed!"; } catch (Exception e) { returnStr += e.Message + "<br />"; returnStr += e.StackTrace; } return returnStr; }
void CreatePdf(string input_path, IList<int> pages, string output_path) { // open a reader for the source file PdfReader reader = new PdfReader(input_path); try { reader.RemoveUnusedObjects(); // get output file using (var fs = new FileStream(output_path, FileMode.Create, FileAccess.Write)) { // create input document var input_doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(pages[0])); // create the writer PdfWriter writer = PdfWriter.GetInstance(input_doc, fs); try { writer.SetFullCompression(); input_doc.Open(); try { // for each page copy the page directly from the reader into the writer PdfContentByte cb = writer.DirectContent; foreach (int page_number in pages) { input_doc.SetPageSize(reader.GetPageSizeWithRotation(page_number)); input_doc.NewPage(); PdfImportedPage page = writer.GetImportedPage(reader, page_number); int rotation = reader.GetPageRotation(page_number); if (rotation == 90 || rotation == 270) cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(page_number).Height); else cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } finally { input_doc.Close(); } } finally { writer.Close(); } } } finally { reader.Close(); } }
public void ExtractPages(string inputFile, string outputFile, List<int> extractPages, System.Windows.Forms.ProgressBar progres) { if (inputFile == outputFile) { System.Windows.Forms.MessageBox.Show("Nie możesz użyć pliku wejściowego jako wyjściowego do zapisu."); } PdfReader inputPDF = new PdfReader(inputFile); Document doc = new Document(); PdfReader reader = new PdfReader(inputFile); progres.Maximum = reader.NumberOfPages; using (MemoryStream memoryStream = new MemoryStream()) { PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream); doc.Open(); doc.AddDocListener(writer); for (int i = 1; i <= reader.NumberOfPages; i++) { progres.Value = i; if (extractPages.FindIndex(s => s == i) == -1) continue; doc.SetPageSize(reader.GetPageSize(i)); doc.NewPage(); PdfContentByte cb = writer.DirectContent; PdfImportedPage pageImport = writer.GetImportedPage(reader, i); int rot = reader.GetPageRotation(i); if (rot == 90 || rot == 270) { cb.AddTemplate(pageImport, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { cb.AddTemplate(pageImport, 1.0F, 0, 0, 1.0F, 0, 0); } } reader.Close(); doc.Close(); try { File.WriteAllBytes(outputFile, memoryStream.ToArray()); } catch { throw new Exception("Błąd przy próbie zapisu do pliku. Upewnij się iż żaden inny proces obecnie go nie używa."); } } }
public string AddText(string PathSource, string PathTarget, int x, int y, int selectedPage, String text, int angle, int red, int green, int blue, int fontSize, float opacity) { try { iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(PathSource); int n = reader.NumberOfPages; if (!(selectedPage > 0 && selectedPage <= n)) { return(String.Format("Invalid Page {0}, the PDF has {1} pages", selectedPage, n)); } iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(PathTarget, System.IO.FileMode.Create)); document.Open(); iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; iTextSharp.text.pdf.PdfImportedPage page; int rotation; int i = 0; // step 4: we add content while (i < n) { 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); } if (i == selectedPage) { InsertText(cb, fontSize, x, y, text, angle, red, green, blue, opacity); } } document.Close(); return(""); } catch (Exception e) { return(e.Message); } }
public string SetSize(string sourceFile, string pSize, string targetPath) { try { string file = GetFullPath(sourceFile); iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(file); int n = reader.NumberOfPages; Rectangle pageSize = PageSize.GetRectangle(pSize); iTextSharp.text.Document document = new iTextSharp.text.Document(pageSize); iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(GetFullPath(targetPath), System.IO.FileMode.Create)); document.Open(); iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; iTextSharp.text.pdf.PdfImportedPage page; int rotation; int i = 0; reader = new iTextSharp.text.pdf.PdfReader(file); n = reader.NumberOfPages; while (i < n) { i++; document.SetPageSize(pageSize); document.NewPage(); page = writer.GetImportedPage(reader, i); rotation = reader.GetPageRotation(i); if (rotation == 90) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else if ((rotation == 270)) { cb.AddTemplate(page, 0f, 1f, -1f, 0f, reader.GetPageSizeWithRotation(i).Width, 0f); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } document.Close(); return(""); } catch (Exception e) { return(e.Message); } }
// --------------------------------------------------------------------------- /** * Manipulates a PDF file src * @param src the original PDF */ public byte[] ManipulatePdf(byte[] src) { PdfReader reader = new PdfReader(src); int n = reader.NumberOfPages; int rot; PdfDictionary pageDict; for (int i = 1; i <= n; i++) { rot = reader.GetPageRotation(i); pageDict = reader.GetPageN(i); pageDict.Put(PdfName.ROTATE, new PdfNumber(rot + 90)); } using (MemoryStream ms = new MemoryStream()) { using (PdfStamper stamper = new PdfStamper(reader, ms)) { } return ms.ToArray(); } }
// based on http://itextsharp.sourceforge.net/examples/Encrypt.cs public string ModifyPermissions(string PathSource, string PathTarget, string UserPassword, List <int> Permissons) { try { int PDFpermisson = 0; foreach (int permisson in Permissons) { PDFpermisson = PDFpermisson | permisson; } iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(PathSource); int n = reader.NumberOfPages; iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(PathTarget, System.IO.FileMode.Create)); writer.SetEncryption(iTextSharp.text.pdf.PdfWriter.STRENGTH128BITS, UserPassword, null, (int)PDFpermisson); // 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; // step 4: we add content 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); } } document.Close(); return(""); } catch (Exception e) { return(e.Message); } }
public static void MergeFiles(string destinationFile, List<string> files, bool removeMergedFiles) { try { var f = 0; var reader = new PdfReader(files.First()); var numberOfPages = reader.NumberOfPages; var document = new Document(reader.GetPageSizeWithRotation(1)); var writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); document.Open(); var content = writer.DirectContent; while (f < files.Count) { var i = 0; while (i < numberOfPages) { i++; document.SetPageSize(reader.GetPageSizeWithRotation(i)); document.NewPage(); var page = writer.GetImportedPage(reader, i); var rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) content.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); else content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } f++; if (f < files.Count) { reader = new PdfReader(files[f]); numberOfPages = reader.NumberOfPages; } } document.Close(); if (removeMergedFiles) { DeleteMergedFiles(files); } } catch (Exception e) { var strOb = e.Message; } }
public PdfRasterizer(string inputPdfPath, int pointsPerInch) { _pointsPerInch = pointsPerInch; // Extract info from pdf using iTextSharp try { using (Stream newpdfStream = new FileStream(inputPdfPath, FileMode.Open, FileAccess.Read)) { using (PdfReader pdfReader = new PdfReader(newpdfStream)) { int numPagesToUse = pdfReader.NumberOfPages; for (int pageNum = 1; pageNum <= numPagesToUse; pageNum++) { iTextSharp.text.Rectangle pageRect = pdfReader.GetPageSize(pageNum); _pageSizes.Add(pageRect); int pageRot = pdfReader.GetPageRotation(pageNum); _pageRotationInfo.Add(pageRot); } } } } catch (Exception excp) { logger.Error("Cannot open PDF with iTextSharp {0} excp {1}", inputPdfPath, excp.Message); } _lastInstalledVersion = GhostscriptVersionInfo.GetLastInstalledVersion( GhostscriptLicense.GPL | GhostscriptLicense.AFPL, GhostscriptLicense.GPL); try { _rasterizer.Open(inputPdfPath.Replace("/",@"\"), _lastInstalledVersion, false); } catch (Exception excp) { logger.Error("Cannot open PDF with ghostscript {0} excp {1}", inputPdfPath, excp.Message); } _inputPdfPath = inputPdfPath; }
public static void Test_ReadPdf_01(string file) { PdfReader reader = null; try { reader = new PdfReader(file); Trace.WriteLine("read pdf : \"{0}\"", file); Trace.WriteLine("number of pages : {0}", reader.NumberOfPages); Rectangle mediabox = reader.GetPageSize(1); Trace.WriteLine("size of page 1 : [ {0}, {1}, {2}, {3} ]", mediabox.Left, mediabox.Bottom, mediabox.Right, mediabox.Top); Trace.WriteLine("rotation of page 1 : {0}", reader.GetPageRotation(1)); Trace.WriteLine("page size with rotation of page 1 : {0}", reader.GetPageSizeWithRotation(1)); Trace.WriteLine("file length : {0}", reader.FileLength); Trace.WriteLine("is rebuilt ? : {0}", reader.IsRebuilt()); Trace.WriteLine("is encrypted ? : {0}", reader.IsEncrypted()); } finally { if (reader != null) reader.Close(); } }
/// <summary> /// Splits the document and saves the contents to a new pdf. /// </summary> /// <param name="reader">The reader.</param> public void SplitDocument(PdfReader reader) { PdfWriter writer = Writer; _document.Open(); PdfContentByte content = writer.DirectContent; for (int i = StartPage; i <= EndPage; i++) { PdfImportedPage page = writer.GetImportedPage(reader, i); Rectangle pageSize = reader.GetPageSizeWithRotation(i); _document.SetPageSize(pageSize); _document.NewPage(); int rotation = reader.GetPageRotation(i); if (rotation == 90 || rotation == 270) content.AddTemplate(page, 0, -1f, 1f, 0, 0, pageSize.Height); else content.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } }
public ActionResult viewPRPdf(Int16 fiscalYear, Int16? coeID) { var allCoEs = db.CoEs.ToList(); if (coeID != 0 && coeID != null) { allCoEs = allCoEs.Where(x => x.CoE_ID == coeID).ToList(); } else { allCoEs = allCoEs.Where(x => x.CoE_ID != 0).ToList(); } var allMaps = new List<Indicator_CoE_Maps>(); allMaps = db.Indicator_CoE_Maps.ToList(); ModelState.Clear(); var viewModel = new PRViewModel { //allCoEs = db.CoEs.ToList(), allCoEs = allCoEs, allAnalysts = db.Analysts.ToList(), allMaps = allMaps, allFootnoteMaps = db.Indicator_Footnote_Maps.ToList(), allFootnotes = db.Footnotes.ToList(), Fiscal_Year = fiscalYear, Analyst_ID = null, allColors = db.Color_Types.ToList(), }; HttpResponse httpResponse = this.HttpContext.ApplicationInstance.Context.Response; httpResponse.Clear(); httpResponse.ContentType = "application/pdf"; httpResponse.AddHeader("content-disposition", "attachment;filename=\"test.pdf\""); MemoryStream memoryStream = new MemoryStream(); string apiKey = "2429a8e1-7cf6-4a77-9f7f-f4a85a9fcc14"; var test = (this.RenderView("viewPRSimple", viewModel)); string value = "<meta charset='UTF-8' />" + test; List<string> coeNotes; var topMargin = 6; if (allCoEs.FirstOrDefault(x => x.CoE_ID == coeID).CoE_Notes != null && allCoEs.FirstOrDefault(x => x.CoE_ID == coeID).CoE_Notes != "") { coeNotes = Regex.Matches(allCoEs.FirstOrDefault(x => x.CoE_ID == coeID).CoE_Notes, @"\[.*?\]").Cast<Match>().Select(m => m.Value.Substring(1, m.Value.Length - 2)).ToList(); var coeNotesCount = coeNotes.Count(); topMargin+=coeNotesCount * 5; } using (var client = new WebClient()) { NameValueCollection options = new NameValueCollection(); options.Add("apikey", apiKey); options.Add("value", value); options.Add("DisableJavascript", "false"); options.Add("PageSize", "Legal"); options.Add("UseLandscape", "true"); options.Add("Zoom", "1.0"); options.Add("MarginLeft", "2"); options.Add("MarginTop", "10"); options.Add("MarginBottomn", "5"); options.Add("MarginRight", "2"); //options.Add("HeaderUrl", this.HttpContext.ApplicationInstance.Server.MapPath("viewPRSimple_Header")); byte[] result = client.UploadValues("http://api.html2pdfrocket.com/pdf", options); //httpResponse.BinaryWrite(result); memoryStream.Write(result, 0, result.Length); } string picPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/SHSheader.png"); Image logo = Image.GetInstance(picPath); //string picPathOPEO = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/logoOPEO.png"); //Image logoOPEO = Image.GetInstance(picPathOPEO); string footerPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/footer.png"); Image footer = Image.GetInstance(footerPath); string picMonthlyPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/Monthly.png"); string picQuaterlyPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/quaterly.png"); string picNAPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/na.png"); string picTargetPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/target.png"); string picDraftPath = this.HttpContext.ApplicationInstance.Server.MapPath("~/App_Data/draft.png"); Image picDraft = Image.GetInstance(picDraftPath); var pdfDocument = new iTextSharp.text.Document(); var outStream = new MemoryStream(); var writer = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDocument, outStream); pdfDocument.Open(); var reader = new iTextSharp.text.pdf.PdfReader(memoryStream.ToArray()); for (var page = 1; page <= reader.NumberOfPages; page++) { pdfDocument.SetPageSize(reader.GetPageSizeWithRotation(page)); pdfDocument.NewPage(); var importedPage = writer.GetImportedPage(reader, page); var pageRotation = reader.GetPageRotation(page); var pageWidth = reader.GetPageSizeWithRotation(page).Width; var pageHeight = reader.GetPageSizeWithRotation(page).Height; switch (pageRotation) { case 0: writer.DirectContent.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); break; case 90: writer.DirectContent.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pageHeight); break; case 180: writer.DirectContent.AddTemplate( importedPage, -1f, 0, 0, -1f, pageWidth, pageHeight); break; case 270: writer.DirectContent.AddTemplate(importedPage, 0, 1f, -1f, 0, pageWidth, 0); break; } pdfDocument.SetPageSize(pdfDocument.PageSize); logo.Alignment = Element.ALIGN_CENTER; logo.ScalePercent(70,70); logo.SetAbsolutePosition(5, reader.GetPageSizeWithRotation(page).Height - logo.ScaledHeight-15); writer.DirectContent.AddImage(logo); var obj = db.CoEs.FirstOrDefault(x => x.CoE_ID == coeID); var type = obj.GetType(); var isDraft = (bool)(type.GetProperty(FiscalYear.FYStrFull("FY_", fiscalYear) + "Draft").GetValue(obj, null) ?? false); if (isDraft) { picDraft.Alignment = Element.ALIGN_CENTER; picDraft.ScalePercent(70, 70); picDraft.SetAbsolutePosition(reader.GetPageSizeWithRotation(page).Width / 4, 0); writer.DirectContent.AddImage(picDraft); } //logoOPEO.Alignment = Element.ALIGN_CENTER; //logoOPEO.ScalePercent(20, 20); //logoOPEO.SetAbsolutePosition(reader.GetPageSizeWithRotation(page).Width - logoOPEO.ScaledWidth - 5, reader.GetPageSizeWithRotation(page).Height - logoOPEO.ScaledHeight - 5); //writer.DirectContent.AddImage(logoOPEO); if (page == 1) { footer.Alignment = Element.ALIGN_CENTER; footer.ScalePercent(45, 45); footer.SetAbsolutePosition(reader.GetPageSizeWithRotation(page).Width - footer.ScaledWidth - 6, 10); writer.DirectContent.AddImage(footer); } } writer.CloseStream = false; pdfDocument.Close(); outStream.WriteTo(httpResponse.OutputStream); outStream.Close(); httpResponse.End(); return View(viewModel); }
public static void MergeFiles(string destinationFile, List<string> sourceFiles) { int f = 0; // we create a reader for a certain document PdfReader reader = new PdfReader(sourceFiles[f]); // we retrieve the total number of pages int n = reader.NumberOfPages; // step 1: creation of a document-object Document document = new Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); // step 3: we open the document document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; // step 4: we add content while (f < sourceFiles.Count) { 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); } } f++; if (f < sourceFiles.Count) { reader = new PdfReader(sourceFiles[f]); // we retrieve the total number of pages n = reader.NumberOfPages; } } // step 5: we close the document document.Close(); }
public void Splite(string inputFileName, int pageSize) { int rotation = 0; PdfReader pdfReader = new PdfReader(inputFileName); string fileName = inputFileName.Substring(0, inputFileName.Length-4); int totalPages = pdfReader.NumberOfPages; int block = 1; for (int i = 1; i <= totalPages; block++) { int tail=block * pageSize; if (tail > totalPages) { tail = totalPages; } string newFileName = fileName + string.Format("[{0}-{1}].pdf", i,tail); FileStream fs = new FileStream(newFileName, FileMode.Create); Document newDocument = new Document(); PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, fs); pdfWriter.CloseStream = true; newDocument.Open(); PdfContentByte pdfContentByte = pdfWriter.DirectContent; for (int j=1;j<=pageSize && i<=totalPages;j++,i++) { newDocument.SetPageSize(pdfReader.GetPageSizeWithRotation(i)); newDocument.NewPage(); PdfImportedPage importedPage = pdfWriter.GetImportedPage(pdfReader,i); rotation = pdfReader.GetPageRotation(i); pdfContentByte.AddTemplate(importedPage, 0, 0); if (rotation == 90 || rotation == 270) { pdfContentByte.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, pdfReader.GetPageSizeWithRotation(i).Height); } else { pdfContentByte.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); } } fs.Flush(); newDocument.Close(); } }
public void AddAnnotation(PdfAnnotation annot) { List <PdfAnnotation> allAnnots = new List <PdfAnnotation>(); if (annot.IsForm()) { PdfFormField field = (PdfFormField)annot; if (field.Parent != null) { return; } ExpandFields(field, allAnnots); if (cstp.fieldTemplates == null) { cstp.fieldTemplates = new Dictionary <PdfTemplate, object>(); } } else { allAnnots.Add(annot); } for (int k = 0; k < allAnnots.Count; ++k) { annot = allAnnots[k]; if (annot.IsForm()) { if (!annot.IsUsed()) { Dictionary <PdfTemplate, object> templates = annot.Templates; if (templates != null) { foreach (PdfTemplate tpl in templates.Keys) { cstp.fieldTemplates[tpl] = null; } } } PdfFormField field = (PdfFormField)annot; if (field.Parent == null) { AddDocumentField(field.IndirectReference); } } if (annot.IsAnnotation()) { PdfObject pdfobj = PdfReader.GetPdfObject(pageN.Get(PdfName.ANNOTS), pageN); PdfArray annots = null; if (pdfobj == null || !pdfobj.IsArray()) { annots = new PdfArray(); pageN.Put(PdfName.ANNOTS, annots); } else { annots = (PdfArray)pdfobj; } annots.Add(annot.IndirectReference); if (!annot.IsUsed()) { PdfRectangle rect = (PdfRectangle)annot.Get(PdfName.RECT); if (rect != null && (rect.Left != 0 || rect.Right != 0 || rect.Top != 0 || rect.Bottom != 0)) { int rotation = reader.GetPageRotation(pageN); Rectangle pageSize = reader.GetPageSizeWithRotation(pageN); switch (rotation) { case 90: annot.Put(PdfName.RECT, new PdfRectangle( pageSize.Top - rect.Bottom, rect.Left, pageSize.Top - rect.Top, rect.Right)); break; case 180: annot.Put(PdfName.RECT, new PdfRectangle( pageSize.Right - rect.Left, pageSize.Top - rect.Bottom, pageSize.Right - rect.Right, pageSize.Top - rect.Top)); break; case 270: annot.Put(PdfName.RECT, new PdfRectangle( rect.Bottom, pageSize.Right - rect.Left, rect.Top, pageSize.Right - rect.Right)); break; } } } } if (!annot.IsUsed()) { annot.SetUsed(); cstp.AddToBody(annot, annot.IndirectReference); } } }
public byte[] AddSignatureAppearance(byte[] pdfToStamBytes, string stampString) { using (var ms = new MemoryStream()) { try { var imageWidth = 425; var imageHeight = 89; var fontSize = 0; if (stampString.Length > 25) { fontSize = 8; } else { fontSize = 12; } //TODO: Make configurable string path = "emptyPath"; string xsdFileLinux = @"/var/local/lawtrust/configs/signatureFont.ttf"; string xsdFileWindows = @"C:/lawtrust/configs/signatureFont.ttf"; if (File.Exists(xsdFileLinux)) { path = xsdFileLinux; } else if (File.Exists(xsdFileWindows)) { path = xsdFileWindows; } if (!path.Equals("emptyPath")) { var reader = new iTextSharp.text.pdf.PdfReader(pdfToStamBytes); var stamper = new iTextSharp.text.pdf.PdfStamper(reader, ms); var rotation = reader.GetPageRotation(1); var box = reader.GetPageSizeWithRotation(1); var bf = BaseFont.CreateFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); var pcb = stamper.GetOverContent(1); var f = new Font(bf, fontSize); var p = new Phrase(stampString, f); //TODO: Make coordinates configurable if (rotation == 90) { //landscape ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 740, 10, 0); } else if (rotation == 180) { //normal PDF ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 500, 10, 0); } else if (rotation == 270) { //landscape ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 740, 10, 0); } else { //normal PDF ColumnText.ShowTextAligned(pcb, Element.ALIGN_CENTER, p, 500, 10, 0); } pcb.SaveState(); stamper.Close(); reader.Close(); return(ms.ToArray()); } else { return(null); } } catch (Exception ex) { //need error handling return(null); } } }
private static bool Overlay(dynamic overlay, string filename) { string inputFile = ServiceCfg.PdfModel; string cardFolder = Path.Combine(ServiceCfg.OutputFolderPath, @"pages\"); if (!PdfManager.CheckFolder(cardFolder, true)) { return(false); } string outFile = Path.Combine(cardFolder, "CTP_" + filename); //Creation du reader et du document pour lire le document PDF original PdfReader reader = new PdfReader(inputFile); Document inputDoc = new Document(reader.GetPageSizeWithRotation(1)); using (FileStream fs = new FileStream(outFile, FileMode.Create)) { //Creation du PDF Writer pour créer le nouveau Document PDF PdfWriter outputWriter = PdfWriter.GetInstance(inputDoc, fs); inputDoc.Open(); //Creation du Content Byte pour tamponner le PDF writer PdfContentByte cb1 = outputWriter.DirectContent; //Obtien le document PDF à utiliser comme superposition PdfReader overlayReader = new PdfReader(overlay); PdfImportedPage overLay = outputWriter.GetImportedPage(overlayReader, 1); //Obtention de la rotation de page de superposition int overlayRotation = overlayReader.GetPageRotation(1); int n = reader.NumberOfPages; //liste des numéros de pages à marquer dans le modèle List <int> pagesList = GetModelPages2Overlay(n); int i = 1; while (i <= n) { //S'assurer que la taille de la nouvelle page correspond à celle du document d'origine inputDoc.SetPageSize(reader.GetPageSizeWithRotation(i)); inputDoc.NewPage(); PdfImportedPage page = outputWriter.GetImportedPage(reader, i); int rotation = reader.GetPageRotation(i); //Ajout de la page PDF originale avec la bonne rotation if (rotation == 90 || rotation == 270) { cb1.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { //cb1.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); cb1.AddTemplate(page, 0, 0, true); } //si la page en cours est à marquer if (pagesList.Contains(i)) { //Ajout de la superposition avec la bonne rotation if (overlayRotation == 90 || overlayRotation == 270) { cb1.AddTemplate(overLay, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else { //cb1.AddTemplate(overLay, 1f, 0, 0, 1f, 0, 0); cb1.AddTemplate(overLay, float.Parse(ServiceCfg.OverlayX.ToString()), float.Parse(ServiceCfg.OverlayY.ToString()), true); } } //Increment de page i++; } //Fermeture du fichier d'entrée inputDoc.Close(); //on garde le fichier de sortie _lastPdf = outFile; //Fermeture du reader pour le fichier de superposition overlayReader.Close(); } reader.Close(); return(true); }
public Boolean MergePdfFiles(String[] pdfFiles, String outputPath) { // Optional ByVal authorName As String = "", _ // Optional ByVal creatorName As String = "", _ // Optional ByVal subject As String = "", _ // Optional ByVal title As String = "", _ // Optional ByVal keywords As String = "") Boolean result = false; int pdfCount = 0; //'total input pdf file count int f = 0; //'pointer to current input pdf file string fileName = String.Empty; // 'current input pdf filename iTextSharp.text.pdf.PdfReader reader = null; int pageCount = 0; //'cureent input pdf page count iTextSharp.text.Document pdfDoc = null; // 'the output pdf document iTextSharp.text.pdf.PdfWriter writer = null; iTextSharp.text.pdf.PdfContentByte cb = null; // 'Declare a variable to hold the imported pages iTextSharp.text.pdf.PdfImportedPage page = null; int rotation = 0; bool unethicalreading = false; // 'Declare a font to used for the bookmarks iTextSharp.text.Font bookmarkFont = iTextSharp.text.FontFactory.GetFont(iTextSharp.text.FontFactory.HELVETICA, 12, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLUE); // Try pdfCount = pdfFiles.Length; if (pdfCount > 1) { // 'Open the 1st pad using PdfReader object fileName = pdfFiles[f]; reader = new iTextSharp.text.pdf.PdfReader(fileName); // reader. iTextSharp.text.pdf.PdfReader.unethicalreading = unethicalreading; // 'Get page count pageCount = reader.NumberOfPages; // 'Instantiate an new instance of pdf document and set its margins. This will be the output pdf. // 'NOTE: bookmarks will be added at the 1st page of very original pdf file using its filename. The location // 'of this bookmark will be placed at the upper left hand corner of the document. So you'll need to adjust // 'the margin left and margin top values such that the bookmark won't overlay on the merged pdf page. The // 'unit used is "points" (72 points = 1 inch), thus in this example, the bookmarks' location is at 1/4 inch from // 'left and 1/4 inch from top of the page. pdfDoc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1), 18, 18, 18, 18); // 'Instantiate a PdfWriter that listens to the pdf document writer = iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, new System.IO.FileStream(outputPath, System.IO.FileMode.Create)); //added system // 'Set metadata and open the document // With pdfDoc pdfDoc.AddAuthor(""); pdfDoc.AddCreationDate(); pdfDoc.AddCreator(""); pdfDoc.AddProducer(); pdfDoc.AddSubject(""); pdfDoc.AddTitle(""); pdfDoc.AddKeywords(""); pdfDoc.Open(); // End With // 'Instantiate a PdfContentByte object cb = writer.DirectContent; // 'Now loop thru the input pdfs while (f < pdfCount) { // 'Declare a page counter variable int i = 0; // 'Loop thru the current input pdf's pages starting at page 1 while (i < pageCount) { i += 1; // 'Get the input page size pdfDoc.SetPageSize(reader.GetPageSizeWithRotation(i)); // 'Create a new page on the output document pdfDoc.NewPage(); // 'If it is the 1st page, we add bookmarks to the page // 'If i = 1 Then // ' 'First create a paragraph using the filename as the heading // ' Dim para As New iTextSharp.text.Paragraph(IO.Path.GetFileName(fileName).ToUpper(), bookmarkFont) // ' 'Then create a chapter from the above paragraph // ' Dim chpter As New iTextSharp.text.Chapter(para, f + 1) // ' 'Finally add the chapter to the document // ' pdfDoc.Add(chpter) // 'End If // 'Now we get the imported page page = writer.GetImportedPage(reader, i); // 'Read the imported page's rotation rotation = reader.GetPageRotation(i); // 'Then add the imported page to the PdfContentByte object as a template based on the page's rotation if (rotation == 90) { cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else 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); } } //End While 2 // 'Increment f and read the next input pdf file f += 1; if (f < pdfCount) { fileName = pdfFiles[f]; reader = new iTextSharp.text.pdf.PdfReader(fileName); pageCount = reader.NumberOfPages; } // End If } //end while 1 // 'When all done, we close the document so that the pdfwriter object can write it to the output file pdfDoc.Close(); result = true; }// End If Principal // Catch ex As Exception // Throw New Exception(ex.Message) // End Try return(result); }
private void btnWeiterZu2_Click(object sender, EventArgs e) { // Ein neuer Ordner wird erzeugt, der die zerstückelte PDF-Datei aufnimmt. try { NeuePdfDatei.erstelleOrdner(); } catch (Exception ex) { MessageBox.Show("Fehler: \n Es fehlt die Berechtigung einen Ordner anzulegen, der sodann die Einzelseiten aufnimmt.\n\n"+ex, "Coelina"); return; } // Die Datei wird zerlegt. NeuePdfDatei.zerlegePdfInEinzelseiten(NeuePdfDatei.VollständigerPfadZurDatei); string name; try { FileInfo file = new FileInfo(Properties.Settings.Default.neuesteDatei); name = file.Name.Substring(0, file.Name.LastIndexOf(".")); } catch (Exception ex) { MessageBox.Show("Fehler: \n\nSie müssen eine PDF-Datei auswählen.\n\n" + ex, "Coelina"); return; } // Es wird ein Reader für die PDF-Datei erzeugt. try { PdfReader reader = new PdfReader(Properties.Settings.Default.neuesteDatei); // Die Anzahl der Seiten der PDF-Datei wird ermittelt. int n = reader.NumberOfPages; // Die Eigenschaft wird angepasst. NeuePdfDatei.AnzahlSeiten = n; int digits = 1 + (n / 10); // Progressbar einstellen. progressBar1.Visible = true; progressBar1.Minimum = 1; progressBar1.Maximum = n + 1; progressBar1.Value = 1; progressBar1.Step = 1; //progressBar1.PerformStep(); Document document; int pagenumber; string filename; // Für jede Einzelseite wird mindestens ein Nachrichtenobjekt angelegt. for (int i = 0; i < n; i++) { pagenumber = i + 1; filename = pagenumber.ToString(); while (filename.Length < digits) filename = "0" + filename; filename = "_" + filename + ".pdf"; filename = name + filename; // Ein document-Objekt wird erzeugt. document = new Document(reader.GetPageSizeWithRotation(pagenumber)); // Ein Writer wird für das document erstellt. PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(frmSerienbriefdateiWählen.NeuePdfDatei.Unterverzeichnis + "\\" + filename, FileMode.Create)); // Öffnen des Dokuments. document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page = writer.GetImportedPage(reader, pagenumber); int rotation = reader.GetPageRotation(pagenumber); if (rotation == 90 || rotation == 270) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } // Schließen des Dokuments. document.Close(); List<string> empfängerMitDuplikaten = NeuePdfDatei.ReadPdfFile(NeuePdfDatei.Unterverzeichnis + "\\" + filename, Global.nral[cbxEmpfänger.SelectedIndex].DefinitionRegEx, Global.nral[cbxEmpfänger.SelectedIndex].Begrenzer1, Global.nral[cbxEmpfänger.SelectedIndex].Begrenzer2, cbxEmpfänger.SelectedIndex); // Duplikate werden entfernt, damit jeder Empfänger jede Seite nur 1x bekommt. List<string> empfänger = empfängerMitDuplikaten.Distinct().ToList(); // Für jeden einzelnen Empfänger auf einer Seite wird ein Nachrichtenobjekt angelegt. for (int j = 0; j < empfänger.Count(); j++) { // Falls die Alias-Funktionalität in den Einstellungen aktiv ist, wird nach allen Aliassen in Betreff und Body gesucht und entsprechend ersetzt. string betreff = Properties.Settings.Default.betreff; string body = Properties.Settings.Default.body; string aliasKürzel = ""; string aliasName = ""; string alias1 = ""; string alias2 = ""; string alias3 = ""; string alias4 = ""; // Wenn ein Alias ausgewertet werden soll, muss der Alias erst in eine E-Mail-Adresse übersetzt werden. if (cbxEmpfänger.SelectedIndex != 0) { empfänger[j] = Global.AliasMail.ermittleEmailAdresseAusEinemAlias(empfänger[j], cbxEmpfänger.SelectedIndex); // Objekte mit ""-Wert werden entfernt. } //empfänger = empfänger.Where(x => x != null).ToList(); // Wenn der Alias in den Einstellungen aktiv geschaltet wurde, wird in Betreff und Body nach Alias gesucht und entsprechend ersetzt. if (Properties.Settings.Default.AliasAktiv == true) { foreach (AliasKopfzeile a in Enum.GetValues(typeof(AliasKopfzeile))) { betreff = Global.AliasMail.AliasSuchenUndTextErsetzen(empfänger[j], betreff, "[" + a + "]"); body = Global.AliasMail.AliasSuchenUndTextErsetzen(empfänger[j], body, "[" + a + "]"); } if (cbxEmpfänger.SelectedIndex == 0) { aliasKürzel = Global.AliasMail.AliasKürzelErmitteln(empfänger[j]); } aliasName = Global.AliasMail.AliasNameErmitteln(empfänger[j]); alias1 = Global.AliasMail.Alias1Ermitteln(empfänger[j]); alias2 = Global.AliasMail.Alias2Ermitteln(empfänger[j]); alias3 = Global.AliasMail.Alias3Ermitteln(empfänger[j]); alias4 = Global.AliasMail.Alias4Ermitteln(empfänger[j]); } // Jetzt wird ein neues Nachrichtenobjekt erzeugt. // Nur, wenn tatsächlich eine gültige E-Mail-Adresse ermittelt werden kann, wird das Nachrichtenobjekt angelegt. if (empfänger[j].Contains('@')) { Global.fNeueNachricht.Add(new Nachricht(Properties.Settings.Default.bcc, betreff, body, Properties.Settings.Default.cc, frmSerienbriefdateiWählen.NeuePdfDatei.Unterverzeichnis + "\\" + filename, empfänger[j], Properties.Settings.Default.attachment1, Properties.Settings.Default.attachment2, Properties.Settings.Default.attachment3, Properties.Settings.Default.mailPassword, Properties.Settings.Default.smtpPort, Properties.Settings.Default.smtpServer, Properties.Settings.Default.absender, aliasName, aliasKürzel, alias1, alias2, alias3, alias4)); } progressBar1.PerformStep(); } } } catch (Exception ex) { string fehler = "Die Datei " + NeuePdfDatei.Name + " kann nicht gelesen werden.\nKann es sein, dass die Datei passwortgeschützt ist?\nHier geht es nicht weiter."; MessageBox.Show("Fehler: \n" + fehler + "\n\n" + ex, "Coelina"); return; } // Nur, wenn die PDF-Datei existiert und die SMTP-Einstellungen gültig sind, geht es weiter. if (File.Exists(btnDateiAuswahl.Text) && Path.GetExtension(btnDateiAuswahl.Text) == ".pdf" && Global.fNeueNachricht.Count() > 0) { if (Properties.Settings.Default.MaileinstellungenKorrekt == true) { frmVorschau frm2 = new frmVorschau(); // frm2 soll innerhalb des MDI-Containers öffnen. Also wird der Parent des aktuellen Forms an das nächste Form übergeben. frm2.MdiParent = this.MdiParent; frm2.Show(); this.Close(); } else { string fehler = "\n\nWechseln Sie zu den Einstellungen, um zuerst einen gültigen SMTP-Zugang einzurichten.\nAnschließend kehren Sie hierher zurück."; MessageBox.Show("Fehler: \n" + fehler, "Coelina"); return; } } else { string fehler = "\nEs muss mindestens ein Empfänger ausgelesen werden können, um zum nächsten Schritt zu kommen."; MessageBox.Show("Fehler: \n" + fehler, "Coelina"); return; } try { MailAddress m = new MailAddress(tbxCc.Text); Properties.Settings.Default.cc = tbxCc.Text; } catch { // Wenn die Textbox nicht leer und gleichzeitig nicht mit keiner gültigen Adresse gefüllt ist, dann wird die Zelle geleert if (tbxCc.Text != "") { Properties.Settings.Default.cc = ""; tbxCc.Text = ""; string fehler = "\n\nDie CC-Adresse ist nicht gültig und wird ignoriert."; MessageBox.Show("Fehler: \n" + fehler, "Coelina"); } } Properties.Settings.Default.Save(); try { MailAddress m = new MailAddress(tbxBcc.Text); Properties.Settings.Default.bcc = tbxBcc.Text; } catch { // Wenn die Textbox nicht leer und gleichzeitig nicht mit keiner gültigen Adresse gefüllt ist, dann wird die Zelle geleert. if (tbxBcc.Text != "") { Properties.Settings.Default.bcc = ""; tbxBcc.Text = ""; string fehler = "\n\nDie BCC-Adresse ist nicht gültig und wird ignoriert."; MessageBox.Show("Fehler: \n" + fehler, "Coelina"); } } Properties.Settings.Default.Save(); }
/// <summary> /// Merge pdf files. /// </summary> /// <param name="sourceFiles">PDF files being merged.</param> /// <returns></returns> public static byte[] MergeFiles(List<Stream> sourceFiles) { Document document = new Document(); MemoryStream output = new MemoryStream(); try { // Initialize pdf writer PdfWriter writer = PdfWriter.GetInstance(document, output); writer.PageEvent = new PdfPageEvents(); // Open document to write document.Open(); PdfContentByte content = writer.DirectContent; // Iterate through all pdf documents for (int fileCounter = 0; fileCounter < sourceFiles.Count; fileCounter++) { // Create pdf reader PdfReader reader = new PdfReader(sourceFiles[fileCounter]); int numberOfPages = reader.NumberOfPages; // Iterate through all pages for (int currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++) { // Determine page size for the current page document.SetPageSize( reader.GetPageSizeWithRotation(currentPageIndex)); // Create page document.NewPage(); PdfImportedPage importedPage = writer.GetImportedPage(reader, currentPageIndex); // Determine page orientation int pageOrientation = reader.GetPageRotation(currentPageIndex); if ((pageOrientation == 90) || (pageOrientation == 270)) { content.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height); } else { content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); } } } } catch (Exception exception) { throw new Exception("There has an unexpected exception" + " occured during the pdf merging process.", exception); } finally { document.Close(); } return output.GetBuffer(); }
/// <summary> 合併PDF檔(集合) </summary> /// <param name="fileList">欲合併PDF檔之集合(一筆以上)</param> /// <param name="outMergeFile">合併後的檔名</param> /// /// <param name="isA4">A5纸张转A4</param> public static void mergePDFFiles(string[] fileList, string outMergeFile, bool isA4) { iTextSharp.text.pdf.PdfReader reader, reader1; Document document; if (isA4) //是否使用A4纸 { //全用A4 document = new Document(); } else { reader1 = new PdfReader(fileList[0]); document = new Document(reader1.GetPageSizeWithRotation(1)); } try { //删除已有文件 bool b = true; if (File.Exists(outMergeFile)) { try { File.Delete(outMergeFile); } catch (Exception) { b = false; } } if (b) { //如果文件存在则覆盖,如果不存在则创建 PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create)); document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage newPage; //合并PDF文档 for (int i = 0; i < fileList.Length; i++) { reader = new iTextSharp.text.pdf.PdfReader(fileList[i]); int iPageNum = reader.NumberOfPages; for (int j = 1; j <= iPageNum; j++) { if (!isA4) { document.SetPageSize(reader.GetPageSizeWithRotation(1)); } else { document.SetPageSize(reader.GetPageSizeWithRotation(1)); } document.NewPage(); newPage = writer.GetImportedPage(reader, j); int rotation = reader.GetPageRotation(1); if (rotation == 90 || rotation == 270) { if (isA4) { cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(1).Height); } else { cb.AddTemplate(newPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(1).Height); } } else { cb.AddTemplate(newPage, 1f, 0, 0, 1f, 0, 0); } } } } } finally { document.Close(); } }
private void pocketmodstyle() { PdfReader pr = new PdfReader(ofd.FileName); if (pr.IsEncrypted()) { MessageBox.Show(ofd.FileName + " is protected.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } try { var dst = PageSize.GetRectangle(comboBox1.SelectedItem.ToString()); var doc = new Document(dst); var pw = PdfWriter.GetInstance(doc, new FileStream(sfd.FileName, FileMode.Create)); doc.Open(); for (var page = 1; page <= pr.NumberOfPages; page++) { if (page % 8 == 1) doc.NewPage(); var pcb = pw.DirectContent; var src = pr.GetPageSize(page); int rot = pr.GetPageRotation(page); bool isLandscape = (src.Width > src.Height) ? true : false; float scale; float offset; if (isLandscape) { scale = dst.Height / (src.Height * 4); offset = (dst.Width / 2 - (scale * src.Width)) / 2; } else { scale = dst.Height / (src.Width * 4); offset = (dst.Width / 2 - (scale * src.Height)) / 2; } // For scaling and rotation var transRotate = new iTextSharp.awt.geom.AffineTransform(); transRotate.SetToIdentity(); transRotate.Scale(scale, scale); // For position var transAdjust = new iTextSharp.awt.geom.AffineTransform(); transAdjust.SetToIdentity(); // Affine translation of PocketMod style. if (isLandscape || (rot == 90 || rot == 270)) { var px = dst.Width / 2; var py = dst.Height / 4; var rads = 180 * Math.PI / 180; switch (page % 8) { // LEFT SIDE // Rotate 180 degrees case 1: transAdjust.Translate(px - offset, py * 4); transRotate.Rotate(-rads); break; case 0: // as 8 transAdjust.Translate(px - offset, py * 3); transRotate.Rotate(-rads); break; case 7: transAdjust.Translate(px - offset, py * 2); transRotate.Rotate(-rads); break; case 6: transAdjust.Translate(px - offset, py); transRotate.Rotate(-rads); break; // RIGHT SIDE // no rotation case 2: transAdjust.Translate(px + offset, py * 3); break; case 3: transAdjust.Translate(px + offset, py * 2); break; case 4: transAdjust.Translate(px + offset, py); break; case 5: transAdjust.Translate(px + offset, 0); break; } } else { var px = dst.Width / 2; var py = dst.Height / 4; var rads = 90 * Math.PI / 180; switch (page % 8) { // LEFT SIDE // Rotate counterclockwise 90 degrees case 1: transAdjust.Translate(px - offset, py * 3); transRotate.Rotate(rads); break; case 0: // as 8 transAdjust.Translate(px - offset, py * 2); transRotate.Rotate(rads); break; case 7: transAdjust.Translate(px - offset, py); transRotate.Rotate(rads); break; case 6: transAdjust.Translate(px - offset, 0); transRotate.Rotate(rads); break; // RIGHT SIDE // Rotate clockwise 90 degrees case 2: transAdjust.Translate(px + offset, py * 4); transRotate.Rotate(-rads); break; case 3: transAdjust.Translate(px + offset, py * 3); transRotate.Rotate(-rads); break; case 4: transAdjust.Translate(px + offset, py * 2); transRotate.Rotate(-rads); break; case 5: transAdjust.Translate(px + offset, py); transRotate.Rotate(-rads); break; } } var finalTrans = new iTextSharp.awt.geom.AffineTransform(); finalTrans.SetToIdentity(); finalTrans.Concatenate(transAdjust); finalTrans.Concatenate(transRotate); var importedPage = pw.GetImportedPage(pr, page); pcb.AddTemplate(importedPage, finalTrans); if ((page % 8 == 0)||(page == pr.NumberOfPages)) { // Draw guide line for folding. pcb.SetLineWidth(0.01f); // Outside frame if (checkBox1.Checked) { pcb.MoveTo(0f, 0f); pcb.LineTo(dst.Width, 0f); pcb.LineTo(dst.Width, dst.Height); pcb.LineTo(0f, dst.Height); pcb.LineTo(0f, 0f); pcb.Stroke(); } pcb.MoveTo(0f, dst.Height * 3 / 4f); pcb.LineTo(dst.Width, dst.Height * 3 / 4); pcb.Stroke(); pcb.MoveTo(0f, dst.Height * 2 / 4f); pcb.LineTo(dst.Width, dst.Height * 2 / 4); pcb.Stroke(); pcb.MoveTo(0f, dst.Height * 1 / 4f); pcb.LineTo(dst.Width, dst.Height * 1 / 4); pcb.Stroke(); pcb.MoveTo(dst.Width / 2, 0f); pcb.LineTo(dst.Width / 2, dst.Height * 1 / 4); pcb.Stroke(); pcb.MoveTo(dst.Width / 2, dst.Height * 3 / 4); pcb.LineTo(dst.Width / 2, dst.Height); pcb.Stroke(); pcb.SetLineDash(3f, 3f); pcb.MoveTo(dst.Width / 2, dst.Height * 1 / 4); pcb.LineTo(dst.Width / 2, dst.Height * 3 / 4); pcb.Stroke(); pcb.SetLineDash(0); } } doc.Close(); pw.Close(); pr.Close(); } catch (Exception e) { Console.WriteLine("{0} Exception caught.", e); } }
public void AddAnnotation(PdfAnnotation annot) { ArrayList allAnnots = new ArrayList(); if (annot.IsForm()) { PdfFormField field = (PdfFormField)annot; if (field.Parent != null) { return; } expandFields(field, allAnnots); if (_cstp.FieldTemplates == null) { _cstp.FieldTemplates = new Hashtable(); } } else { allAnnots.Add(annot); } for (int k = 0; k < allAnnots.Count; ++k) { annot = (PdfAnnotation)allAnnots[k]; if (annot.IsForm()) { if (!annot.IsUsed()) { Hashtable templates = annot.Templates; if (templates != null) { foreach (object tpl in templates.Keys) { _cstp.FieldTemplates[tpl] = null; } } } PdfFormField field = (PdfFormField)annot; if (field.Parent == null) { addDocumentField(field.IndirectReference); } } if (annot.IsAnnotation()) { PdfObject pdfobj = PdfReader.GetPdfObject(_pageN.Get(PdfName.Annots), _pageN); PdfArray annots = null; if (pdfobj == null || !pdfobj.IsArray()) { annots = new PdfArray(); _pageN.Put(PdfName.Annots, annots); } else { annots = (PdfArray)pdfobj; } annots.Add(annot.IndirectReference); if (!annot.IsUsed()) { PdfRectangle rect = (PdfRectangle)annot.Get(PdfName.Rect); if (rect != null && (rect.Left.ApproxNotEqual(0) || rect.Right.ApproxNotEqual(0) || rect.Top.ApproxNotEqual(0) || rect.Bottom.ApproxNotEqual(0))) { int rotation = _reader.GetPageRotation(_pageN); Rectangle pageSize = _reader.GetPageSizeWithRotation(_pageN); switch (rotation) { case 90: annot.Put(PdfName.Rect, new PdfRectangle( pageSize.Top - rect.Bottom, rect.Left, pageSize.Top - rect.Top, rect.Right)); break; case 180: annot.Put(PdfName.Rect, new PdfRectangle( pageSize.Right - rect.Left, pageSize.Top - rect.Bottom, pageSize.Right - rect.Right, pageSize.Top - rect.Top)); break; case 270: annot.Put(PdfName.Rect, new PdfRectangle( rect.Bottom, pageSize.Right - rect.Left, rect.Top, pageSize.Right - rect.Right)); break; } } } } if (!annot.IsUsed()) { annot.SetUsed(); _cstp.AddToBody(annot, annot.IndirectReference); } } }
public void MergeFiles(string destinationFile, string[] sourceFiles) { int f = 0; PdfReader reader = new PdfReader(sourceFiles[f]); int n = reader.NumberOfPages; Document document = new Document(reader.GetPageSizeWithRotation(1)); PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; while (f < sourceFiles.Length) { 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); } } f++; if (f < sourceFiles.Length) { reader = new PdfReader(sourceFiles[f]); n = reader.NumberOfPages; } } document.Close(); }
/// <summary> /// Concatenates multiple PDF files together. /// </summary> /// <param name="outputPDFTitle">The name of the temp file to write</param> /// <param name="args">list of files (paths) to concatentate</param> public bool ConcatPDFs(string outputPDFTitle, String[] args) { Document document = new Document(); try { int f = 0; // we create a reader for a certain document PdfReader reader = new PdfReader(args[f]); // we retrieve the total number of pages int n = reader.NumberOfPages; // step 1: creation of a document-object document = new Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputPDFTitle, FileMode.Create)); // step 3: we open the document document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; // step 4: we add content while (f < args.Length) { 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); } } f++; if (f < args.Length) { reader = new PdfReader(args[f]); // we retrieve the total number of pages n = reader.NumberOfPages; } } // step 5: we close the document document.Close(); return true; } catch (Exception e) { MessageBox.Show(e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); if (document.IsOpen()) { document.Close(); } return false; } }
public static byte[] InsertImage(byte[] sourceFile, iTextSharp.text.Image image, int pageNumber, double x, double y, string headerSignature) { try { var reader = new PdfReader(sourceFile); int n = reader.NumberOfPages; // step 1: creation of a document-object var document = new Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document byte[] bytes; using (var stream = new MemoryStream()) { var writer = PdfWriter.GetInstance(document, stream); // step 3: we open the document document.Open(); var cb = writer.DirectContent; PdfImportedPage page; // step 4: we add content int i = 0; while (i < n) { i++; document.SetPageSize(reader.GetPageSizeWithRotation(i)); document.NewPage(); page = writer.GetImportedPage(reader, i); int 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); // inserisco l'immagine con la firma if (i == pageNumber) { cb.AddImage(image); // Data del giorno cb.BeginText(); var bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.SetFontAndSize(bf, 10); var text = headerSignature; // we show some text starting on some absolute position with a given alignment cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, Convert.ToInt64(x) - 25, Convert.ToInt64(y) + 60, 0); // we tell the contentByte, we've finished drawing text cb.EndText(); } } // step 5: we close the document document.Close(); bytes = stream.ToArray(); } return bytes; } catch(Exception e) { var log = LogManager.GetLogger("Sfera"); log.ErrorFormat("Errore nell'impostazione della firma su pdf - {0}", e, Gipasoft.Library.Utility.GetMethodDescription()); throw; } }
public byte[] MergeFiles(List<byte[]> sourceFiles) { var document = new Document(); var output = new MemoryStream(); // Initialize pdf writer var writer = PdfWriter.GetInstance(document, output); writer.PageEvent = new PdfPageEvents(); // Open document to write document.Open(); var content = writer.DirectContent; // Iterate through all pdf documents foreach (byte[] sourceFile in sourceFiles) { var reader = new PdfReader(sourceFile); var numberOfPages = reader.NumberOfPages; // Iterate through all pages for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++) { // Determine page size for the current page document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex)); // Create page document.NewPage(); var importedPage = writer.GetImportedPage(reader, currentPageIndex); // Determine page orientation var pageOrientation = reader.GetPageRotation(currentPageIndex); if ((pageOrientation == 90) || (pageOrientation == 270)) { content.AddTemplate(importedPage, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height); } else { content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); } } } document.Close(); return output.GetBuffer(); }
private void SaveReferenceWithWatermark(byte[] uploadedFile, string fileName) { PdfReader reader = new PdfReader(uploadedFile); int n = reader.NumberOfPages; Document document = new Document(reader.GetPageSizeWithRotation(1)); PdfWriter writer = PdfWriter.GetInstance(document, new System.IO.FileStream(FilePath + fileName, System.IO.FileMode.Create)); document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; for (int i = 1; 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); BaseFont bf = BaseFont.CreateFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.BeginText(); cb.SetFontAndSize(bf, 26f); cb.SetColorFill(Color.RED); cb.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "CONFIDENTIAL", reader.GetPageSizeWithRotation(i).Width / 2f, reader.GetPageSizeWithRotation(i).Height - 26f, 0); //cb.ShowText(currentApplication.Files[f].FileType.FileTypeName); cb.EndText(); } document.Close(); }
public void zerlegePdfInEinzelseiten(string zuZerlegendeDatei) { try { FileInfo file = new FileInfo(zuZerlegendeDatei); string name = file.Name.Substring(0, file.Name.LastIndexOf(".")); // we create a reader for a certain document PdfReader reader = new PdfReader(zuZerlegendeDatei); // we retrieve the total number of pages int n = reader.NumberOfPages; int digits = 1 + (n / 10); Document document; int pagenumber; string filename; for (int i = 0; i < n; i++) { pagenumber = i + 1; filename = pagenumber.ToString(); while (filename.Length < digits) filename = "0" + filename; filename = "_" + filename + ".pdf"; // step 1: creation of a document-object document = new Document(reader.GetPageSizeWithRotation(pagenumber)); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(this.Unterverzeichnis + "\\" + name + filename, FileMode.Create)); // step 3: we open the document document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page = writer.GetImportedPage(reader, pagenumber); int rotation = reader.GetPageRotation(pagenumber); if (rotation == 90 || rotation == 270) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pagenumber).Height); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } // step 5: we close the document document.Close(); } } catch { //MessageBox.Show("Welche Datei solles sein?"); } }
private static void MergePDFs(IList fileList, string destinationfile) { var document = new Document(); try { var writer = PdfWriter.GetInstance(document, new FileStream(destinationfile, FileMode.Create)); document.Open(); foreach (string filename in fileList) { var reader = new PdfReader(filename); for (int i = 0; i++ < reader.NumberOfPages; ) { document.SetPageSize(reader.GetPageSizeWithRotation(1)); document.NewPage(); if (i == 1) { var fileRef = new Chunk(" "); fileRef.SetLocalDestination(filename); document.Add(fileRef); } if (reader.GetPageRotation(i) == 90 || reader.GetPageRotation(i) == 270) { writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, i), 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); } else writer.DirectContent.AddTemplate(writer.GetImportedPage(reader, i), 1f, 0, 0, 1f, 0, 0); } } } catch (Exception e) { throw e; } finally { document.Close(); } }
// based on example http://itextsharp.sourceforge.net/examples/Concat.cs public string ConcatFilesOld(List <string> files, string targetPath) { try { if (files.Count > 0) { string file = files[0]; iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(GetFullPath(file)); int n = reader.NumberOfPages; iTextSharp.text.Document document = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(1)); iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(targetPath, System.IO.FileMode.Create)); reader.Close(); document.Open(); iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent; iTextSharp.text.pdf.PdfImportedPage page; int rotation; foreach (string sourceFile in files) { int i = 0; iTextSharp.text.pdf.PdfReader reader2 = new iTextSharp.text.pdf.PdfReader(GetFullPath(sourceFile)); n = reader2.NumberOfPages; while (i < n) { i++; document.SetPageSize(reader2.GetPageSizeWithRotation(i)); document.NewPage(); page = writer.GetImportedPage(reader2, i); rotation = reader2.GetPageRotation(i); if (rotation == 90) { cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader2.GetPageSizeWithRotation(i).Height); } else if ((rotation == 270)) { cb.AddTemplate(page, 0f, 1f, -1f, 0f, reader2.GetPageSizeWithRotation(i).Width, 0f); } else { cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); } } writer.FreeReader(reader2); reader2.Close(); } if (document.IsOpen()) { document.CloseDocument(); document.Close(); } return(""); } else { return("No files to process, use AddFile method"); } } catch (Exception e) { return(e.Message); } }
/// <summary> /// Merge CV and covering letter and return pdf location /// </summary> /// <param name="filesToMerge"></param> /// <param name="outputFilename"></param> /// <param name="result"></param> public static void MergePdf(IEnumerable<BulkPrintDocEntry> filesToMerge, string outputFilename, ref BulkPrintCvResult result) { result.ErrorCvs = new List<BulkPrintErrorCvs>(); var bulkPrintDocEntries = filesToMerge as BulkPrintDocEntry[] ?? filesToMerge.ToArray(); if (!bulkPrintDocEntries.Any()) return; var document = new iTextSharp.text.Document(); // initialize pdf writer var writer = PdfWriter.GetInstance(document, new FileStream(outputFilename, FileMode.Create)); // open document to write document.Open(); var content = writer.DirectContent; foreach (var docEntry in bulkPrintDocEntries) { var sCoveringLetterHtml = docEntry.CoveringLetterHtml; // create page document.NewPage(); // add styles var styles = new StyleSheet(); styles.LoadStyle("left", "width", "22%"); styles.LoadTagStyle("td", "valign", "top"); styles.LoadStyle("bordered", "border", "1"); var hw = new HTMLWorker(document, null, styles); hw.Parse(new StringReader(sCoveringLetterHtml)); var sFileName = docEntry.CvFileName.ToLower().Replace(".docx", ".pdf").Replace(".DOCX", ".pdf").Replace(".doc", ".pdf").Replace(".DOC", ".pdf").Replace(".rtf", ".pdf").Replace(".RTF", ".pdf"); if (!File.Exists(sFileName)) { //pdf file not exists result.ErrorCvs.Add(new BulkPrintErrorCvs { Error = "Pdf file does not exists. " + sFileName, ContactId = docEntry.ContactId, ContactName = new Contacts().GetCandidateName(docEntry.ContactId), Document = docEntry.Doc }); continue; } // Create pdf reader var reader = new PdfReader(sFileName); if (!reader.IsOpenedWithFullPermissions) { //pdf file does not have permission result.ErrorCvs.Add(new BulkPrintErrorCvs { Error = "Do not have enough permissions to read the file", ContactId = docEntry.ContactId, ContactName = new Contacts().GetCandidateName(docEntry.ContactId), Document = docEntry.Doc }); continue; } var numberOfPages = reader.NumberOfPages; // Iterate through all pages for (var currentPageIndex = 1; currentPageIndex <= numberOfPages; currentPageIndex++) { // Determine page size for the current page document.SetPageSize(reader.GetPageSizeWithRotation(currentPageIndex)); // Create page document.NewPage(); var importedPage = writer.GetImportedPage(reader, currentPageIndex); // Determine page orientation var pageOrientation = reader.GetPageRotation(currentPageIndex); switch (pageOrientation) { case 90: content.AddTemplate(importedPage, 0, -1, 1, 0, 0, reader.GetPageSizeWithRotation(currentPageIndex).Height); break; case 270: content.AddTemplate(importedPage, 0, 1, -1, 0, reader.GetPageSizeWithRotation(currentPageIndex).Width, 0); break; default: content.AddTemplate(importedPage, 1f, 0, 0, 1f, 0, 0); break; } } } document.Close(); }
public ScanPages ExtractDocInfo(string uniqName, string fileName, int maxPagesToExtractFrom, ref int totalPages) { ScanPages scanPages = null; // Extract text and location from pdf pages using (Stream newpdfStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { List<List<LocationTextExtractionStrategyEx.TextInfo>> extractedTextAndLoc = new List<List<LocationTextExtractionStrategyEx.TextInfo>>(); using (PdfReader pdfReader = new PdfReader(newpdfStream)) { int numPagesToUse = pdfReader.NumberOfPages; if (numPagesToUse > maxPagesToExtractFrom) numPagesToUse = maxPagesToExtractFrom; int numPagesWithText = 0; for (int pageNum = 1; pageNum <= numPagesToUse; pageNum++) { LocationTextExtractionStrategyEx locationStrategy = new LocationTextExtractionStrategyEx(); try { string text = PdfTextExtractor.GetTextFromPage(pdfReader, pageNum, locationStrategy); if (text != "") numPagesWithText++; extractedTextAndLoc.Add(locationStrategy.TextLocationInfo); } catch (Exception excp) { logger.Error("Failed to extract from pdf {0}, page {1} excp {2}", fileName, pageNum, excp.Message); } } // Create new structures for the information int pageNumber = 1; List<List<ScanTextElem>> scanPagesText = new List<List<ScanTextElem>>(); List<int> pageRotations = new List<int>(); foreach (List<LocationTextExtractionStrategyEx.TextInfo> pageInfo in extractedTextAndLoc) { iTextSharp.text.Rectangle pageRect = pdfReader.GetPageSize(pageNumber); int pageRot = pdfReader.GetPageRotation(pageNumber); // Check through found text to see if the page seems to be rotated int[] rotCounts = new int[] { 0, 0, 0, 0 }; if (pageInfo.Count > 2) { foreach (LocationTextExtractionStrategyEx.TextInfo txtInfo in pageInfo) { int thisRotation = GetTextRotation(txtInfo.TopLeft, txtInfo.BottomRight); rotCounts[(thisRotation / 90) % 4]++; } } int maxRot = 0; int maxRotCount = 0; for (int i = 0; i < rotCounts.Length; i++) if (maxRotCount < rotCounts[i]) { maxRotCount = rotCounts[i]; maxRot = i * 90; } //Console.WriteLine("{2} Page{0}rot = {1}", pageNumber, maxRot, uniqName); List<ScanTextElem> scanTextElems = new List<ScanTextElem>(); foreach (LocationTextExtractionStrategyEx.TextInfo txtInfo in pageInfo) { DocRectangle boundsRectPercent = ConvertToDocRect(txtInfo.TopLeft, txtInfo.BottomRight, pageRect, maxRot); ScanTextElem sti = new ScanTextElem(txtInfo.Text, boundsRectPercent); scanTextElems.Add(sti); } scanPagesText.Add(scanTextElems); pageRotations.Add(maxRot); pageNumber++; } // Total pages totalPages = pdfReader.NumberOfPages; scanPages = new ScanPages(uniqName, pageRotations, scanPagesText); pdfReader.Close(); // Sleep for a little to allow other things to run Thread.Sleep(100); } } // Return scanned text from pages return scanPages; }
public static void MergeFiles(string destinationFile, string[] sourceFiles) { try { int f = 0; // we create a reader for a certain document PdfReader reader = new PdfReader(sourceFiles[f]); // we retrieve the total number of pages int n = reader.NumberOfPages; //Console.WriteLine("There are " + n + " pages in the original file."); // step 1: creation of a document-object Document document = new Document(reader.GetPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); // step 3: we open the document document.Open(); PdfContentByte cb = writer.DirectContent; PdfImportedPage page; int rotation; // step 4: we add content while (f < sourceFiles.Length) { 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); } //Console.WriteLine("Processed page " + i); } f++; if (f < sourceFiles.Length) { reader = new PdfReader(sourceFiles[f]); // we retrieve the total number of pages n = reader.NumberOfPages; //Console.WriteLine("There are " + n + " pages in the original file."); } } // step 5: we close the document document.Close(); } catch (Exception e) { string strOb = e.Message; } }
internal void ReplacePage(PdfReader r, int pageImported, int pageReplaced) { PdfDictionary pageN = reader.GetPageN(pageReplaced); if (pagesToContent.ContainsKey(pageN)) throw new InvalidOperationException(MessageLocalization.GetComposedMessage("this.page.cannot.be.replaced.new.content.was.already.added")); PdfImportedPage p = GetImportedPage(r, pageImported); PdfDictionary dic2 = reader.GetPageNRelease(pageReplaced); dic2.Remove(PdfName.RESOURCES); dic2.Remove(PdfName.CONTENTS); MoveRectangle(dic2, r, pageImported, PdfName.MEDIABOX, "media"); MoveRectangle(dic2, r, pageImported, PdfName.CROPBOX, "crop"); MoveRectangle(dic2, r, pageImported, PdfName.TRIMBOX, "trim"); MoveRectangle(dic2, r, pageImported, PdfName.ARTBOX, "art"); MoveRectangle(dic2, r, pageImported, PdfName.BLEEDBOX, "bleed"); dic2.Put(PdfName.ROTATE, new PdfNumber(r.GetPageRotation(pageImported))); PdfContentByte cb = GetOverContent(pageReplaced); cb.AddTemplate(p, 0, 0); PageStamp ps = pagesToContent[pageN]; ps.replacePoint = ps.over.InternalBuffer.Size; }
/// <summary> /// Copy pages from the given reader into the given content. /// </summary> /// <param name="content">The content container into which data will be copied</param> /// <param name="reader"> /// The reader to collect data from a PDF document that has been opened with full permissions /// </param> /// <returns>An await-able task that will complete when all pages are copied</returns> private async Task GetPages(PdfContentByte content, PdfReader reader) { int pageCount = reader.NumberOfPages; for (int currentPage = 1; currentPage <= pageCount; currentPage++) { document.SetPageSize(reader.GetPageSize(currentPage)); document.NewPage(); var page = await Task.Run<PdfImportedPage>(() => writer.GetImportedPage(reader, currentPage)); var rotation = reader.GetPageRotation(currentPage); if (rotation == 90 || rotation == 270) { // Add the page with a transform matrix that rotates 90 degrees. await Task.Run(() => content.AddTemplate(page, 0f, -1f, 1f, 0f, 0f, page.Height)); } else { // Add the page with an identity transform. await Task.Run(() => content.AddTemplate(page, 1f, 0f, 0f, 1f, 0f, 0f)); } } }