using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using iTextSharp.text.pdf; using iTextSharp.text; namespace MergePDFs { public partial class frmMergePDFs : Form { public string Status { get { return tsslStatus.Text; } set { tsslStatus.Text = value; Application.DoEvents(); } } public frmMergePDFs() { InitializeComponent(); } private void btnFolder_Click(object sender, EventArgs e) { fbd.SelectedPath = tbFolder.Text; if (fbd.ShowDialog() == DialogResult.OK) tbFolder.Text = fbd.SelectedPath; } private void btnMerge_Click(object sender, EventArgs e) { if (sfd.ShowDialog() == DialogResult.OK) { Document doc = new Document(); PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(sfd.FileName, FileMode.Create)); //writer.PageEvent = new MyPageHelper("Merge2", new Color(System.Drawing.Color.CornflowerBlue)); doc.Open(); PdfContentByte canvas = writer.DirectContent; DirectoryInfo pdfFolder = new DirectoryInfo(tbFolder.Text); FileInfo[] myFiles = pdfFolder.GetFiles("*.pdf"); foreach (FileInfo myFile in myFiles) { PdfReader reader = new PdfReader(myFile.FullName); int numPages = reader.NumberOfPages; int currentPageNumber = 0; PdfOutline outline = null; do { currentPageNumber += 1; Status = string.Format("Processing {0} page {1}", myFile.Name, currentPageNumber); doc.SetPageSize(PageSize.LETTER); doc.NewPage(); PdfImportedPage page = writer.GetImportedPage(reader, currentPageNumber); PdfDestination dest = new PdfDestination(PdfDestination.FIT); if (currentPageNumber == 1) outline = new PdfOutline(canvas.RootOutline, dest, myFile.Name, false); else new PdfOutline(outline, dest, "Page " + currentPageNumber.ToString(), false); canvas.AddTemplate(page, 0, 0); //DrawOutlines(canvas); } while (currentPageNumber < numPages); } doc.Close(); if (MessageBox.Show("Do you want to open the merged file?", "Merging Complete", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) System.Diagnostics.Process.Start(sfd.FileName); } Status = "Processing Complete"; } } }