Probleme mit der Stapelkonvertierung von PNG in PDF mithilfe von convert

Probleme mit der Stapelkonvertierung von PNG in PDF mithilfe von convert
convert /home/bill/TempScan/*.png  myfile.pdf

gibt Fehlermeldung:

convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.

Jede Hilfe wäre willkommen!

Antwort1

convertist ein leistungsstarkes Kommandozeilentool zum Konvertieren von Grafiken. Die Unterstützung für PDF wird von Ghostscript bereitgestellt. Aufgrund einer signifikantenSicherheitslücke in GhostscriptVor Version 9.24 convertwurde die Verwendung von in PDF-Dateien als Notlösung blockiert. Das Problem wurde seit Ghostscript-Version 9.24 behoben. Während Ghostscript-Versionen in allen unterstützten Ubuntu-Versionen (derzeit ab Ubuntu 16.04) auf sichere Versionen aktualisiert werden, kann die Nutzungsbeschränkung weiterhin bestehen.

Die Richtliniendatei ist /etc/ImageMagick-6/policy.xml. Sie können diese Datei als Root-Benutzer bearbeiten, um die Richtlinien zu ändern.

Beseitigung aller Nutzungsbeschränkungen

Für Desktop-Benutzer, die keinen Webserver betreiben, reicht es möglicherweise aus, diese Einschränkungen einfach zu entfernen. Zu diesem Zweck kann man die Datei löschen, aber es ist besser, die Datei durch Umbenennen „herauszuschieben“. Mit diesem Befehl benennen Sie die Datei um. Dadurch werden alle Richtlinien aufgehoben, Sie können sie aber bei Bedarf wiederherstellen:

sudo mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout

Um zur ursprünglichen Situation zurückzukehren, benennen Sie es einfach wieder mit dem ursprünglichen Namen:

sudo mv /etc/ImageMagick-6/policy.xmlout /etc/ImageMagick-6/policy.xml

Beachten Sie, dass durch das Auslagern der Richtliniendatei die Systemsicherheit verringert wird.

Beseitigung der Einschränkung beim Zusammenführen in PDF

In Ihrem speziellen Fall hat gene_wood in einem Kommentar auf die Möglichkeit hingewiesen, die Richtlinie für die Arbeit mit PDF-Dateien selektiv zu lockern, indem eine Zeile auskommentiert wird:

<policy domain="coder" rights="none" pattern="PDF" />

Bearbeiten Sie die Datei und setzen Sie Kommentarzeichen um diese Zeile, um die Regel zu deaktivieren:

<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->

Wenn Sie nicht sämtliche Sicherheitsrichtlinien außer Kraft setzen möchten, ist dies der richtige Weg.

Antwort2

AlsVanadium veröffentlicht, müssen Sie die ImageMagick-Richtlinie ändern.

sudo vim /etc/ImageMagick-6/policy.xml

und ersetzen Sie die Zeile

<policy domain="coder" rights="none" pattern="PDF" />

mit

<policy domain="coder" rights="read|write" pattern="PDF" />

Wenn Sie nur das Schreiben, aber kein Lesen erlauben möchten, können Sie den read|Teil in der Zeile darüber auch löschen.


Übrigens, für diejenigen, die sich für die ImageMagick-Sicherheitslücke interessieren, hier zwei Informationslinks:

Antwort3

Anstatt die Sicherheitsbeschränkungen von ImageMagick wieder zu lockern, würde ich einfach verwendenimg2pdf.

Es ist speziell für diese Art von Anwendungsfall konzipiert.

Sie sollten img2pdf verwenden, wenn Ihre Prioritäten (in dieser Reihenfolge) sind:

  • immer verlustfrei:Das in das PDF eingebettete Bild hat für jeden Pixel immer genau die gleichen Farbinformationen wie die Eingabe
  • klein:wenn möglich, ist der Unterschied in der Dateigröße zwischen dem Eingabebild und dem Ausgabe-PDF nur der Overhead des PDF-Containers selbst
  • schnell:Wenn möglich, wird das Eingabebild einfach so in das PDF-Dokument eingefügt, ohne dass eine CPU-intensive Neukodierung der Pixeldaten erforderlich ist.

Herkömmliche Konvertierungssoftware (wie ImageMagick) würde entweder:

  1. nicht verlustfrei sein, da verlustbehaftete Umkodierung in JPEG
  2. nicht klein sein, da verschwenderische Flate-Kodierung von Rohpixeldaten verwendet wird
  3. nicht schnell sein, da die Eingabedaten neu kodiert werden

Ein weiterer Vorteil, der sich daraus ergibt, dass die Eingabe (in den meisten gängigen Situationen) nicht erneut kodiert werden muss, besteht darin, dass img2pdf viel größere Eingaben verarbeiten kann als andere Software, da die Rohpixeldaten nie in den Speicher geladen werden müssen.

Dies sollte der entsprechende Befehl sein:

img2pdf --out myfile.pdf /home/bill/TempScan/*.png 

Wenn dies aus irgendeinem Grund nicht möglich ist (z. B. weil Sie keine neuen Pakete installieren können), besteht eine weitere Möglichkeit zur verlustfreien Konvertierung darin, convertIhre Bilder in eine mehrseitige TIFF-Datei zu konvertieren und diese dann tiff2pdfmit den Libtiff-Tools zu verwenden.

Antwort4

Dies ist eine noch praktischere Methode, bei der automatisch die Speicherorte der Datei(en) policy.xml abgerufen und die Suche/Ersetzung für alle durchgeführt wird:

for file in `convert -list policy | grep "Path:" | grep -v built | sed 's/Path: \(.*\)/\1/g'`; do sed -i 's/domain="coder" rights="none" pattern="PDF"/domain="coder" rights="read|write" pattern="PDF"/g' $file; done

verwandte Informationen