Как избежать нехватки памяти при чтении сложного PDF-файла через iText7?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как избежать нехватки памяти при чтении сложного PDF-файла через iText7?

Сообщение Anonymous »

Я использую iText7 и Java для чтения PDF-файлов, которые не очень велики (10–30 МБ), но содержат огромное количество объектов, что вызывает проблемы OutOfMemoryError при создании и использовании PdfDocument . (Внутренние таблицы внешних ссылок и объекты Map/Tree/Pdf[Dict/Array] исчисляются миллионами.)

Например, Размер одного PDF-файла может составлять всего 33 МБ, но он содержит одну таблицу с миллионом строк, охватывающую 800 страниц, а объем бухгалтерского учета внутри PdfDocument увеличивается до 400 МБ. Вот пример кода и дамп кучи:

Код: Выделить всё

public static void main(String[] args) throws Exception {

// PDF file is 33MB on disk (one big table over 800 pages)
File pdf = new File("big.pdf"); // Also tried InputStream

PdfReader reader = new PdfReader(pdf); // 35MB heap

PdfDocument document = new PdfDocument(reader); // 400MB+ heap

// do stuff ... assuming we didn't get an OOM above
}
Изображение


Мы добавили больше памяти в JVM, но не знаем, насколько большими/сложными могут быть некоторые из этих PDF-файлов, поэтому необходимо долгосрочное решение, в идеале такое, которое позволяет нам читать содержимое по частям или в виде обратного вызова в виде событий (например, XML+STAX/SAX).

Есть ли более эффективный способ потоковой передачи PDF-файла или разбить его на вложенные PDF-документы с учетом файла или входного потока? Мы хотим находить и извлекать такие объекты, как формы, таблицы, всплывающие подсказки и т. д.

Обновление: я связался с командой IText и IText7. не позволяет частичное чтение PDF-файлов. Так что в этом случае я мало что могу сделать, кроме как добавить больше оперативной памяти или предварительно проанализировать PDF-файл mysql и поискать «слишком много данных» (много работы). Я также проверил PDFBox, и у него та же проблема.

Подробнее здесь: https://stackoverflow.com/questions/578 ... via-itext7
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как избежать нехватки оперативной памяти при одновременной обработке данных?
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как избежать «CUDA нехватки памяти» в PyTorch
    Anonymous » » в форуме Python
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous
  • Преобразование SQL Reader в SequentialAccess, чтобы избежать ошибок нехватки памяти
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Преобразование SqlDataReader в SequentialAccess, чтобы избежать ошибок нехватки памяти?
    Anonymous » » в форуме C#
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как избежать сбоя gcc из-за нехватки памяти
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»