12 Stimmen

Unterstützt PDFBox Spotfarben und Separationen?

Ich interessiere mich für die Verwendung von PDFBox für ein Projekt, das es erfordert, Sonderfarben und Farbaufteilungen im PDF-Ausgang festlegen zu können, um sie an einen professionellen Drucker zu senden, und frage mich, ob es dies unterstützt. Wenn ja (und ich denke schon), suche ich auch nach Beispielcode.

Ich habe einen alten Beitrag aus dem Jahr 2009 in ihrem Mailing-Liste gefunden (hier), der mich glauben lässt, dass PDFBox Farbaufteilungen unterstützen kann, aber es ist mir noch nicht gelungen, Beispielcode zu finden. Ich habe ihr JavaDoc durchsucht und die org.apache.pdfbox.pdmodel.graphics.color Klassen entdeckt, weiß aber nicht, wie ich sie nutzen kann, und sehe keine Beispiel auf ihrer Website oder im Quellcode.

Ich würde insbesondere Beispiele schätzen, die den DeviceN-Farbraum veranschaulichen.

2voto

sam.zeng Punkte 11

Bitte sieh unten

geben Sie hier eine Bildbeschreibung ein

  1. Holen Sie sich die PDColor aus einer PDF-Datei (spotColor.pdf) und stellen Sie sicher, dass die Sonderfarben, die Sie verwenden, in dieser PDF-Datei enthalten sind. (Ich habe die Datei mit Adobe Illustrator erstellt)

        public static Map getSpotColor() {
            Map colors = new HashMap();
            PDDocument spotColorFile = null;
            try {
                spotColorFile = PDDocument.load(new FileInputStream(new File(
                        "d:\\spotColor.pdf")));
                for (PDPage page : spotColorFile.getPages()) {
                    for (COSName name : page.getResources().getColorSpaceNames()) {
                        PDColor color = page.getResources().getColorSpace(name)
                                .getInitialColor();
                        PDSeparation cs = (PDSeparation) color.getColorSpace();
                        colors.put(cs.getColorantName(), color);
                    }
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (spotColorFile != null)
                    try {
                        spotColorFile.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } finally {
                        spotColorFile = null;
                    }
            }
            return colors;
        }
  2. Verwenden Sie Ihre PDColor

    public static void main(String[] args) {
        PDDocument doc = null;
        PDPage page = null;
        try {
            Map colors = getSpotColor();
            doc = new PDDocument();
            page = new PDPage(new PDRectangle(100, 100));
            doc.addPage(page);
            PDPageContentStream content = new PDPageContentStream(doc, page);
    
            content.beginText();
            content.setNonStrokingColor(colors.get("PANTONE 2607 C"));
            content.setFont(PDType1Font.HELVETICA_BOLD, 20);
            content.showText("abcdef");
            content.endText();
    
            content.setNonStrokingColor(colors.get("PANTONE 108 U"));
            content.addRect(50, 50, 50, 50);
            content.fill();
            content.close();
    
            doc.save("d:\\spotColorTest.pdf");
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            if (doc != null)
                try {
                    doc.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    doc = null;
                }
        }
    }

3 Wenn Sie eine noch intelligentere Idee haben, lassen Sie es mich bitte wissen :)

0voto

TheWhiteRabbit Punkte 15172

Warum können Sie die PDSeparation Klasse nicht verwenden?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X