Miałem też zeskanowane kolorowe pliki PDF i pliki w skali szarości, które chciałem przekonwertować na bw. Próbowałem przy użyciu gs
z kodu wymienionych tutaj , a jakość obrazu jest dobra z tekstem pdf nadal. Jednak ten kod gs konwertuje tylko na skalę szarości (zgodnie z pytaniem w pytaniu) i nadal ma duży rozmiar pliku.convert
przy bezpośrednim stosowaniu daje bardzo słabe wyniki.
Chciałem bw pdf z dobrą jakością obrazu i małym rozmiarem pliku. Wypróbowałbym rozwiązanie Terdona, ale nie mogłem dostać pdftk
się do centOS 7 używając yum (w momencie pisania).
Moje rozwiązanie wykorzystuje gs
do wyodrębnienia plików bmp w odcieniach szarości z pliku pdf, convert
do progowania tych plików bmps do plików bw i zapisania ich jako plików tiff, a następnie img2pdf do skompresowania obrazów tiff i scalenia ich w jeden plik pdf.
Próbowałem przejść bezpośrednio do formatu tiff z pliku pdf, ale jakość nie jest taka sama, więc zapisuję każdą stronę na bmp. W przypadku jednostronicowego pliku pdf convert
robi świetną robotę od bmp do pdf. Przykład:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
W przypadku wielu stron gs
może łączyć wiele plików pdf w jeden, ale img2pdf
daje mniejszy rozmiar pliku niż gs. Pliki tiff muszą być rozpakowane jako dane wejściowe do img2pdf. Pamiętaj, że w przypadku dużej liczby stron pośrednie pliki bmp i tiff mają zwykle duży rozmiar. pdftk
lub joinpdf
byłoby lepiej, gdyby mogli scalić skompresowane pliki pdf z convert
.
Myślę, że istnieje bardziej eleganckie rozwiązanie. Jednak moja metoda daje wyniki o bardzo dobrej jakości obrazu i znacznie mniejszym rozmiarze pliku. Aby odzyskać tekst w bw pdf, uruchom ponownie OCR.
Mój skrypt powłoki używa gs, convert i img2pdf. W razie potrzeby zmień parametry (liczba stron, rozdzielczość skanowania, wartość progowa% itp.) Wymienione na początku i uruchom chmod +x ./pdf2bw.sh
. Oto pełny skrypt (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