online nitro negro linea grises gratis generar escala desde convertir como color blanco archivo pdf ghostscript grayscale pdf-conversion pdf-manipulation

nitro - convertir un archivo pdf de color a blanco y negro



¿Cómo convertir un PDF a escala de grises desde la línea de comandos evitando rasterizarlo? (7)

Estoy intentando convertir a escala de grises este PDF: https://dl.dropboxusercontent.com/u/10351891/page-27.pdf

Ghostscript (v 9.10) con el dispositivo pdfwrite falla con un "No se puede convertir el espacio de color a gris, invirtiendo la estrategia a LeaveColorUnchanged". mensaje.

Puedo convertirlo a través de un archivo ps intermediario (usando gs, pdftops (v 0.24.3) o pdf2ps) pero esta conversión rasteriza todo el PDF. Probé muchas otras cosas: normalizar el PDF usando qpdf (v 5.0.1) o pdftk (v 1.44), transformarlo a un archivo svg y volver a un PDF a través de Inkscape (v 0.48.4) ... nada parece trabajar.

La única solución que encontré (que no es adecuada para mí en el entorno de producción) es usar Preview en mi Mac y aplicar un filtro Quartz Grey Tone manualmente o con un script de Automator.

¿Alguien encuentra otra forma de hacerlo? ¿O es posible normalizar el PDF o solucionar el problema para evitar que el mensaje de Ghostscript "No se puede convertir el espacio de color ..." o forzar el espacio de color de otra manera?

¡Gracias!


En Linux:

Instalar pdftk

apt-get install pdftk

Una vez que haya instalado pdftk, guarde la secuencia de comandos como graypdf.sh con el siguiente código

# convert pdf to grayscale, preserving metadata # "AFAIK graphicx has no feature for manipulating colorspaces. " http://groups.google.com/group/latexusersgroup/browse_thread/thread/5ebbc3ff9978af05 # "> Is there an easy (or just standard) way with pdflatex to do a > conversion from color to grayscale when a PDF file is generated? No." ... "If you want to convert a multipage document then you better have pdftops from the xpdf suite installed because Ghostscript''s pdf to ps doesn''t produce nice Postscript." http://osdir.com/ml/tex.pdftex/2008-05/msg00006.html # "Converting a color EPS to grayscale" - http://en.wikibooks.org/wiki/LaTeX/Importing_Graphics # "/usepackage[monochrome]{color} .. I don''t know of a neat automatic conversion to monochrome (there might be such a thing) although there was something in Tugboat a while back about mapping colors on the fly. I would probably make monochrome versions of the pictures, and name them consistently. Then conditionally load each one" http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2005-08/msg01864.html # "Here comes optional.sty. By adding /usepackage{optional} ... /opt{color}{/includegraphics[width=0.4/textwidth]{intro/benzoCompounds_color}} /opt{grayscale}{/includegraphics[width=0.4/textwidth]{intro/benzoCompounds}} " - http://chem-bla-ics.blogspot.com/2008/01/my-phd-thesis-in-color-and-grayscale.html # with gs: # http://handyfloss.net/2008.09/making-a-pdf-grayscale-with-ghostscript/ # note - this strips metadata! so: # http://etutorials.org/Linux+systems/pdf+hacks/Chapter+5.+Manipulating+PDF+Files/Hack+64+Get+and+Set+PDF+Metadata/ COLORFILENAME=$1 OVERWRITE=$2 FNAME=${COLORFILENAME%.pdf} # NOTE: pdftk does not work with logical page numbers / pagination; # gs kills it as well; # so check for existence of ''pdfmarks'' file in calling dir; # if there, use it to correct gs logical pagination # for example, see # http://askubuntu.com/questions/32048/renumber-pages-of-a-pdf/65894#65894 PDFMARKS= if [ -e pdfmarks ] ; then PDFMARKS="pdfmarks" echo "$PDFMARKS exists, using..." # convert to gray pdf - this strips metadata! gs -sOutputFile=$FNAME-gs-gray.pdf -sDEVICE=pdfwrite / -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray / -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "$COLORFILENAME" "$PDFMARKS" else # not really needed ?! gs -sOutputFile=$FNAME-gs-gray.pdf -sDEVICE=pdfwrite / -sColorConversionStrategy=Gray -dProcessColorModel=/DeviceGray / -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH "$COLORFILENAME" fi # dump metadata from original color pdf ## pdftk $COLORFILENAME dump_data output $FNAME.data.txt # also: pdfinfo -meta $COLORFILENAME # grep to avoid BookmarkTitle/Level/PageNumber: pdftk $COLORFILENAME dump_data output | grep ''Info/|Pdf'' > $FNAME.data.txt # "pdftk can take a plain-text file of these same key/value pairs and update a PDF''s Info dictionary to match. Currently, it does not update the PDF''s XMP stream." pdftk $FNAME-gs-gray.pdf update_info $FNAME.data.txt output $FNAME-gray.pdf # (http://wiki.creativecommons.org/XMP_Implementations : Exempi ... allows reading/writing XMP metadata for various file formats, including PDF ... ) # clean up rm $FNAME-gs-gray.pdf rm $FNAME.data.txt if [ "$OVERWRITE" == "y" ] ; then echo "Overwriting $COLORFILENAME..." mv $FNAME-gray.pdf $COLORFILENAME fi # BUT NOTE: # Mixing TEX & PostScript : The GEX Model - http://www.tug.org/TUGboat/Articles/tb21-3/tb68kost.pdf # VTEX is a (commercial) extended version of TEX, sold by MicroPress, Inc. Free versions of VTEX have recently been made available, that work under OS/2 and Linux. This paper describes GEX, a fast fully-integrated PostScript interpreter which functions as part of the VTEX code-generator. Unless specified otherwise, this article describes the functionality in the free- ware version of the VTEX compiler, as available on CTAN sites in systems/vtex. # GEX is a graphics counterpart to TEX. .. Since GEX may exercise subtle influence on TEX (load fonts, or change TEX registers), GEX is op- tional in VTEX implementations: the default oper- ation of the program is with GEX off; it is enabled by a command-line switch. # /includegraphics[width=1.3in, colorspace=grayscale 256]{macaw.jpg} # http://mail.tug.org/texlive/Contents/live/texmf-dist/doc/generic/FAQ-en/html/FAQ-TeXsystems.html # A free version of the commercial VTeX extended TeX system is available for use under Linux, which among other things specialises in direct production of PDF from (La)TeX input. Sadly, it���s no longer supported, and the ready-built images are made for use with a rather ancient Linux kernel. # NOTE: another way to capture metadata; if converting via ghostscript: # http://compgroups.net/comp.text.pdf/How-to-specify-metadata-using-Ghostscript # first: # grep -a ''Keywo'' orig.pdf # /Author(xxx)/Title(ttt)/Subject()/Creator(LaTeX)/Producer(pdfTeX-1.40.12)/Keywords(kkkk) # then - copy this data in a file prologue.ini: #/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse #[/Author(xxx) #/Title(ttt) #/Subject() #/Creator(LaTeX with hyperref package + gs w/ prologue) #/Producer(pdfTeX-1.40.12) #/Keywords(kkkk) #/DOCINFO pdfmark # # finally, call gs on the orig file, # asking to process pdfmarks in prologue.ini: # gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 / # -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -dDOPDFMARKS / # -sOutputFile=out.pdf in.pdf prologue.ini # then the metadata will be in output too (which is stripped otherwise; # note bookmarks are preserved, however).

otorgar permisos de ejecución al archivo

chmod +x greypdf.sh

Y ejecútelo así:

./greypdf.sh input.pdf

Creará un archivo input-gray.pdf en la misma ubicación que el archivo inicial


Puedes usar algo que he creado. Le da la opción de elegir los números de página específicos que desea convertir a escala de grises. Útil si no quiere escalar en escala de grises todo el pdf. https://github.com/shoaibkhan94/PdfGrayscaler .


Si ingresas al archivo, encontrarás que la mayoría de los colores se determinan a través de un espacio de color basado en ICC RGB (busca 8 0 R para encontrar todas las referencias a este espacio de color). Tal vez gs se queja de eso?

Quién sabe.

La conclusión es que convertir una página de un espacio de color a otro sin afectar el contenido no es trivial, ya que es necesario poder representar la página y atrapar todos los cambios en el color / espacio de color actual y sustituirlo por un equivalente en el espacio objetivo. así como convertir todos los XObjects de imagen en el espacio de color incorrecto, lo que requerirá decodificar los datos de imagen y volver a codificarlo en el espacio de destino, así como todos los XObjects de formulario, lo que será una tarea similar a intentar convertir la página principal desde Los objetos XObjects (creo que tu documento tiene 4) también contienen recursos y una secuencia de contenido de operadores de marcado de páginas (que pueden incluir más XObjects).

Es ciertamente factible, pero el proceso es casi el mismo que el renderizado pero con un código de propósito bastante especial.


Un poco tarde en el día, pero la respuesta principal no funciona para mí con un archivo diferente. El problema subyacente parece ser el código anterior en Ghostscript, para el cual hay una versión posterior que no está habilitada de manera predeterminada. Más sobre eso aquí: http://bugs.ghostscript.com/show_bug.cgi?id=694608

La página de arriba también da un comando que funciona para mí:

gs -sDEVICE=pdfwrite -dProcessColorModel=/DeviceGray -dColorConversionStrategy=/Gray -dPDFUseOldCMS=false -o out.pdf -f in.pdf


Use el código más reciente (aún no publicado) y configure ColorConversionStrategy = Gray


respuesta muy tardía, pero el siguiente comando debería funcionar:

convert -colorspace GRAY input.pdf input_gray.pdf


gs / -sDEVICE=pdfwrite / -sProcessColorModel=DeviceGray / -sColorConversionStrategy=Gray / -dOverrideICC / -o out.pdf / -f page-27.pdf

Este comando convierte su archivo a escala de grises (GS 9.10).