Ich hatte auch einige gescannte Farb-PDFs und Graustufen-PDFs, die ich in SW konvertieren wollte. Ich habe versucht mitgs
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-Dateiconvert
es eine großartige Aufgabe, von BMP zu PDF zu wechseln. Beispiel:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
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önnen convert
.
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):
#!/bin/bash
num_pages=12
dpi_res=300
input_pdf_name=color_or_grayscale.pdf
bw_threshold=40%
output_pdf_name=out_bw.pdf
#-------------------------------------------------------------------------
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -q -r$dpi_res \
-sOutputFile=./%d.bmp ./$input_pdf_name
#-------------------------------------------------------------------------
for file_num in `seq 1 $num_pages`
do
convert ./$file_num.bmp -threshold $bw_threshold \
./$file_num.tif
done
#-------------------------------------------------------------------------
input_files=""
for file_num in `seq 1 $num_pages`
do
input_files+="./$file_num.tif "
done
img2pdf -o ./$output_pdf_name --dpi $dpi_res $input_files
#-------------------------------------------------------------------------
# clean up bmp and tif files used in conversion
for file_num in `seq 1 $num_pages`
do
rm ./$file_num.bmp
rm ./$file_num.tif
done