답변1
1) 사용고스트 스크립트다음 명령을 사용하여 PDF를 흑백 PostScript 파일로 변환하십시오.ps 모노장비:
gs -q -sDEVICE=psmono -o mono.ps input.pdf
2) 그런 다음 흑백 PostScript를 다시 PDF로 변환합니다.
ps2pdf mono.ps
편집하다:이 psmono
장치는 1비트 하프톤 이미지를 생성하는데 이는 분명히 사용자가 원하는 것이 아닙니다. Ghostscript를 사용하여 임계값을 지정하는 방법을 찾을 수 없어서 imagemagick으로 전환했습니다. convert
Ghostscript는 내부적으로 PDF를 변환하는 데 사용됩니다. 그런 다음 임계값 필터링을 적용하여 1비트 이미지를 생성하고 다시 Ghostscript를 사용하여 PDF를 생성합니다. 기본 해상도는 75DPI 이므로 convert
실제 해상도와 일치하지 않을 수 있으므로 이 density
매개변수를 제공하면 됩니다. 그리고 설정을 시도해 보세요 threshold
. 최적의 값은 입력 파일에 따라 크게 달라집니다.
convert -density 150 -threshold 50% input.pdf output.pdf
답변2
품질 저하 없이 다음 페이지에서 그림자, 노이즈, 텍스트 등을 제거하는 가장 좋은 방법은 다음과 같습니다.
먼저 PDF를 단일 이미지로 변환하십시오.
pdfimages combined_ocr.pdf page
둘째, 다음 페이지의 그림자, 노이즈, 텍스트를 제거합니다(출처이 블로그에)
ls ./p*.ppm | xargs -L1 -I {} convert {} -quality 100 -density 300 -fill white -fuzz 80% +opaque "#000000" {}.jpg
이는 추가 단계로 추가하거나 위 명령 대신에 추가하여 실제로 두 가지 색상만 얻을 수 있습니다.
ls ./p*.ppm | xargs -L1 -I {} convert {} +dither -colors 2 -type bilevel -density 300 -fill white -fuzz 40% +opaque "#000000" -density 300 {}.jpg
50-60% fuzz
덜 공격적이고 더 읽기 쉬운 결과를 얻습니다.
ls ./p*.ppm | xargs -L1 -I {} convert {} +dither -colors 2 -type bilevel -density 300 -fill white -fuzz 40% +opaque "#000000" -density 300 {}.jpg
이는 해상도나 품질을 잃지 않고 각 jpg 이미지를 pdf 파일로 만드는 것입니다.
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
그러면 pdf페이지가 하나로 연결됩니다.
pdftk *.pdf cat output combined.pdf
마지막으로 PDF의 스캔 품질을 변경하지 않는 OCRed 텍스트 레이어를 추가하여 검색이 가능하도록 했습니다.
pypdfocr combined.pdf
답변3
현실적으로 스캔에서 나온 경우 유일한 합리적인 접근 방식은 pdf이미지를 사용하고 기본 그래픽을 변환하는 것입니다. 이 스크립트를 사용하여 변환합니다.
#!/bin/sh
if [ -z "$1" -o -z "$2" ]; then
echo "Syntax: $0 <input.pdf> <output.pdf>"
exit 1
fi
pdfimages "$1" scan
for a in scan*.ppm; do
convert -white-threshold 85% -monochrome $a `basename $a .ppm`.tiff
done
tiffcp scan*.tiff output.tiff
tiff2pdf output.tiff -o "$2" -p A4 -F
rm scan*.ppm scan*.tiff output.tiff
답변4
컬러 및 회색조 PDF를 작고 선명한 흑백 버전으로 변환하는 훌륭한 작업을 수행하는 스크립트를 제공한 OccamsRazor에게 감사드립니다. 실제로 OccamsRazor님의 게시물에 달린 댓글인데 댓글을 달 수 있는 포인트가 부족합니다.
img2pdf에 더 이상 허용되는 매개변수가 아니기 img2pdf -o ./$output_pdf_name --dpi $dpi_res $input_files
때문에 스크립트가 실패합니다 . --dpi
대신 입력 파일에서 해상도를 가져오므로 무시해도 됩니다.
이것은 내 버전의 스크립트입니다. 각 파일의 스크립트를 편집하고 싶지 않기 때문에 실행할 때 페이지 번호와 입력 파일 이름을 전달합니다. 출력 이름을 200dpi로 설정하고 해상도를 200dpi로 설정했는데 이는 내 작업 흐름에 적합하지만 이를 변경하거나 변환하여 전달할 수도 있습니다.00input_name
$3
$4
실행하려면 예를 들어 다음을 사용하십시오../pdf2bw.sh <number_of_pages> <input_name>
./pdf2bw.sh 55 input.pdf
#!/bin/bash
num_pages=$1
input_pdf_name=$2
output_pdf_name="00$2"
bw_threshold=40%
dpi_res=200
#-------------------------------------------------------------------------
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 $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