Konwersja pliku PDF na czarno-biały za pomocą ghostscript

21

Podobnie do tego pytania:

Czy przekonwertować plik PDF na skalę szarości w wierszu poleceń w programie FLOSS?

Mam dokument PDF i chcę go przekonwertować na czystą czerń i biel. Więc chcę odrzucić półtonów. Aby przekonwertować na skalę szarości za pomocą ghostscript, mogę użyć tego polecenia:

gs \
 -sOutputFile=output.PDF \
 -sDEVICE=pdfwrite \
 -sColorConversionStrategy=Gray \
 -dProcessColorModel=/DeviceGray \
 -dCompatibilityLevel=1.4 \
  input.PDF < /dev/null

Co muszę zmienić, aby uzyskać monochromatyczny, np. Tylko kolory czarno-biały i bez półtonów?

niklasfi
źródło

Odpowiedzi:

6

Ostatnia sugestia faktycznie konwertuje tylko na skalę szarości, a następnie działa tylko wtedy, gdy bazowy dokument używa setrgbcolor . To nie działało dla mnie, ponieważ miałem dokument, który używał setcolor .

Miałem sukces z redefiniowaniem setcolor, aby zawsze ustawiał kolor na 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>

Minęło ponad 15 lat, odkąd dokonałem hakowania PostScript, więc powyższe może być kiepskie, niepoprawne lub nawet przypadkowe - jeśli wiesz, jak to zrobić lepiej, zasugeruj.

Przypływ
źródło
3

Nie jestem pewien, czy poniższa sugestia zadziała ... ale może warto wypróbować:

  1. przekonwertować plik PDF na PostScript za pomocą prostego pdf2psnarzędzia
  2. przekonwertować ten PostScript z powrotem na PDF, używając ponownie zdefiniowanego /setrgbcoloroperatora PostScript

Oto polecenia:

Pierwszy

  pdf2ps color.pdf color.ps

To daje color.psjako wynik.

druga

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
Kurt Pfeifle
źródło
Próbowałem tego i nadal miałem odcienie szarości. niklasfi chce monochromatyczny.
frabjous
3

To nie jest ghostscript, ale dzięki imagemagick jest to dość proste:

 convert -monochrome input.pdf output.pdf
o-miasto
źródło
10
Wynikowa jakość pdf jest znacznie gorsza niż oryginalna.
Hindol
convert -monochrome -denisty 600?
Ilia w495 Nikitin
Wydaje się, że to robi półtonowanie; Chcę, aby wszystkie kolory (ale biały) zostały przekonwertowane na czerń, niezależnie od ciemności.
Oprawa
0

W przypadku czysto czarno-białego pliku PDF należy przekonwertować go na format ps, a następnie na plik PDF w celu uzyskania PostScript:

exec(" gs -sDEVICE=psmono  -dNOPAUSE -dBATCH -dSAFER  -sOutputFile=combined.ps  $pdf");

PostScript do PDF -> czarno-biały

exec(" gs -sDEVICE=pdfwrite   -dNOPAUSE -dBATCH -dSAFER  -sOutputFile=file_pdf.pdf  filename.ps");
Tarun Kumar
źródło