OpenPDF (ehem. iText) will kein PDF mit CMYK only erzeugen

inflamer

Bekanntes Mitglied
Hi Leute,

wie im Titel bereits durchschimmert, muss ich eine PDF-Datei für den Druck erzeugen, in welcher sämtliche Farbangaben im CMYK-Farbmodell hinterlegt sind (statt im RGB).

Dies gelingt mir bislang nicht, denn z.B. aus 0.8, 0.8, 0.0, 0.3 wird - durch die "Pipette" des InDesign ermittelt - 88%, 88%, 20%, 8%.

Die Farben sehen ähnlich aus, weshalb ich annehme, dass OpenPDF meine CMYK-Farben beim Erzeugen der PDF mehr oder weniger präzise in RGB-Farben konvertiert und auch nur diese speichert.

Hier steht, dass das PDF-"Teilmengen"-Format PDF/X-1a genau für Zwecke wie den meinen gedacht ist und außerdem auch nur CMYK "annimmt".

Dies versuche ich dann auch durch die Zeilen zu forcieren:
Java:
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
writer.setPDFXConformance(PdfWriter.PDFX1A2001);

... was das Problem aber nicht behebt. 🙁

Jemand eine Idee? Danke im Voraus!
 
Beste Antwort
Bisschen mehr Code wäre nicht schlecht gewesen...

Hier mal ein Beispiel für itext 2.1.7
Java:
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class App {
    public static void main(String[] args) throws Exception {
        
        Document doc = new Document();
        PdfWriter writer = PdfWriter.getInstance(doc, 
                new FileOutputStream("test.pdf"));
        writer.setCompressionLevel(0);
        doc.open();
        doc.add(new Paragraph("This is a paragraph",
                FontFactory.getFont(FontFactory.HELVETICA, 18, 
                Font.BOLDITALIC, new CMYKColor(0.8f, 0.8f, 0, 0.2f))));

        doc.close();
    }
}

Die Komprimierung wurde auf Level 0 gesetzt, damit man das...
Bisschen mehr Code wäre nicht schlecht gewesen...

Hier mal ein Beispiel für itext 2.1.7
Java:
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class App {
    public static void main(String[] args) throws Exception {
        
        Document doc = new Document();
        PdfWriter writer = PdfWriter.getInstance(doc, 
                new FileOutputStream("test.pdf"));
        writer.setCompressionLevel(0);
        doc.open();
        doc.add(new Paragraph("This is a paragraph",
                FontFactory.getFont(FontFactory.HELVETICA, 18, 
                Font.BOLDITALIC, new CMYKColor(0.8f, 0.8f, 0, 0.2f))));

        doc.close();
    }
}

Die Komprimierung wurde auf Level 0 gesetzt, damit man das PDF besser lesen kann und dort steht ganz klar:
Code:
/F1 18 Tf
0.8 0.8 0 0.2 k
(This is a paragraph)Tj
 
Beste Antwort
Der Tipp mit der 0-Kompression war goldig! Danke!

Auch bei mir stehen die korrekten Werte drin, wie ich nun feststelle.

Inzwischen habe ich mich der Lösung von einer anderen Seite genähert, und zwar zeigt die Pipette von InDesign die Farben anscheinend nicht originalgetreu an - warum auch immer, bin überhaupt kein InDesign-Experte... Bin grad am andere Tools ausprobieren, aber das Problem an sich hat sich dann schon mal in Luft aufgelöst... 😉

Thx!
 
Darf ich noch eine kurze Frage hinterherschieben? (Habe bereits ausgiebig gegoogelt...)

OpenPDF rundet die Koordinaten von Elementen, die ich in eine PdfGraphics2D-Instanz zeichne, im fertigen PDF-Code auf 2 Nachkommastellen:
[CODE title="Kleiner Ausschnitt"]f
23.99 99.24 m
26.52 99.24 l
26.52 0 l
23.99 0 l
23.99 99.24 l
h
f
27.78 99.24 m
32.83 99.24 l
32.83 0 l
27.78 0 l
27.78 99.24 l
h
[/CODE]
Weißt du zufällig, ob sich die Anzahl von Nachkommastellen manuell erhöhen lässt?
 
Nicht wirklich. Da müsste man mal in den Quellcode schauen. Wenn ich eine Linie von x = 0.0009 aus zeichne, dann wird das auch so ausgegeben, die restlichen (krummen) Koordinaten werden aber z. T. auf 1 NKst gerundet:
Code:
        Line2D line = new Line2D.Double(0.0009, 0.009, 10.1002, 10.1002);
wird zu
Code:
0.0009 99.99 m
10.1 89.9 l
Der Graphics-Context ist 100 x 100 groß.
 

Zurück
Oben