Я пытаюсь объединить 2 больших файла PDF, не загружая их полностью в память.Как объединить огромные файлы PDF, не загружая их полностью в память с помощью itext 7?
Я попытался с PdfMerger и вручную без PdfMerger благодаря такому коду:
using(var writer = new PdfWriter(new FileStream(@"C:\Test\OutBig.pdf",FileMode.OpenOrCreate)))
using (var outputDocument = new PdfDocument(writer)) {
using (var inputDoc = new PdfDocument(new PdfReader((@"C:\Test\InBig.pdf")))) {
for (int i = 1; i <= inputDoc.GetNumberOfPages(); i++) {
var newp = outputDocument.AddNewPage();
var canvas = new PdfCanvas(newp);
var origPage = inputDoc.GetPage(i);
var copy = origPage.CopyAsFormXObject(outputDocument);
canvas.AddXObject(copy, 0, 0);
copy.Flush();
origPage = null;
canvas.Release();
newp.Flush();
writer.Flush();
canvas = null;
newp = null;
}
}
код работает, но каждая страница загружается в памяти и оставаться загруженной, и я, следовательно, имею более 1 Гб загружен в память.
Знаете ли вы, что хотите объединить 2 pdf-файла без их загрузки в память с помощью itext7?
С уважением,
Patrice
Вы используете 'CopyAsFormXObject' и' AddXObject' для слияния по определенной причине? Вместо «PdfDocument.CopyPagesTo» я имею в виду. – mkl
Даже когда я меняю свой код на использование метода CopyPagesTo, все загружается в память. InputDoc хранит в памяти все. – PatriceVB
Хорошо, мне просто интересно, потому что merge-by-XObject обычно крайне нежелателен. Это было сказано, я еще не тестировал голод памяти iText 7, но я мог бы взять это как начало для изучения ... – mkl