Поддерживает ли iText 7 PdfReader частичное чтение? - PullRequest
0 голосов
/ 13 декабря 2018

Я нахожусь в процессе перехода от iText 5 к 7. Мы обрабатываем огромные PDF-файлы, поэтому анализ всего PDF-файла в памяти совсем не желателен.В 5 в PdfReader есть специальный конструктор, который вызывает «частичный режим».Всегда ли iText 7 анализирует весь PDF или всегда эффективно использует «частичный режим»?

Глядя на источник iText 7, выясняется, что PdfReader больше не кэширует содержимое документа.Вместо этого PdfDocument заботится о кэшировании.Это означает, что должна быть возможность создать новый PdfDocument для каждой страницы, который будет иметь тот же эффект, что и «частичный режим» iText 5 в PdfReader.

Если бы кто-то мог подтвердить мои мысли по этому поводу, я был бы признателен.

1 Ответ

0 голосов
/ 13 декабря 2018

В iText7 поддерживается режим частичного (или, скорее, ленивого) чтения, который по умолчанию активен.Это означает, что объекты будут считываться / загружаться по мере необходимости.Конечно, в любом случае будут прочитаны некоторые необходимые вещи (например, таблица перекрестных ссылок, каталог и т. Д., А также вложенные прямые объекты).

Кроме того, PdfObject имеет метод release() в iText7, которыйосвобождает этот объект из памяти, и этот объект будет прочитан снова при необходимости.Но если вы используете много высокоуровневого API, тогда release() может быть не очень полезным, и создание нескольких экземпляров PdfDocument может быть более полезным и простым.

Важное примечание : Поскольку файлы огромны, они, вероятно, расположены на диске, поэтому очень важно использовать конструкторы PdfReader(String) или PdfReader(File).Те используют случайную возможность чтения.В противном случае, если вы просто передадите InputStream, поток сначала будет полностью считан в память, а затем будет создан документ.Это, конечно, все еще экономит некоторую память для структур данных, но сохраняет исходный документ в памяти, что я считаю нежелательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...