Ich versuche, ein PDF in ein PNG-Bild zu konvertieren (mindestens das Cover eines). Ich extrahiere erfolgreich die erste Seite des PDF mit pdftk. Ich benutze imagemagick, um die Konvertierung durchzuführen:
convert cover.pdf cover.png
Dies funktioniert, aber leider wird die Datei cover.png falsch gerendert (einige der Alpha-Objekte in der PDF-Datei werden nicht richtig gerendert). Ich weiß, dass ImageMagick GhostScript verwendet, um die Konvertierung durchzuführen, und wenn ich es direkt mit gs mache, kann ich die gewünschten Ergebnisse erzielen, aber ich würde lieber die Konvertierungsbibliothek verwenden, da sie andere Tools enthält, die ich nutzen möchte.
Dieser Befehl in GhostScript führt das gewünschte Bild aus:
gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf
Ich frage mich, ob es eine Möglichkeit gibt, Argumente durch Konvertieren in GhostScript zu übergeben, oder ob ich GhostScript nicht direkt aufrufen kann.
quelle
Antworten:
Sie können eine Befehlszeile mit zwei Befehlen (
gs
,convert
) verwenden, die über eine Pipe verbunden sind, wenn der erste Befehl seine Ausgabe in stdout schreiben kann und der zweite seine Eingabe von stdin lesen kann.... -o %stdout ...
) schreiben .convert -background transparent - output.png
) lesen .Problem gelöst:
Komplette Lösung:
Aktualisieren
Wenn Sie ein separates PNG pro PDF-Seite haben möchten, können Sie die folgende
%d
Syntax verwenden:Dies erzeugt PNG Dateien mit dem Namen
page-000.png
,page-001.png
... (Beachten Sie, dass die%d
-Zählwaagen nullbasiert ist -file-000.png
entspricht der Seite 1 des PDF,001
auf Seite 2 ...Wenn Sie Ihren transparenten Hintergrund für ein 100-seitiges PDF beibehalten möchten, tun Sie dies auch
quelle
-dBATCH -dNOPAUSE -dQUIET
die gs-Optionen hinzufüge .-o output.file
und dies wird automatisch und stillschweigend-dBATCH -dNOPAUSE -dQUIET
gleichzeitig eingestellt.Von allen verfügbaren Alternativen fand ich Inkscape, um die genauesten Ergebnisse beim Konvertieren von PDFs in PNG zu erzielen. Insbesondere wenn die Quelldatei transparente Ebenen hatte, war Inkscape dort erfolgreich, wo Imagemagick und andere Tools fehlschlugen.
Dies ist der Befehl, den ich benutze:
Und hier ist es in einem Skript implementiert:
quelle
Verwenden Sie die folgenden Befehle, um PDF-Dateien in Bilddateien zu konvertieren:
Für PNG
gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf
Für JPG
gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf
Wenn Sie mehrere Seiten haben, fügen Sie den Namen % 03d hinzu
gs -o a%03d.jpg a.pdf
Was jede Option bedeutet:
quelle
Sie können auch die im
poppler-utils
Paket enthaltenen Befehlszeilenprogramme verwenden :Beispiel:
quelle
Die akzeptierte Antwort konnte nicht funktionieren. Dann stellte sich heraus, dass die Lösung ohnehin viel einfacher ist, da Ghostscript nicht nur PNG nativ unterstützt, sondern sogar mehrere verschiedene "Codierungen" :
png256
png16
pnggray
pngmono
Der Shell-Befehl, der für mich funktioniert, lautet:
Es wird Seite 2 von test.pdf unter Verwendung der
pnggray
Codierung und 500 DPI in test.png gespeichert .quelle
Hier ist eine deutsche Diskussion über ein Problem wie dieses für SVG-Dateien, bei dem es mithilfe von gelöst wird
Vielleicht funktioniert das auch bei Ihnen.
quelle
Ich werde meine Lösung hinzufügen, obwohl ich dachte, sein Thread ist alt. Vielleicht hilft das trotzdem jemandem.
Zuerst muss ich das PDF generieren. Ich benutze XeLaTeX dafür:
Jetzt analysieren ImageMagick und GraphicMagic beide Parameter von links nach rechts, sodass der Parameter ganz links zuerst ausgeführt wird. Am Ende habe ich diese Sequenz für eine optimale Verarbeitung verwendet:
Es gibt schöne Grafiken auf transparentem Hintergrund, die auf das zugeschnitten sind, was sich tatsächlich auf der Seite befindet. Die
-density
und-resize
Parameter, geben eine bessere Granularität und die Gesamtauflösung erhöhen.Ich schlage vor, zu prüfen, ob die Dichte für Sie verringert werden kann. Dadurch wird die Konvertierungszeit verkürzt.
quelle
Für ein PDF, das ImageMagick mit ungenauen Farben lieferte, stellte ich fest, dass GraphicsMagick einen besseren Job machte:
quelle
Da diese Seite auch alternative Tools auflistet, erwähne ich xpdf, das Befehlszeilentools enthält, die für Linux / Windows / Mac kompiliert sind. Unterstützt Transparenz. Ist kostenlos für den kommerziellen Gebrauch - im Gegensatz zu Ghostscript, das wirklich unverschämte Preise hat.
In einem Test mit einer riesigen PDF-Datei war es 7,5% schneller als Ghostscript.
(Es hat auch PDF zu Text und HTML Konverter)
quelle
Versuchen Sie, eine einzelne Seite zu extrahieren.
$ page = 4
quelle
Meine Lösung ist viel einfacher und direkter. Zumindest funktioniert es auf meinem PC so (mit den folgenden Spezifikationen):
mit
Also, hier ist was ich auf meinem laufe
file.pdf
:quelle
Sie können ImageMagick verwenden, ohne die erste Seite der PDF-Datei mit anderen Tools zu trennen. Mach einfach
Hier erhöhe ich die Nenndichte um 400% (72 * 4 = 288) und verkleinere sie dann um 1/4 (25%). Dies ergibt eine viel bessere Qualität für das resultierende PNG.
Wenn das PDF jedoch CMYK ist, unterstützt PNG dies nicht. Es müsste in sRGB konvertiert werden, insbesondere wenn es transparent ist, da Ghostscript CMYK nicht mit Alpha verarbeiten kann.
quelle