
У меня есть файл 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.