flush()
, когда вызывается для объектов макета, заставляет эти объекты и их дочерние элементы рисовать (== записывать) свое содержимое в выходной поток писателя. Причина, по которой при ручном вызове flush () записывается только пара байтов, заключается в том, что конструкторы по умолчанию Document
уже установили iText для агрессивного сброса путем перегрузки соответствующих конструкторов:
/**
* Creates a document from a {@link PdfDocument} with a manually set {@link
* PageSize}.
*
* @param pdfDoc the in-memory representation of the PDF document
* @param pageSize the page size
*/
public Document(PdfDocument pdfDoc, PageSize pageSize) {
this(pdfDoc, pageSize, true);
}
/**
* Creates a document from a {@link PdfDocument} with a manually set {@link
* PageSize}.
*
* @param pdfDoc the in-memory representation of the PDF document
* @param pageSize the page size
* @param immediateFlush if true, write pages and page-related instructions
* to the {@link PdfDocument} as soon as possible.
*/
public Document(PdfDocument pdfDoc, PageSize pageSize, boolean immediateFlush)
Что касается совета по общему вопросу: на самом деле нет какой-то функции или конфигурации iText, которая бы волшебным образом делала весь процесс быстрее и эффективнее, но есть некоторые уловки, которые вы можете сделать за пределами iText:
1) Выделить больше ресурсов, очевидно и часто неосуществимо.
2) Выполните многоступенчатую пакетную обработку: объедините 10 файлов в 1 на этапе X, продолжите объединение этих файлов на этапе X + 1. В общем, 1 большой файл будет меньше, чем 10 файлов по отдельности из-за возможного повторного использования ресурсов, таких как шрифты и изображения.
3) Запускайте процесс слияния, когда ресурсы, которые он занимает, больше нигде не нужны, например, ночью, во время обеда и т. Д.
Изменить: что касается того, почему PdfPage # flush () записывает только пару байтов в поток содержимого, это зависит от входного документа, но, скорее всего, указывает на сбрасываемую страницу, которая либо имеет в основном текстовое содержимое, либо много общих ресурсов. SmartMode должен ограничивать количество записываемых в выходной поток, очищаемый страницей, если страница содержит ресурсы, которые были скопированы ранее.
person
Samuel Huylebroeck
schedule
18.01.2017