我要求将pdf合并在一起。我需要将特定页面的pdf导入另一页。
让我向你说明一下。
我有两个pdf,第一个是50页长,第二个是4页长。我需要在第一个pdf的第13页导入第二个。
我没有找到任何例子。关于如何合并pdf有很多例子,但没有关于在特定页面合并的内容。
基于this exemple看起来我需要逐个迭代所有页面并将其导入新的pdf中。如果你有大的pdf并且需要合并很多,那看起来有点痛苦。我会创建x new pdf来合并x + 1 pdf。
有什么我不明白的,或者它真的是要走的路?
答案 0 :(得分:2)
借用这个例子,这应该很容易做一些修改。您只需要在合并之前添加所有页面,然后在第二个文档中添加所有页面,然后添加所有其余原始页面。
尝试这样的事情(没有经过测试或强健 - 只是一个起点):
// Used the ExtractPages as a starting point.
public void MergeDocuments(string sourcePdfPath1, string sourcePdfPath2,
string outputPdfPath, int insertPage) {
PdfReader reader1 = null;
PdfReader reader2 = null;
Document sourceDocument1 = null;
Document sourceDocument2 = null;
PdfCopy pdfCopyProvider = null;
PdfImportedPage importedPage = null;
try {
reader1 = new PdfReader(sourcePdfPath1);
reader2 = new PdfReader(sourcePdfPath2);
// Note, I'm assuming pages are 0 based. If that's not the case, change to 1.
sourceDocument1 = new Document(reader1.GetPageSizeWithRotation(0));
sourceDocument2 = new Document(reader2.GetPageSizeWithRotation(0));
pdfCopyProvider = new PdfCopy(sourceDocument1,
new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create));
sourceDocument1.Open();
sourceDocument2.Open();
int length1 = reader1.NumberOfPages;
int length2 = reader2.NumberOfPages;
int page1 = 0; // Also here I'm assuming pages are 0-based.
// Having these three loops is the key. First is pages before the merge.
for (;page1 < insertPage && page1 < length1; page1++) {
importedPage = pdfCopyProvider.GetImportedPage(reader1, page1);
pdfCopyProvider.AddPage(importedPage);
}
// These are the pages from the second document.
for (int page2 = 0; page2 < length2; page2++) {
importedPage = pdfCopyProvider.GetImportedPage(reader2, page2);
pdfCopyProvider.AddPage(importedPage);
}
// Finally, add the remaining pages from the first document.
for (;page1 < length1; page1++) {
importedPage = pdfCopyProvider.GetImportedPage(reader1, page1);
pdfCopyProvider.AddPage(importedPage);
}
sourceDocument1.Close();
sourceDocument2.Close();
reader1.Close();
reader2.Close();
} catch (Exception ex) {
throw ex;
}
}