72 lines
2.3 KiB
C#

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";
}
}
}