I need to add multiple pdfs (each single page) to my main pdf. These need to be added after a specific page number and not appended to the end.
How do i
1: merge the pdf at a specific page number
2: pdfCopy.AddDocument is not available. I have tested with version 5.4.3, 5.4.5 and 5.5.10. What am i missing here? All say to use 5.X which i am...
'PdfCopy' does not contain a definition for 'AddDocument' and no extension method 'AddDocument' accepting a first argument of type 'PdfCopy' could be found (are you missing a using directive or an assembly reference?)
3: How to handle when pageToInsert at is greater than total number of pages in the source?
I have looked at tons of docs by now. All tell to use PdfCopy and .AddDocument...
Merging multiple PDFs using iTextSharp in c#.net
here is my first take at it....
using System;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
namespace PdfMergeTest
{
public partial class Form1 : Form
{
private const string baseFile = "baseFile.tmp";
private const string baseTempPdfFileName = "temp.pdf";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnMerge_Click(object sender, EventArgs e)
{
if (!CheckBasePaths())
return;
//get the files to merge to baseFile
var filesToMerge = GetAllFilesToMerge();
if (filesToMerge.Length == 0)
return;
//get basefile to which we need to merge the above files, it is with .tmp ext
var baseFileWithPath = GetBaseFile();
if (string.IsNullOrWhiteSpace(baseFileWithPath))
return;
//temp base pdf
var tempPdfWithPath = GetBaseTempFile();
if (string.IsNullOrWhiteSpace(tempPdfWithPath))
return;
//loop through the files to merge and merge into baseFile
var page = 2; //page where to merge the file, we are not appending to the end. Actual code will find the page from source where to merge and will add 1 to it
foreach (FileInfo toMerge in filesToMerge)
{
//copy the base file as temp file for source; for debugging purposes at this time
File.Copy(baseFileWithPath, tempPdfWithPath, true);
//start merging, first at #2, second at #4, third at #6 and so on
MergeFiles(baseFileWithPath, tempPdfWithPath, toMerge.FullName, page);
page += 2;
}
}
private bool CheckBasePaths()
{
if (string.IsNullOrWhiteSpace(txtBaseDir.Text))
{
MessageBox.Show("No Base Directory");
return false;
}
if (string.IsNullOrWhiteSpace(txtFilesToMergeToBase.Text))
{
MessageBox.Show("No files to merge Directory");
return false;
}
if (!Directory.Exists(txtBaseDir.Text))
{
MessageBox.Show("Base dir does not exist");
return false;
}
if (!Directory.Exists(txtFilesToMergeToBase.Text))
{
MessageBox.Show("Files to merge dir does not exist");
return false;
}
return true;
}
private FileInfo[] GetAllFilesToMerge()
{
DirectoryInfo d = new DirectoryInfo(txtFilesToMergeToBase.Text);
FileInfo[] files = d.GetFiles("*.pdf");
if (files.Length == 0)
MessageBox.Show("No files to merge");
return files;
}
private String GetBaseFile()
{
var myBaseFile = Path.Combine(txtBaseDir.Text, baseFile);
if (!File.Exists(myBaseFile))
{
myBaseFile = "";
MessageBox.Show("Base file missing");
}
return myBaseFile;
}
private String GetBaseTempFile()
{
var myBaseTempFile = Path.Combine(txtBaseDir.Text, baseTempPdfFileName);
return myBaseTempFile;
}
private void MergeFiles(string originalFile, string sourceFile, string toMergeFile, int insertPage)
{
Document document = null;
PdfCopy pdfCopy = null;
PdfReader pdfReader = null;
try
{
//Step#1: create a document object
document = new Document();
//Step#2: create a writer that listen to the document
pdfCopy = new PdfSmartCopy(document, new FileStream(originalFile, FileMode.Create));
if (pdfCopy == null)
return;
//Step#3: open document
document.Open();
//Step#4: create a reader for the toMergeFile and add document
pdfReader = new PdfReader(toMergeFile);
//add the entire document instead of page by page
pdfCopy.AddDocument(pdfReader);
pdfReader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (pdfReader != null) pdfReader.Close();
if (pdfCopy != null) pdfCopy.Close();
if (document != null) document.Close();
}
}
}
}
I have looked at following using .AddPage
but this is not what i want.
http://www.worldbestlearningcenter.com/index_files/csharp-combine-pdf-files.htm