PDFBox - 带梯度的矩形

PDFBox - 带梯度的矩形

问题描述:

我正尝试使用Java中的PDFBox库创建pdf。我必须使用渐变创建矩形,但我不知道如何以及什么都找不到。任何人都可以帮助我吗?PDFBox - 带梯度的矩形

+2

请参阅源代码下载的CreateGradientShadingPDF.java示例。它的摘录是在答案:-)有7种不同类型的梯度,但通常类型2或3是你想要的。请享用。 –

+0

我看过这个,但不明白。你有关于如何创建渐变的任何文档? –

+0

只有PDF规格。 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf。问题是你必须知道你想创建什么样的梯度(可能是轴向的),以及它应该看什么,即什么颜色和在哪里。 –

找到这个例子。看看它是否适合你

COSDictionary fdict = new COSDictionary(); 

    fdict.setInt(COSName.FUNCTION_TYPE, 2); // still not understaning that... 

    COSArray domain = new COSArray(); 
    domain.add(COSInteger.get(0)); 
    domain.add(COSInteger.get(1)); 

    COSArray c0 = new COSArray(); 
    c0.add(COSFloat.get("0.64176")); 
    c0.add(COSFloat.get("0.72588")); 
    c0.add(COSFloat.get("0.78078")); 

    COSArray c1 = new COSArray(); 
    c1.add(COSFloat.get("0.57176")); 
    c1.add(COSFloat.get("0.62588")); 
    c1.add(COSFloat.get("0.70078")); 

    fdict.setItem(COSName.DOMAIN, domain); 
    fdict.setItem(COSName.C0, c0); 
    fdict.setItem(COSName.C1, c1); 
    fdict.setInt(COSName.N, 1); 

    PDFunctionType2 func = new PDFunctionType2(fdict); 

    PDShadingType2 axialShading = new PDShadingType2(new COSDictionary()); 

    axialShading.setColorSpace(PDDeviceRGB.INSTANCE); 
    axialShading.setShadingType(PDShading.SHADING_TYPE2); 

    COSArray coords1 = new COSArray(); 
    coords1.add(COSInteger.get(0)); 
    coords1.add(COSInteger.get(0)); 
    coords1.add(COSInteger.get(850)); // size of my page 
    coords1.add(COSInteger.get(600)); 

    axialShading.setCoords(coords1); // so this sets the bounds of my gradient 
    axialShading.setFunction(func); // and this determines all the curves etc? 

    CStr.shadingFill(axialShading); // where CStr is a ContentStream for my PDDocument 
+0

我已经看到它了,我可以在背景上创建渐变 - 并且此示例创建三角形,而不是矩形 –

+0

如果它创建了一个三角形,那么这意味着您之前已经创建了一个三角形形状。 shadingFill()将填充此时的任何剪辑区域和路径处于活动状态。 –

+0

我刚才运行这段代码,只是我改变了'coords1'中的值 - 把值设为0,0,200,100。当我以前画一个矩形时,在这个矩形后面有黑色矩形和三角形渐变。 'moveTo()'和'lineTo()'时相同。 –