2
我需要添加多個pdf(每個單頁)到我的主要pdf。這些需要在特定頁碼之後添加,而不是追加到最後。使用PdfCopy合併pdf文件
我怎麼
1:在一個特定的頁碼
2合併PDF:pdfCopy.AddDocument不可用。我已經測試過版本5.4.3,5.4.5和5.5.10。我在這裏錯過了什麼?所有說使用5.X我是...
'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:如何處理pageToInsert at大於源的頁面總數?
我現在已經看過噸文檔。所有的人說用PdfCopy和.AddDocument ...
Merging multiple PDFs using iTextSharp in c#.net
這是我第一次拿吧....
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();
}
}
}
}
我看過使用.AddPage
以下但這不是我想要的。
http://www.worldbestlearningcenter.com/index_files/csharp-combine-pdf-files.htm
'AddDocument()'方法當然存在於iTextSharp 5.4.5和5.4.11中,但它在5.0.0中不可用。也許你的環境中有不同版本的iTextSharp,也許你使用的是舊版本,卻沒有意識到你使用的是舊版本。如何找出答案?創建一個簡單的Hello World示例,並查看生產者行(請參閱Adobe Reader中的文檔屬性)。這會告訴你實際使用的版本。 –
我已經設置了一個新的測試並下載了版本5.4.5和5.5.10。所以上面的測試代碼來自我的測試項目。 AddDocument不可用。現在我下載的壓縮文件,即使是5.5.10,實際上包含舊版本?你能指出我正確的網址? –
使用'iTextSharp.text'和'iTextSharp.text.pdf',並且dll是pdfa。這對你來說似乎是正確的@BrunoLowagie? –