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
convert
ist 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 convert
wurde 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:
- nicht verlustfrei sein, da verlustbehaftete Umkodierung in JPEG
- nicht klein sein, da verschwenderische Flate-Kodierung von Rohpixeldaten verwendet wird
- 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, convert
Ihre Bilder in eine mehrseitige TIFF-Datei zu konvertieren und diese dann tiff2pdf
mit 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