
Ich habe eine 18000 x 18000 Pixel große PDF-Datei, die ich mit matplotlib erstelle. Vor dem Drucken möchte ich eine Vorschau sehen, zumindest mit 20 % Zoom. Leider funktioniert nichts von dem, was ich bisher versucht habe:
- evince öffnet es nur bei einer maximalen Zoomstufe von 1,3 %. Und das, nachdem ich die Cachegröße (über den dconf-Editor) auf ~500 MB erhöht habe – weitere Erhöhungen (ich habe bis zu 8 GB probiert) verbessern den maximalen Zoom nicht. Ich glaube, es gibt noch einen anderen Engpass, den ich nicht kenne.
- mupdf schlägt fehl mit
malloc of array (153904 x 615616 bytes) failed (integer overflow)
- Inkscape belegt einfach meinen gesamten RAM (16 GB) und friert dann ein.
Ich habe alternativ versucht, es als SVG zu exportieren und mit Inkscape zu öffnen, aber auch das füllt meinen RAM und friert dann ein (allerdings langsamer).
Außerdem habe ich versucht, die Datei in sich ergänzende Kacheln aufzuteilen. Die erste Iteration war:
pdfcrop --verbose --margins "10 10 10000 10000" --clip g.pdf out1.pdf
Dies hat nun schon ein paar Stunden gedauert und scheint nicht viel Fortschritt zu bringen. Das Positive daran ist, dass es nicht meinen gesamten RAM verbraucht.
Matplotlib kann auch PS exportieren – aber angesichts der größeren PS-Größe vermute ich, dass das noch schlechter laufen würde.
Können Sie mir helfen, eine Möglichkeit zu finden, meine Datei unter Linux in der Vorschau anzuzeigen?
Falls Sie die Datei ausprobieren möchten, finden Sie sie hierHier.
Antwort1
Wie in den Kommentaren angegeben, war die beste Lösung bisher, das PDF in PNG-Kacheln zuzuschneiden. Der grundlegende Befehl, um dies mit Ghostscript zu tun, lautet:
gs -o out.png -sDEVICE=pngalpha -g2000x2000 -dLastPage=1 -c "<</Install {-1000 -10000 translate}>> setpagedevice" -f in.pdf
Ich habe ein Skript geschrieben, das den Namen und die Auflösung des PDFs sowie die Kachelgröße als Eingaben verwendet und nummerierte Kacheln ausgibt. Es ist ziemlich einfach und geht davon aus, dass das Bild und die Kacheln quadratisch sind. Sie finden esauf GitHub.