#.net #itext #itext7
#.net #itext #itext7
Вопрос:
Я пытаюсь выполнить некоторые манипуляции с существующим документом (размером 3 ГБ). Я не нахожу проблем при чтении документа с помощью PdfReader. Я получаю исключение памяти при копировании существующих страниц документа в новый документ. Пожалуйста, найдите фрагмент кода, который я создал
string inputFile = CommonHelper.GetPdfFilePath("MergeRootAttributesOntoPage.pdf");
string outputFile = CommonHelper.GetOutputPdfFile("MergeRootAttributesOntoPage_iText7");
PdfReader pdfReader = new PdfReader(
new RandomAccessSourceFactory().SetForceRead(false).CreateBestSource(inputFile),
new ReaderProperties()
);
PdfDocumentWrapper sourceDocument = new PdfDocumentWrapper(pdfReader, true);
PdfWriter pdfWriter = new PdfWriter(outputFile).SetSmartMode(true);
PdfDocumentWrapper destinationDocument = new PdfDocumentWrapper(pdfWriter);
destinationDocument.InitializeOutlines();
sourceDocument.CopyPagesTo(1, sourceDocument.GetNumberOfPages(),destinationDocument);
sourceDocument.Close();
destinationDocument.Close();
Сценарий копирования с объектом слияния PDF :
string inputFile = CommonHelper.GetPdfFilePath("MergeRootAttributesOntoPage.pdf");
string outputFile = CommonHelper.GetOutputPdfFile("MergeRootAttributesOntoPage_iText7");
PdfReader pdfReader = new PdfReader(
new RandomAccessSourceFactory().SetForceRead(false).CreateBestSource(inputFile),
new ReaderProperties()
);
PdfDocumentWrapper sourceDocument = new PdfDocumentWrapper(pdfReader, true);
PdfWriter pdfWriter = new PdfWriter(outputFile).SetSmartMode(true);
PdfDocumentWrapper destinationDocument = new PdfDocumentWrapper(pdfWriter);
PdfMerger resultDocument = new PdfMerger(destinationDocument).SetCloseSourceDocuments(true);
resultDocument.Merge(sourceDocument, 1, sourceDocument.GetNumberOfPages()).Close();
resultDocument.Close();
Копируйте страницы одну за другой
string inputFile = CommonHelper.GetPdfFilePath("MergeRootAttributesOntoPage.pdf");
string outputFile = CommonHelper.GetOutputPdfFile("MergeRootAttributesOntoPage_iText7");
PdfReader pdfReader = new PdfReader(
new RandomAccessSourceFactory().SetForceRead(false).CreateBestSource(inputFile),
new ReaderProperties()
);
PdfDocumentWrapper sourceDocument = new PdfDocumentWrapper(pdfReader, true);
PdfWriter pdfWriter = new PdfWriter(outputFile).SetSmartMode(true);
PdfDocumentWrapper destinationDocument = new PdfDocumentWrapper(pdfWriter);
destinationDocument.SetCloseWriter(false);
destinationDocument.InitializeOutlines();
PdfPageFormCopier pdfPageFormCopier = new PdfPageFormCopier();
for (int i = 1; i <= sourceDocument.GetNumberOfPages(); i)
{
destinationDocument.AddPage(sourceDocument.GetPage(i).CopyTo(destinationDocument, pdfPageFormCopier));
}
Все вышеперечисленные методы завершились исключением памяти при копировании объектов
Любое решение приветствуется
Комментарии:
1. Сколько памяти потребляется кодом? Вы пробовали увеличивать размер памяти?
2. Используется почти 91 % памяти процессора
3. 271265792 значения, полученные с помощью следующего кода « Process currentProc = Процесс. GetCurrentProcess(); long memoryUsed = currentProc.PrivateMemorySize64; «
4. Это меньше 270 МБ, правильно? Это не похоже на высокое потребление памяти в современной среде