2013-11-21 39 views
14

Ich versuche, diese PDF zu konvertieren in Graustufen: https://dl.dropboxusercontent.com/u/10351891/page-27.pdfWie konvertiert man eine PDF-Datei von der Befehlszeile in Graustufen und vermeidet es, gerastert zu werden?

Ghostscript (v 9.10) mit pdfwrite Gerät nicht mit einem „Unable Farbraum zu Grau konvertieren, Strategie LeaveColorUnchanged zurückkehrt.“ Botschaft.

Ich kann es über eine Zwischen-PS-Datei (mit gs, pdftops (v 0.24.3) oder pdf2ps) konvertieren, aber diese Konvertierung rasterisiert das gesamte PDF. Ich habe viele andere Dinge versucht: Normalisieren Sie die PDF mit qpdf (v 5.0.1) oder pdftk (v 1.44), transformieren Sie es in eine Svg-Datei und zurück zu einer PDF über Inkscape (v 0.48.4) ... nichts scheint zu funktionieren.

Die einzige Lösung, die ich gefunden habe (die für mich in der Produktionsumgebung nicht geeignet ist), ist die Verwendung von Vorschau auf meinem Mac und die Anwendung eines Quartz Grey Tone Filters manuell oder mit einem Automator Skript.

Wer findet einen anderen Arbeitsweg, um es zu tun? Oder ist es möglich, das PDF zu normalisieren oder das Problem zu beheben, um die Ghostscript-Meldung "Kann Farbraum nicht konvertieren ..." zu verhindern oder den Farbraum auf andere Weise zu erzwingen?

Danke!

+0

[Diskussion auf SuperUser] (https://superuser.com/q/318586/45163) – palswim

Antwort

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

Dieser Befehl konvertiert die Dateien in Graustufen (GS 9.10) gesetzt.

+0

Erstaunlich, es funktioniert wie ein Charme! Vielen Dank! – Panda

+2

Es gibt diese Ausgabe und die PDF ist immer noch farbig. GPL Ghostscript 9.10: Der Farbraum konnte nicht in Grau konvertiert werden, wodurch die Strategie auf LeaveColorUnchanged zurückgesetzt wurde. – Gaurav

+0

+1 funktionierte aus der Box auf meinem OSX. Das Hinzufügen von $ 1 und $ 2 anstelle von out.pdf und page-27.pdf und das Umwandeln in ein Batch-Skript ist ebenfalls hilfreich, um den täglichen Gebrauch flexibler zu gestalten. –

2

Wenn Sie in die Datei eindringen, werden Sie feststellen, dass die meisten Farben durch einen RGB-ICC-basierten Farbraum bestimmt werden (suchen Sie nach 8 0 R, um alle Verweise auf diesen Farbraum zu finden). Vielleicht beschwert sich gs darüber?

Wer weiß.

Das Take-Away ist, dass das Konvertieren einer Seite von einem Farbraum zu einem anderen ohne Beeinträchtigung des Inhalts nicht trivial ist, da Sie die Seite rendern und alle Änderungen an der aktuellen Farbe/dem Farbraum abfangen und ein Äquivalent ersetzen müssen im Zielraum und konvertiert alle Bild-XObjects in den falschen Farbraum, was eine Dekodierung der Bilddaten und eine erneute Kodierung im Zielraum sowie alle XObjects erfordert, was eine ähnliche Aufgabe wie das Konvertieren ist Die übergeordnete Seite seit Form XObjects (ich denke, Ihr Dokument hat 4) enthalten auch Ressourcen und einen Content-Stream von Seitenmarkierungsoperatoren (die möglicherweise mehr XObjects enthalten).

Es ist sicherlich machbar, aber der Prozess ist fast das gleiche wie Rendering, aber mit etwas ziemlich speziellen Code.

3

Verwenden Sie den neuesten Code (noch nicht erschienen) und ColorConversionStrategy = grau

7

Ein bisschen spät am Tag, aber die Top-Antwort funktioniert nicht für mich mit einer anderen Datei. Das zugrunde liegende Problem scheint alter Code in Ghostscript zu sein, für den es eine spätere Version gibt, die nicht standardmäßig aktiviert ist. Mehr dazu hier: http://bugs.ghostscript.com/show_bug.cgi?id=694608

Die Seite oben auch einen Befehl gibt, die für mich funktioniert:

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

In Linux:

Installieren pdftk

apt-get install pdftk 

Sobald Sie pdftk installiert haben Speichern Sie das Skript als graypdf.sh mit dem folgenden Code

# 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). 

geben Sie die Datei Excecution Berechtigungen

chmod +x greypdf.sh 

und führen Sie es wie folgt aus:

./greypdf.sh input.pdf 

Es wird eine Datei-Eingabe-gray.pdf in der gleichen erstellen Ort als die ursprüngliche Datei

+0

Dies scheint keine echte Graustufe zu sein. Wenn ich inkcov darauf laufen lasse, verwende ich C, M und Y, um Grau zu machen. –

1

sehr späte Antwort, aber der folgende Befehl sollte funktionieren:

+0

Es konvertiert Vektoren in Rasterbilder. – brownian

0

Sie können etwas verwenden, das ich erstellt habe. Sie haben die Möglichkeit, die spezifischen Seitennummern auszuwählen, die Sie in Graustufen konvertieren möchten. Praktisch, wenn Sie nicht die gesamte PDF-Datei in Graustufen darstellen möchten. https://github.com/shoaibkhan94/PdfGrayscaler.

+0

Bitte verwenden Sie nicht dieselbe Antwort für zwei verschiedene Fragen. Stattdessen beantworten Sie eine Frage und markieren Sie die zweite, um ein Duplikat hinzuzufügen. – mkl