У меня есть PDF-файл с элементом управления плагином на одной странице. Мне нужно объединить его с другим PDF-файлом, но когда я это делаю, плагин перерисовывается как пустой прямоугольник. Есть ли способ объединить и сохранить управление надстройками? Если это важно, подключаемый модуль представляет собой элемент управления Dessault Systemes 3D Via Composer Player, установленный с http://www.3ds.com/products/3dvia/3dvia-composer/resource-center/
Код, который я использую, это простой писатель 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-файлов. 20.07.2011