PDFBox 带渐变的虚线图案

我已经可以使用带有方法的 contentStream 添加行:

setLineWidth(h) - 设置线条粗细

setLineDashPattern(pattern, period) - 模式创建所需的空间和点,例如 new float[]{0.075,2}

setLineCapStyle(2) - 将所有点设置为矩形

moveTo(x,y) - 设置起点

lineTo ( x , y ) - 设置终点

stroke() - 打印线

但现在对我来说需要创建一个从点中心到点边缘的渐变

谁能给我建议如何添加渐变?


慕田峪9158850
浏览 178回答 1
1回答

肥皂起泡泡

这是基于源代码中的 CreateGradientShadingPDF.java 示例。这两个圆圈的位置相同,但第二个圆圈是空的。在函数中,c0 为白色,c1 为黑色。PDDocument document = new PDDocument();PDPage page = new PDPage();document.addPage(page);// type 2 (exponential) function with attributesCOSDictionary fdict = new COSDictionary();fdict.setInt(COSName.FUNCTION_TYPE, 2);COSArray domain = new COSArray();domain.add(COSInteger.get(0));domain.add(COSInteger.get(1));COSArray c0 = new COSArray();c0.add(COSFloat.get("1"));c0.add(COSFloat.get("1"));c0.add(COSFloat.get("1"));COSArray c1 = new COSArray();c1.add(COSFloat.get("0"));c1.add(COSFloat.get("0"));c1.add(COSFloat.get("0"));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);// radial shading with attributesPDShadingType3 radialShading = new PDShadingType3(new COSDictionary());radialShading.setColorSpace(PDDeviceRGB.INSTANCE);radialShading.setShadingType(PDShading.SHADING_TYPE3);COSArray coords2 = new COSArray();coords2.add(COSInteger.get(100));coords2.add(COSInteger.get(400));coords2.add(COSInteger.get(50)); // radius1coords2.add(COSInteger.get(100));coords2.add(COSInteger.get(400));coords2.add(COSInteger.get(0)); // radius2radialShading.setCoords(coords2);radialShading.setFunction(func);// invoke shading from content stream// compress parameter is set to false so that you can see the stream in a text editortry (PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, false)){    contentStream.shadingFill(radialShading);}有关径向着色的更多背景信息,请参见PDF 32000 规范。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java