So destillieren / rastern Sie ein PDF in Linux

Wir haben einen Drucker in unserem Büro, der PDF-Dateien von einem USB-Stick druckt. Es druckt die meisten Dateien in Ordnung, hat aber Probleme mit einigen, insbesondere mit Latex generierten. Einige PDFs es weigert sich einfach zu drucken, einige PDFs es druckt mit Kurier-Schriftart, und einige es druckt gut mit Ausnahme von Gleichungen.

Ich suche nach einer Möglichkeit, PDFs in ein Dead-Sure-Format zum Drucken zu "destillieren". Entweder durch Vereinfachung / Normalisierung der PDF-Datei bis zu dem Punkt, dass jeder Renderer sie rendert richtig, oder indem Sie einfach jede Seite zu einem 600dpi-Rasterbild im PDF machen. (Ich könnte das PDF in einzelne Rasterbilder aufteilen und manuell kombinieren, aber ich möchte etwas Skriptfähiges.)

Die Größe der Ausgabedatei spielt keine Rolle, solange sie sicher gedruckt wird, das A4-Papierformat (oder das Original) und eine Auflösung von 300~600 dpi aufweist.

Author: Sampo, 2014-08-25

5 answers

Nachdem ich einige Optionen zum Rendern der Schriftarten als Konturen erfolglos ausprobiert hatte (einschließlich diese Frage und pstoedit), habe ich eine Möglichkeit gefunden, das PDF mithilfe von ImageMagick einfach in gerasterte Form zu konvertieren:

convert -density 600 +antialias input.pdf output.pdf

Dadurch wird eine PDF-Datei erstellt, die mit 600 dpi gerendert wird und Antialias deaktiviert ist (bei dieser Auflösung nicht erforderlich).

Die Ausgabedateien sind riesig (~30 MB für ein 8-seitiges Dokument) und extrem langsam zu drucken, sollten aber funktionieren, solange der Drucker über genügend Speicher zum Rendern verfügt Inhalt.

 26
Author: Sampo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-04-13 12:34:30

Ich denke, mein aktueller bevorzugter Weg ist:

  1. Verwenden Sie pdftoppm, um die PDF-Datei in eine Reihe von Bildern zu konvertieren.

    $ pdftoppm Quelle.pdf-Ausgabe -png -

  2. Verwenden Sie img2pdf, um eine PDF-Datei aus diesen Bildern zu erstellen.

    $ img2pdf *.png -o Ausgabe.pdf -

Die gute Nachricht ist, dass Sie ein Bash-Skript erstellen können, um den gesamten Prozess für Sie zu automatisieren.

Hier ist ein bash-Skript, das destillieren Sie alle PDF-Dateien in einem Verzeichnis und bewahren Sie die Originale in einem neuen Verzeichnis "Originale".

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

Credits: img2pdf Antwort & pdftoppm Antwort & bash script Hilfe: 1 & 2

(Randnotiz) Sie können img2pdf installieren mit:

$ sudo apt install img2pdf

 2
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-10-11 08:15:47

Die Verwendung von imagemagick ist meiner Erfahrung nach bei hohen Auflösungen und/oder großen Dateien nicht stabil. Viele Drucker können 1200 dpi und höher ausführen, daher sollte die gerasterte Datei eine ähnliche Auflösung haben. Eine bessere Lösung ist die Verwendung von pdf2djvu, das schneller und robuster ist und sogar Dateien mit einer Größe erstellt, die häufig mit der ursprünglichen PDF-Datei mit 1200 oder 2400 dpi konkurriert. Diese Dateien können mit okular oder evince angezeigt und gedruckt werden.

Beispiel:

pdf2djvu -d 2400 file.pdf > rastered.djvu
 1
Author: mjo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-10-07 12:59:38

Dies ist eine Verbesserung der akzeptierten Antwort: Mit gs kann die Datei auch so optimiert werden, dass sie nicht so groß ist, und gelegentlich wird ein Kompatibilitätsproblem behoben: Als Bash-Skript (dh setzen Sie dies in Ihr~/.aliase und öffnen Sie ein neues Terminalfenster):

rasterizePDF() {
echo "Usage: rasterizePDF fromfile.pdf : this makes a 300dpi raster version. And optimizes it with ghostscript. Output is fromfile.pdf-scanned.pdf"
tmpfile=$(mktemp).pdf
echo "Creating raster version... (in $tmpfile)"
convert -render -density 300 $1 $tmpfile
echo "Optimizing to shrink pdf file..."
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=$1-scanned.pdf $tmpfile
evince $1-scanned.pdf&
echo "Finished; launched viewer."
}

Ich benutze dies sehr häufig: Jedes Mal, wenn ich ein PDF kommentierte oder ein Autogramm auf einem signierte usw. und diese Änderungen beheben oder ultra-portabel machen möchte.

 0
Author: CPBL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-09-26 18:25:58

Eine andere Alternative ist die Konvertierung in Bilder über

Pdfimages

Auf der Manpage speichert "Pdfimages" Bilder aus einer PDF-Datei (Portable Document Format) als Portable Pixmap (PPM), Portable Bitmap (PBM) oder JPEG-Dateien. Pdfimages liest die PDF-Datei PDF-Datei, scannt eine oder mehrere Seiten und schreibt eine PPM -, PBM-oder JPEG-Datei für jedes Bild, image-root-nnn.xxx, wobei nnn die Bildnummer und xxx der Bildtyp ist (.ppm, .pbm, .jpg)."

Dann benutze pdftk zurück in PDF konvertieren https://www.pdflabs.com/docs/pdftk-cli-examples/

Schließlich drucken Sie diese Datei. Offensichtlich ist die Schlüsselfrage, wie dies zu skripten ist.

Sie können dies über eine einfache Webseite für Benutzer automatisieren. Schließlich drucken sie die konvertierte Datei aus und Sie sollten eine höhere Leistung und einen funktionierenden Ausdruck haben?

 -1
Author: dtbnguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-02-25 14:05:35