Ich hatte auch einige gescannte Farb-PDFs und Graustufen-PDFs, die ich in bw konvertieren wollte. Ich habe versucht, 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 gestellt) und hat immer noch eine große Dateigröße. convert
liefert bei direkter Verwendung sehr schlechte Ergebnisse.
Ich wollte bw pdfs mit guter Bildqualität und kleiner Dateigröße. Meine Lösung verwendet gs
, um Graustufen-BMP-Dateien aus dem PDF zu extrahieren, convert
diese BMPs auf BW zu beschränken und sie als TIFF-Dateien zu speichern, und dann img2pdf , um die TIFF-Bilder zu komprimieren und sie alle zu einem PDF zusammenzuführen.
Ich habe versucht, direkt aus dem PDF zu tiff, aber die Qualität ist nicht die gleiche, also speichere ich jede Seite in bmp. Für eine einseitige PDF-Datei convert
macht es einen großartigen Job von bmp bis pdf. 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 für mehrere 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 bei einer großen Anzahl von Seiten, dass die Zwischen-BMP- und TIFF-Dateien in der Regel groß sind. pdftk
oder joinpdf
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 sehr guter Bildqualität und viel kleinerer Dateigröße. Führen Sie OCR erneut aus, um Text wieder in das bw-PDF aufzunehmen.
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
scantailor