【问题标题】:Does PDFBox Support Spot Colors and Separations?PDFBox 支持专色和分色吗?
【发布时间】:2012-05-14 10:48:06
【问题描述】:

我有兴趣将 PDFBox 用于需要能够在 PDF 输出中指定专色和分色以转到专业打印机的项目,并且很好奇它是否支持这一点。如果是这样(我也这么认为),我也在寻找一些示例代码。

我在他们的邮件列表 (here) 上发现了一篇 2009 年的旧帖子,这让我相信 PDFBox 可以支持分色,但没有成功找到任何示例代码。我查看了他们的JavaDoc 并发现了org.apache.pdfbox.pdmodel.graphics.color 类,但不知道如何利用它们,也没有在他们的网站或源代码中看到任何cookbook 示例。

我非常感谢任何有助于说明 DeviceN 颜色空间的示例。

【问题讨论】:

  • Separation 和 DeviceN 不一样。

标签: java pdf pdfbox color-space


【解决方案1】:

你为什么不能用PDSeparationclass

【讨论】:

  • 这似乎是朝着正确方向迈出的一步。您有任何将此类应用于 PDF 输出的示例代码吗?
【解决方案2】:

请看下面

  1. 从 PDF 文件(spotColor.pdf)中获取 PDColor,并确保您使用的专色在此 PDF 文件中。(我由 Adob​​e 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. 使用你的 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 如果您有更聪明的想法,请告诉我 :)

【讨论】:

  • 如果您向他解释代码,您的回答将对 OP 更有帮助。
  • 这行PDSeparation cs = (PDSeparation) color.getColorSpace(); 是有风险的,因为你不能确定所有颜色都是分离的。除此之外,我认为答案还可以;另一种方法是从头开始创建色彩空间,这很困难,因为必须创建 tintTransform 函数。
猜你喜欢
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 2011-09-18
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多