Mar*_*rco 10
1) 使用ghostscript使用psmono设备将PDF 转换为单色PostScript 文件:
gs -q -sDEVICE=psmono -o mono.ps input.pdf
Run Code Online (Sandbox Code Playgroud)
2) 然后将单色 PostScript 转换回 PDF:
ps2pdf mono.ps
Run Code Online (Sandbox Code Playgroud)
编辑:该psmono
设备创建一个 1 位半色调图像,这显然不是您想要的。我找不到使用 ghostscript 指定阈值的方法,所以我求助于 imagemagick。convert
内部使用 ghostscript 来转换 PDF。然后应用阈值过滤生成 1 位图像并再次使用 ghostscript 创建 PDF。由于convert
默认使用 75DPI 的分辨率,这可能与您的实际分辨率不匹配,因此您可以提供density
参数。并尝试threshold
设置。最佳值高度依赖于输入文件。
convert -density 150 -threshold 50% input.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)
我发现的最好的方法是,在不损失质量的情况下,去除下一页的阴影、噪音、文本等:
首先将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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这是为了将每个 jpg 图像制作为 pdf 文件,而不会损失分辨率或质量:
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
这将 pdfpages 连接成一个:
pdftk *.pdf cat output combined.pdf
最后,我添加了一个 OCRed 文本图层,该图层不会改变 pdf 中的扫描质量,因此可以搜索它们:
pypdfocr combined.pdf