Ich möchte ein PDF mit einigen farbigen Texten und Bildern in ein anderes PDF mit nur Schwarzweiß umwandeln, um die Abmessungen zu verringern. Außerdem möchte ich den Text als Text behalten, ohne die Seitenelemente in Bilder umzuwandeln. Ich habe den folgenden Befehl ausprobiert:
convert -density 150 -threshold 50% input.pdf output.pdf
in einer anderen frage einen link gefunden , der aber macht was ich nicht will: der text in der ausgabe wird in ein schlechtes bild umgewandelt und ist nicht mehr auswählbar. Ich habe es mit Ghostscript versucht:
gs -sOutputFile=output.pdf \
-q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sColorConversionStrategy=/Mono \
-sColorConversionStrategyForImages=/Mono \
-sProcessColorModel=/DeviceGray \
$1
es gibt mir aber folgende fehlermeldung:
./script.sh: 19: ./script.sh: output.pdf: not found
Gibt es eine andere Möglichkeit, die Datei zu erstellen?
bash
pdf
imagemagick
ghostscript
color-management
BowPark
quelle
quelle
Antworten:
Das gs Beispiel
Der
gs
Befehl, den Sie oben ausführen, hat einen Trailing,$1
der normalerweise zum Übergeben von Befehlszeilenargumenten an ein Skript gedacht ist. Ich bin mir also nicht sicher, was Sie tatsächlich versucht haben, aber ich vermute, dass Sie versucht haben, diesen Befehl in ein Skript zu schreibenscript.sh
:Und führe es so aus:
Nicht sicher, wie Sie dieses Skript einrichten, aber es muss ausführbar sein.
Irgendetwas scheint mit diesem Skript definitiv nicht in Ordnung zu sein. Als ich es versuchte, bekam ich stattdessen diesen Fehler:
Eine Alternative
Anstelle dieses Skripts würde ich stattdessen dieses aus der SU-Frage verwenden.
Dann führe es so aus:
quelle
sProcessColorModel
wasdProcessColorModel
stattdessen sein sollte .Ich habe hier ein Skript gefunden , das das kann. Es setzt
gs
aber auch voraus, was Sie zu haben scheinenpdftk
. Sie haben Ihre Distribution nicht erwähnt, aber auf Debian-basierten Systemen sollten Sie in der Lage sein, sie mit zu installierenSie können RPMs für sie finden hier .
pdftk
Speichern Sie das Skript nach der Installation untergraypdf.sh
und führen Sie es folgendermaßen aus:Es wird eine Datei mit dem Namen erstellt
input-gray.pdf
. Ich füge das ganze Skript hier ein, um einen "Link Rot" zu vermeiden:quelle
Ich hatte auch einige gescannte Farb-PDFs und Graustufen-PDFs, die ich in SW konvertieren wollte. Ich habe versucht mit
gs
mit dem hier aufgeführten Code zu arbeiten , und die Bildqualität ist gut, wenn der PDF-Text noch vorhanden ist. Dieser gs-Code konvertiert jedoch nur in Graustufen (wie in der Frage angegeben) und hat immer noch eine große Dateigröße.convert
ergibt sehr schlechte Ergebnisse bei direkter Verwendung.Ich wollte bw pdfs mit guter Bildqualität und kleiner Dateigröße. Ich hätte Terdons Lösung ausprobiert, aber ich konnte
pdftk
mit yum (zum Zeitpunkt des Schreibens) nicht auf CentOS 7 zugreifen.Meine Lösung verwendet
gs
, um Graustufen-BMP-Dateien aus dem PDF zu extrahieren,convert
diese BMPs auf SW zu beschränken und sie als TIFF-Dateien zu speichern, und dann img2pdf , um die TIFF-Bilder zu komprimieren und alle zu einem PDF zusammenzuführen.Ich habe versucht, direkt aus dem PDF zu tiff zu wechseln, aber die Qualität ist nicht die gleiche, deshalb speichere ich jede Seite in bmp. Für eine einseitige PDF-Datei
convert
es eine großartige Aufgabe, von BMP zu PDF zu wechseln. Beispiel:gs
Kann bei mehreren Seiten mehrere PDF-Dateien zu einer zusammenführen,img2pdf
ergibt jedoch eine kleinere Dateigröße als gs. Die Tiff-Dateien müssen als Eingabe für img2pdf dekomprimiert werden. Beachten Sie, dass die zwischengeschalteten BMP- und TIFF-Dateien bei einer großen Anzahl von Seiten in der Regel groß sind.pdftk
oderjoinpdf
wäre besser, wenn sie komprimierte pdf-Dateien aus zusammenführen könnenconvert
.Ich stelle mir vor, es gibt eine elegantere Lösung. Meine Methode liefert jedoch Ergebnisse mit einer sehr guten Bildqualität und einer viel kleineren Dateigröße. Führen Sie OCR erneut aus, um den Text wieder in das bw-PDF zu laden.
Mein Shell-Skript verwendet gs, convert und img2pdf. Ändern Sie die am Anfang aufgeführten Parameter (Anzahl der Seiten, Scan-dpi, Schwellenwert% usw.) nach Bedarf und führen Sie sie aus
chmod +x ./pdf2bw.sh
. Hier ist das vollständige Skript (pdf2bw.sh):quelle
RHEL6 und RHEL5, die beide Ghostscript auf 8.70 basierten, konnten die oben angegebenen Befehlsformen nicht verwenden. Unter der Annahme, dass ein Skript oder eine Funktion die PDF-Datei als erstes Argument "$ 1" erwartet, sollte Folgendes portabler sein:
Wobei der Ausgabedatei "grey_" vorangestellt wird.
RHEL6 und 5 können CompatibilityLevel = 1.4 verwenden, was viel schneller ist, aber ich habe Portabilität angestrebt.
quelle
sColorConversionStrategyForImages
Schalter gibt.Ich erhalte zuverlässige Ergebnisse bei der Bereinigung gescannter PDFs, die im Gegensatz zu diesem Skript stehen.
quelle