将专色(直接色调)添加到PDF

时间:2019-11-07 16:35:58

标签: java pdfbox

是否有人有示例代码可为PDF​​添加直接音调? 它是为打印机生产检测矩形切割而成的。 这个专色被称为«decoupe»,我需要矩形。 我不需要修改分隔的CMYK值。

我需要在文档中使用一种名为“ decoupe”的颜色,并使用该颜色创建具有该颜色的矩形,打印机会检测到该颜色以将文档切成该格式。在PDF文档中,该行应如下所示:14 0 obj [/ Separation / decoupe / DeviceCMYK << / Range [0 1 0 1 0 1 0 1] / C0 [0 0 0 0] / C1 [0.000000 0.000000 0.000000 0.000000 ] / FunctionType 2 /域[0 1] / N 1 >>] endobj

1 个答案:

答案 0 :(得分:1)

此代码为具有专色的现有PDF添加一个矩形。我将c1的值更改为1 1 1 1,以便可以看到一些东西(您是0 0 0 0)。

public static void main(String[] args) throws IOException
{
    PDDocument doc = PDDocument.load(....);

    COSArray array = new COSArray();
    array.add(COSName.SEPARATION);
    array.add(COSName.getPDFName("decoupe"));
    array.add(COSName.DEVICECMYK); // alternate color

    COSDictionary fdict = new COSDictionary();
    fdict.setInt(COSName.FUNCTION_TYPE, 2);
    COSArray range = new COSArray();
    range.add(COSInteger.get(0));
    range.add(COSInteger.get(1));
    range.add(COSInteger.get(0));
    range.add(COSInteger.get(1));
    range.add(COSInteger.get(0));
    range.add(COSInteger.get(1));
    range.add(COSInteger.get(0));
    range.add(COSInteger.get(1));
    COSArray domain = new COSArray();
    domain.add(COSInteger.get(0));
    domain.add(COSInteger.get(1));
    COSArray c0 = new COSArray();
    c0.add(COSFloat.get("0"));
    c0.add(COSFloat.get("0"));
    c0.add(COSFloat.get("0"));
    c0.add(COSFloat.get("0"));
    COSArray c1 = new COSArray();
    c1.add(COSFloat.get("1"));
    c1.add(COSFloat.get("1"));
    c1.add(COSFloat.get("1"));
    c1.add(COSFloat.get("1"));
    fdict.setItem(COSName.DOMAIN, domain);
    fdict.setItem(COSName.RANGE, range);
    fdict.setItem(COSName.C0, c0);
    fdict.setItem(COSName.C1, c1);
    fdict.setInt(COSName.N, 1);
    PDFunctionType2 func = new PDFunctionType2(fdict);
    array.add(func); // tint transform

    PDColorSpace spotColorSpace = new PDSeparation(array);

    PDPage page = doc.getPage(0);
    PDPageContentStream cs = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true);
    PDColor color = new PDColor(new float[]{0.5f}, spotColorSpace);
    cs.setStrokingColor(color);
    cs.setLineWidth(10);
    cs.addRect(50, 50, 300, 300);
    cs.stroke();
    cs.close();
    doc.save(...);
}

我用作帮助的是:PDSeparation.java的源代码以及从源代码下载中获得的CreateGradientShadingPDF.java示例,其中一个具有2类功能,可以轻松复制和修改。