Поддерживает ли PDFBox точечные цвета и разрывы?

Я заинтересован в использовании PDFBox для проекта, который требует возможности указать точечные цвета и цветоделение в PDF-выходе, чтобы перейти к профессиональному принтеру, и мне интересно, поддерживает ли он это. Если да (и я так думаю), я также ищу пример кода.

Я нашел старую запись с 2009 года в своем списке рассылки (здесь), что заставляет меня думать, что PDFBox может поддерживать цветоделение, но не имеет удалось найти какой-либо пример кода. Я просмотрел их JavaDoc и обнаружил классы org.apache.pdfbox.pdmodel.graphics.color, но не знаю, как использовать их и не видеть никаких cookbook на своем веб-сайте или в исходном коде.

Я хотел бы оценить любые примеры, которые помогут иллюстрировать цветовое пространство DeviceN.

Ответ 1

См. ниже

введите описание изображения здесь

1. get the PDColor from a PDF file(spotColor.pdf),and make sure that the spot colors which you well used are in this PDF file.(I made the file by Adobe Illustrator)
    public static Map<String, PDColor> getSpotColor() {
            Map<String, PDColor> colors = new HashMap<String, PDColor>();
            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. use your PDColor
public static void main(String[] args) {
        PDDocument doc = null;
        PDPage page = null;
        try {
            Map<String, PDColor> 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, если у вас есть идея более умная, пожалуйста, дайте мне знать:)

Ответ 2

Почему вы не можете использовать PDSeparation класс