Просмотр очень больших PDF-файлов на Linux

Просмотр очень больших PDF-файлов на Linux

У меня есть файл PDF размером 18000x18000 пикселей, который я генерирую через matplotlib. Перед печатью я хотел бы просмотреть его, по крайней мере, в 20% масштабе. К сожалению, ничего из того, что я пробовал, не работает:

  • evince откроет его только при максимальном уровне масштабирования 1,3%. Это после того, как я увеличил размер кэша (через редактор dconf) до ~500 МБ - дальнейшее увеличение (я пробовал до 8 ГБ) не улучшает максимальный масштаб. Я думаю, что есть еще какое-то узкое место, о котором я не знаю.
  • mupdf терпит неудачу сmalloc of array (153904 x 615616 bytes) failed (integer overflow)
  • Inkscape просто занимает всю мою оперативную память (16 ГБ) и затем зависает.

В качестве альтернативы я пробовал экспортировать его в SVG и открыть в Inkscape, но это тоже заполняет оперативную память, а затем приложение зависает (но делает это медленнее).

Кроме того, я попытался разделить файл на дополнительные фрагменты, первая итерация была такой:

pdfcrop --verbose --margins "10 10 10000 10000" --clip g.pdf out1.pdf

Это заняло несколько часов и, похоже, не дало особого прогресса. С другой стороны, процесс не занял всю мою оперативную память.

Matplotlib также имеет возможность экспортировать PS, но, учитывая больший размер PS, я подозреваю, что это будет еще хуже.

Можете ли вы помочь мне найти способ предварительного просмотра моего файла в Linux?

Если вы хотите попробовать файл, вы можете найти егоздесь.

решение1

Как указано в комментариях, лучшим решением на данный момент было обрезать PDF на плитки PNG. Базовая команда для этого с помощью скрипта ghost:

gs -o out.png -sDEVICE=pngalpha -g2000x2000 -dLastPage=1 -c "<</Install {-1000 -10000 translate}>> setpagedevice" -f in.pdf

Я пошел дальше и написал скрипт, который может принимать имя и разрешение PDF и размер плитки в качестве входных данных, а на выходе получать пронумерованные плитки. Он довольно прост и предполагает, что изображение и плитки квадратные. Вы можете найти егона GitHub.

Связанный контент