我有一個頁面上有一個插件控件的PDF。我需要將它與另一個pdf合併,但是當我這樣做時,插件被重新組合爲一個空白的矩形。有沒有合併和保存插件控件的方法?如果重要,該插件是Dessault Systemes 3D Via Composer播放器控件,從http://www.3ds.com/products/3dvia/3dvia-composer/resource-center/安裝iTextSharp合併並保留插件
我使用的代碼是簡單的作家getinstance,contentbyte directcontent,getimportedpage,addtemplate。沒有什麼花哨。
FileStream docStream = new FileStream(@"C:\Temp\Merged.pdf", FileMode.Create);
Document newDocument = new Document(PageSize.A4.Rotate());
PdfWriter pdfWriter = PdfWriter.GetInstance(newDocument, docStream);
try
{
newDocument.Open();
PdfContentByte pdfContentByte = pdfWriter.DirectContent;
newDocument.NewPage();
PdfReader mainPage = new PdfReader(@"C:\Temp\PageWithPlugin.pdf");
PdfImportedPage importedPage1 = pdfWriter.GetImportedPage(mainPage, 1);
pdfContentByte.AddTemplate(importedPage1, 0, 0);
mainPage.Close();
PdfReader smgPages = new PdfReader(@"C:\Temp\MorePages.pdf");
for (int page = 1; page <= smgPage.NumberOfPages; page++)
{
newDocument.NewPage();
PdfImportedPage importedPage = pdfWriter.GetImportedPage(smgPages, page);
pdfContentByte.AddTemplate(importedPage, 0, 0);
}
smgPages.Close();
}
finally
{
docStream.Flush();
if (newDocument != null)
newDocument.Close();
docStream.Close();
}
「PdfCopy」或「PdfSmartCopy」都可以工作。 'PdfSmartCopy'比較導入到PDF中的所有流,以確保沒有重複。開銷,但在某些情況下可能會導致**很多較小的PDF。 –
完美運作。及時回覆非常感謝。 – JeffLit
不要看起來像馬的禮物,但...如果有人使用這個解決方案,k循環會有一個小問題。在第零個頁面之後,頁面的數量將被一個文檔關閉,並且pdfReader不斷被釋放並重新讀取每個頁面,這不是必需的。我認爲這是對代碼部分的改進: – JeffLit