Torna al Thread

public bool MergePdfFiles(string[] pdfFiles, string outputPath) { bool 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; // current input pdf page count iTextSharp.text.Document pdfDoc = null; // the output pdf document PdfWriter writer = null; PdfContentByte cb = null; // Declare a variable to hold the imported pages PdfImportedPage page = null; int rotation = 0; // 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.Color.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); // 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 FileStream fs = new FileStream(outputPath, FileMode.Create); writer = PdfWriter.GetInstance(pdfDoc, fs); // Set metadata and open the document pdfDoc.AddTitle("titolo"); pdfDoc.AddAuthor("autore"); pdfDoc.AddCreationDate(); pdfDoc.AddCreator(""); // application name pdfDoc.AddSubject(""); string titles = ""; pdfDoc.Open(); // Instantiate a PdfContentByte object cb = writer.DirectContent; // Now loop thru the input pdfs while (f < pdfCount) { // save title info or filename for keywords if (reader.Info["Title"] != null && reader.Info["Title"].ToString() != "") titles += "," + reader.Info["Title"].ToString(); else titles += ",<" + Path.GetFileName(fileName) + ">"; // 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) { // First create a paragraph using the filename as the heading Paragraph para = new iTextSharp.text.Paragraph(Path.GetFileName(fileName).ToUpper(), bookmarkFont); // Then create a chapter from the above paragraph Chapter chpter = new iTextSharp.text.Chapter(para, f + 1); // Finally add the chapter to the document pdfDoc.Add(chpter); }*/ // 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); } // 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; } } // add informations about titles of the original pdf pdfDoc.AddKeywords(titles.Substring(1)); // When all done, we close the documwent so that the pdfwriter object can write it to the output file pdfDoc.Close(); result = true; } } catch(Exception ex) { throw new Exception(ex.Message); } return result; }
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5