또한 bw로 변환하려는 스캔 한 컬러 pdf 및 회색조 pdf도있었습니다. 나는 사용하여 시도 gs
와 여기에 나열된 코드 및 이미지 품질은 여전히 PDF 텍스트 좋다. 그러나 gs 코드는 (질문에서 요청한대로) 그레이 스케일로만 변환되며 여전히 파일 크기가 큽니다. convert
직접 사용할 때 결과가 매우 나쁩니다.
좋은 이미지 품질과 작은 파일 크기의 bw pdf를 원했습니다. 내 솔루션은 gs
pdf에서 그레이 스케일 bmp 파일을 추출하고 bmp convert
를 bw로 임계 값으로 설정하고 tiff 파일로 저장 한 다음 img2pdf 를 사용하여 tiff 이미지를 압축하고 하나의 pdf로 병합합니다.
pdf에서 직접 tiff로 이동하려고 시도했지만 품질이 같지 않으므로 각 페이지를 bmp로 저장합니다. 한 페이지 pdf 파일의 경우 convert
bmp에서 pdf로 훌륭한 작업을 수행합니다. 예:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
여러 페이지의 경우 gs
여러 pdf 파일을 하나로 병합 할 수 있지만 img2pdf
gs보다 파일 크기가 작습니다. tiff 파일은 img2pdf에 대한 입력으로 압축 해제해야합니다. 많은 수의 페이지에 대해서는 중간 bmp 및 tiff 파일의 크기가 큰 경향이 있습니다. pdftk
또는 joinpdf
에서 압축 된 pdf 파일을 병합 할 수 있으면 더 좋습니다 convert
.
더 우아한 해결책이 있다고 생각합니다. 그러나 내 방법은 매우 좋은 이미지 품질과 훨씬 작은 파일 크기로 결과를 생성합니다. bw pdf로 텍스트를 다시 가져 오려면 OCR을 다시 실행하십시오.
내 쉘 스크립트는 gs, convert 및 img2pdf를 사용합니다. 처음에 나열된 매개 변수 (페이지 수, 스캔 dpi, 임계 값 % 등)를 변경하고을 실행하십시오 chmod +x ./pdf2bw.sh
. 전체 스크립트는 다음과 같습니다 (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