PDFBox - 带梯度的矩形
答
找到这个例子。看看它是否适合你
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()'时相同。 –
请参阅源代码下载的CreateGradientShadingPDF.java示例。它的摘录是在答案:-)有7种不同类型的梯度,但通常类型2或3是你想要的。请享用。 –
我看过这个,但不明白。你有关于如何创建渐变的任何文档? –
只有PDF规格。 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf。问题是你必须知道你想创建什么样的梯度(可能是轴向的),以及它应该看什么,即什么颜色和在哪里。 –