Converting a PDF to black & white with ghostscript
Similarly to this question:
Convert a PDF to greyscale on the command line in FLOSS?
I have a PDF-document and want to convert it to pure black and white. So I want to discard halftones. To convert to grayscale with ghostscript I can use this command:
gs \
-sOutputFile=output.PDF \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
input.PDF < /dev/null
What do I have to change to get monochrome e.g. only the colors black and white and no halftones?
The last suggestion indeed only converts to grayscale and then only works if the underlying doc uses setrgbcolor. This did not work for me, since I had a doc, that used setcolor.
I had success with redefining setcolor to always set the color to 0,0,0:
gs -o <output-file.pdf> -sDEVICE=pdfwrite \
-c "/osetcolor {/setcolor} bind def /setcolor {pop [0 0 0] osetcolor} def" \
-f <input-file.ps>
It has been 15+ years since I did any PostScript hacking, so the above may be lame, incorrect or even accidental - if you know how to do better, please suggest.
I am not sure if the following suggestion will work... but it may be worth to try out:
- convert the PDF to PostScript using the simple
pdf2ps
utility - convert that PostScript back to PDF while using a re-defined
/setrgbcolor
PostScript operator
These are the commands:
First
pdf2ps color.pdf color.ps
This gives you color.ps
as output.
Second
gs \
-o bw-from-color.pdf \
-sDEVICE=pdfwrite \
-c "/setrgbcolor{0 mul 3 1 roll 0 mul 3 1 roll 0 mul 3 1 roll 0 mul add add setgray}def" \
-f color.ps
It's not ghostscript, but with imagemagick this is quite simple:
convert -monochrome input.pdf output.pdf