В iText7 поддерживается режим частичного (или, скорее, ленивого) чтения, который по умолчанию активен.Это означает, что объекты будут считываться / загружаться по мере необходимости.Конечно, в любом случае будут прочитаны некоторые необходимые вещи (например, таблица перекрестных ссылок, каталог и т. Д., А также вложенные прямые объекты).
Кроме того, PdfObject
имеет метод release()
в iText7, которыйосвобождает этот объект из памяти, и этот объект будет прочитан снова при необходимости.Но если вы используете много высокоуровневого API, тогда release()
может быть не очень полезным, и создание нескольких экземпляров PdfDocument
может быть более полезным и простым.
Важное примечание : Поскольку файлы огромны, они, вероятно, расположены на диске, поэтому очень важно использовать конструкторы PdfReader(String)
или PdfReader(File)
.Те используют случайную возможность чтения.В противном случае, если вы просто передадите InputStream
, поток сначала будет полностью считан в память, а затем будет создан документ.Это, конечно, все еще экономит некоторую память для структур данных, но сохраняет исходный документ в памяти, что я считаю нежелательным.