Export als PDF, Farbe und reine Schwarz/Weiß Seiten

Hi!

Ich nutze LibreOffice 6.1.3.2 unter OpenSuse Leap 15.

Ich habe damit das Manuskript für ein Fachbuch geschrieben.
(Was erstaunlich gut geklappt hat. Zu den doch aufgetretenen
Problemen, die aber alle lösbar waren, verfasse ich eventuell
einen eigenen Bericht)

Mein Manuskript hat 443 Seiten und etwa 200 Grafiken und Bilder.
Grafiken und Bilder sind in Farbe, der Text ist schwarz.
Da die Grafiken nicht gleichmäßig über alle Seiten verteilt sind,
enthält das Manuskript etwa 180 Seiten, die im Farbdruck gedruckt
werden müssen, der Rest könnte schwarz-weiß gedruckt werden.
Der Kostenunterschied ist erheblich!

Bei der Überprüfung des exportieren PDF in der Druckerei wurde
mir aber mitgeteilt, dass fast alle Seiten färbig sind.

Ich habe das überprüft(1), und tatsächlich sind nur 28 Seiten im
PDF rein Schwarz-Weiß:

andreas@ws1:~> gs -q -o - -sDEVICE=inkcov manuskript.pdf | wc -l
443

andreas@ws1:~> gs -q -o - -sDEVICE=inkcov manuskript.pdf | grep '^ 0.00000 0.00000 0.00000' | wc -l
28

Diese 28 Seiten sind die linken Leerseiten nach einem Seitenumbruch
zu Beginn eines Hauptkapitels. Dort steht gar kein Text.

Wenn man sich die Farbverteilung der restlichen Seiten im Detail ansieht,
erkennt man, dass bei den rein schwarz-weißen Seiten die CMYK Farbanteile
jeweils völlig gleich sind:

0.04034 0.04034 0.04034 0.04034 CMYK OK
0.03303 0.03303 0.03303 0.03303 CMYK OK
0.04857 0.04857 0.04857 0.04857 CMYK OK
0.03123 0.03123 0.03123 0.03123 CMYK OK
0.05788 0.05788 0.05788 0.05788 CMYK OK
0.03389 0.03389 0.03389 0.03389 CMYK OK

In der Druckerei wird das aber als Farbseite gezählt und muss auch
als Farbseite bezahlt werden.

"Echte" Farbseiten, d.h. Seiten mit Bildern, sehen z.B. so aus:

0.54786 0.54786 0.54786 0.03240 CMYK OK

Ich habe eine Testseite mit etwas Text erstellt. Die Textfarbe ist schwarz,
es gibt sonst keine färbigen Elemente im Text. Wenn ich dieses Dokument als
PDF exportiere, bekomme ich eine Seite mit folgenden CMYK Anteilen:

andreas@ws1:~> gs -q -o - -sDEVICE=inkcov colortest.pdf
0.00141 0.00141 0.00141 0.00141 CMYK OK

Also auch hier gibt es Farbanteile auf dieser Seite, obwohl die
Textfarbe als "schwarz" deklariert ist.

Ich frage mich nun, ob bzw. wie ich LibreOffice dazu bringen kann,
eine Seite mit rein schwarzem Text auch als reine schwarz-weiß Seite
im PDF auszugeben.

Ich habe schon Folgendes ohne Erfolg ausprobiert:

1) PDF Export
2) In Datei drucken, dabei die Option "Text schwarz drucken" angewählt
3) Im Zeichenformat die Schriftfarbe auf Palette CMYK, 100/100/100 gestellt
4) Benutzerdefinierte Schriftfarbe mit C=M=Y=0% und K=100% verwendet

Das alles in allen möglichen Permutationen.

Immer kommt eine PDF Seite mit C=M=Y=K>0 heraus.

Hat jemand eine Idee, wie ich unter diesen Umständen die Anforderung von reinen
schwarz-weiß Seiten (nur bei den reinen Textseiten) im PDF Dokument realisieren kann?

Danke!

- andreas

(1) https://stackoverflow.com/questions/641427/how-do-i-know-if-pdf-pages-are-color-or-black-and-white

Hallo Andreas,

das Problem kenne ich und du kannst es meines Wissens in LibreOffice bis
anhin nicht lösen. Ich habe mir scribus-ng installiert und das Dokument
dort importiert. scribus-ng ist in der Lage schwarze Seiten schwarz zu
exportieren. Es gibt dazu auch einige hilfreiche Artikel im Netz, so bin
ich auch auf die Lösung mit scribus-ng gekommen.

Wenn du den Weg gehen willst, dann ist es wichtig, dass du wirklich
scribus-ng und nicht scribus hast. Evtl. ist es nicht in deinen
Paketquellen, dann musst du das Original-Repo einbinden.

Viel Erfolg mit dem Output und deinem Buch

Ulrich

Hi!

Zuerst bitte ich um Entschuldigung für die späte Rückantwort.
Aber die Angelegenheit wollte gründlich untersucht werden...

Schließlich habe ich einen für mich passenden Workflow gefunden,
der das Problem zur Zufriedenheit (auch der Druckerei) löst.

Um anderen LibreOffice Anwendern die Arbeit zu erleichtern, soll
diese Mail an die Liste meine Vorgangsweise für andere dokumentieren.

Hallo Andreas,

das Problem kenne ich und du kannst es meines Wissens in LibreOffice bis
anhin nicht lösen. Ich habe mir scribus-ng installiert und das Dokument
dort importiert. scribus-ng ist in der Lage schwarze Seiten schwarz zu
exportieren. Es gibt dazu auch einige hilfreiche Artikel im Netz, so bin
ich auch auf die Lösung mit scribus-ng gekommen.

Wenn du den Weg gehen willst, dann ist es wichtig, dass du wirklich
scribus-ng und nicht scribus hast. Evtl. ist es nicht in deinen
Paketquellen, dann musst du das Original-Repo einbinden.

Mit Scribus NG hat es nicht geklappt.
Ich konnte Scribus 1.5.5 auf meinem Rechner zwar installieren,
aber das Programm kommt mit dem Umfang meines Manuskripts
anscheinend nicht zurecht. Ich habe den Import nach drei Stunden(!),
nachdem anscheinend erst 30 Bilder importiert wurden, abgebrochen.

Dann habe ich verschiedene Beiträge in Foren zu diesem Thema
studiert und bin auf folgenden Workflow gekommen:

1) Ausgabe des Manuskripts aus LibreOffice als Postscript mittels "In Datei drucken"
   Es wird in PS Level 3 ausgegeben, Druckqualität maximale Auflösung
   Dabei entsteht die Datei "Manuskript.ps". Diese ist bei mir 715MB groß.
   Dieser Schritt ist wichtig, damit das PostScript Programm im folgenden Schritt
   korrekt funktioniert. Falls LibreOffice irgendwann einmal die PostScript Ausgabe
   ändert und andere PS Befehle verwendet, müsste das von mir verwendete Programm
   angepasst werden.

2) Die Datei "Manuskript.ps" wird nun mit folgendem Commandline-Befehl in eine
   PDF Datei umgewandelt. Dabei wird ein kleines PostScript Programm vorangestellt,
   welches die PostScript Befehle "setrgbcolor" und "setgray" passend neu definiert.

   $ gs -o Manuskript.pdf -sDEVICE=pdfwrite -sPAPERSIZE=a4 Preprint/RGB2CMYK_Pure_Black.ps Manuskript.ps

   Die Konvertierung dauert einige Sekunden.

   Dabei entsteht die Datei "Manuskript.pdf", die in meinem Fall 82MB groß ist.

   Das PS Script "RGB2CMYK_Pure_Black.ps" findet sich im Anhang zu dieser Mail.
   Ich habe es nicht selbst geschrieben, ich habe es aus Forenbeiträgen in
   verschiedenen Versionen entnommen (Siehe unten).

3) Überprüfung der Farbabdeckung für jede einzelne Seite:

$ gs -q -o - -sDEVICE=inkcov Manuskript.pdf
0.00000 0.00000 0.00000 0.02053 CMYK OK
0.00000 0.00000 0.00000 0.00763 CMYK OK
0.00000 0.00000 0.00000 0.04972 CMYK OK
0.00000 0.00000 0.00000 0.02861 CMYK OK
0.00000 0.00000 0.00000 0.09089 CMYK OK
0.00000 0.00000 0.00000 0.07407 CMYK OK
0.20089 0.18841 0.20785 0.12526 CMYK OK
0.25037 0.25089 0.25176 0.21457 CMYK OK
0.00000 0.00000 0.00000 0.02670 CMYK OK
0.00000 0.00000 0.00000 0.00000 CMYK OK
0.00000 0.00000 0.00000 0.09777 CMYK OK
0.00000 0.00000 0.00000 0.00394 CMYK OK
0.00000 0.00000 0.00000 0.08662 CMYK OK
0.16099 0.16124 0.16025 0.16064 CMYK OK
0.11852 0.11775 0.11930 0.10829 CMYK OK
0.00000 0.00000 0.00000 0.06201 CMYK OK
0.15865 0.16157 0.16155 0.15166 CMYK OK
0.14757 0.14754 0.14756 0.15898 CMYK OK
0.00000 0.00000 0.00000 0.05314 CMYK OK
[...]

Reine S/W Seiten sind nun also wie gewünscht "Pure Black".

4) Überprüfung im PDF Reader (Okular, Adobe Reader, ...)

-> Sieht gut aus, optisch sieht man keinen Unterschied zu einer
direkt von LibreOffice als PDF erzeugten Datei.

Voraussetzung für diesen Workflow ist eine funktionierende Ghostscript
Installation. Ich habe mit OpenSUSE LEAP 15.0 gearbeitet.

Nachteil dieser Lösung: Inhaltsverzeichnis und Querverweise sind im
PDF nicht mehr vorhanden. Aber für den Druck ist das irrelevant.

Für mich ist dieser Workflow praktisch gut anwendbar und die Druckerei
ist mit dem Ergebnis ebenfalls zufrieden (saubere Trennung von Farb-
und reinen S/W Seiten)

Schön wäre es, wenn LibreOffice diese Funktion in der einen oder anderen
Form out-of-the-box anbieten würde (Z.B. als Option beim PDF Export).

Aber fürs Erste bin ich mal zufrieden.
Ich hoffe, meine Erkenntnisse sind auch für andere hilfreich.

- andreas

Referenzen:

https://stackoverflow.com/questions/6248563/converting-any-pdf-to-black-k-only-cmyk
https://groups.google.com/forum/#!topic/comp.lang.postscript/f_vda41v2Pk
https://stackoverflow.com/questions/15115990/convert-rgb-pdf-to-cmyk-keep-100-k-black-and-100-mmagenta-on-linux
https://stackoverflow.com/questions/12299574/ghostscript-color-detection

Hallo Andreas,
vielen Dank für die ausführliche Anleitung.

   Das PS Script "RGB2CMYK_Pure_Black.ps" findet sich im Anhang zu dieser Mail.
   Ich habe es nicht selbst geschrieben, ich habe es aus Forenbeiträgen in
   verschiedenen Versionen entnommen (Siehe unten).

Anhänge werden auf dieser Mailingliste nicht durchgelassen.

Viele Grüße
Peter

Hi!

[...]

Anhänge werden auf dieser Mailingliste nicht durchgelassen.

Sorry, habe das erst jetzt gesehen.

Hier ist das Script also "inline":

%!
/oldsetrgbcolor /setrgbcolor load def
/setrgbcolor {
(in replacement setrgbcolor\n) print
                                %% R G B
  1 index 1 index %% R G B G B
  eq { %%
     2 index 1 index %% R G B R B
     eq {
                        %% Here if R = G = B
      pop pop %% remove two values
      % setgray % "replace the 'setgray' with":
      0 0 0 4 -1 roll % setcmykcolor
      -1 mul %% obtain -R on top of stack
      1 add %% obtain 1-R on top of stack
      setcmykcolor %% now set(cmykcolor) K (as 1-R)
     } {
       oldsetrgbcolor %% set the RGB values
     } ifelse
   }{
    oldsetrgbcolor %% Set the RGB values
    currentcmykcolor %puts 4 numbers on the stack
    (cmyk-) print pstack %display the colors (remove when things work correctly)
    3 -1 roll %put magenta on top of stack
    dup %make copy of magenta value
    .5 %put magenta test value on stack (then may not be exactly .5, see pstack)
    eq %see of magenta is equal to test value (.5)
    {pop 1}if %if it is equal, pop off the .5 and put a 1 onto the stack
    3 1 roll %put magenta back where it belongs in the stack
    setcmykcolor %reset the cmyk to have new magenta value
  }ifelse

} bind def
/oldsetgray /setgray load def
/setgray {
(in replacement setgray\n) print
  % == % debug: pop last element and print it
  % here we're at a gray value;
  % http://www.tailrecursive.org/postscript/operators.html#setcymkcolor
  % setgray: "gray-value must be a number from 0 (black) to 1 (white)."
  % setcymkcolor: "The components must be between 0 (none) to 1 (full)."
  % so convert here again:
  0 0 0 4 -1 roll % push CMY:000 after Gray and roll down,
                  % so top of stack becomes
                  % ...:C:M:Y:Gray
  -1 mul %% obtain -Gray on top of stack
  1 add %% obtain 1-Gray on top of stack
  setcmykcolor %% now set(cmykcolor) K (as 1-Gray)
} bind def

Die Zeilen mit "print" am Ende sind nur Debug-Ausgaben und
können bei Bedarf auskommentiert werden.

HTH

- andreas

Hallo!

LO OOo und wie die Programme alle heißen und hießen- eins können sie
alle nicht:
Ein anständig sauberes .pdf erzeugen. Daher empfehle ich externe
Programme wie Print-to-Pdf oder pdf-Creator.

Grüsse

Hallo "Mohing",

Du schriebst:

LO OOo und wie die Programme alle heißen und hießen- eins können sie
alle nicht:
Ein anständig sauberes .pdf erzeugen. Daher empfehle ich externe
Programme wie Print-to-Pdf oder pdf-Creator.

Bitte belege diese Behauptung durch _sachdienliche_ Argumente!

Das ist nicht das erste Mal, dass mir ein Posting von dir durch
mangelhafte Information und unbelegte Behauptungen auffällt...

Ich bin nicht gerne der "Aufpasser", aber es ist unschön, wenn andere
Teilnehmer in dieser Liste durch deine Behauptungen verunsichert werden
oder falsche Informationen mitnehmen.

Gruß,
Michael