带渐变的 PDFBox 虚线图案
PDFBox dotted pattern with gradient
我已经可以通过以下方法使用 contentStream 添加行:
setLineWidth(h) - 设置线宽
setLineDashPattern(pattern, period) - 需要创建模式 space 和点,例如 new float[]{0.075,2}
setLineCapStyle(2) - 将所有点设置为矩形
moveTo(x,y) - 设置起点
lineTo(x,y) - 设置终点
stroke() - 打印线
但现在我需要创建一个从点中心到点边缘的渐变
谁能给我建议如何添加渐变?
这基于源代码中的 CreateGradientShadingPDF.java 示例。这两个圆圈的位置相同,但第二个圆圈是空的。函数中c0为白色,c1为黑色。
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
// type 2 (exponential) function with attributes
COSDictionary 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 attributes
PDShadingType3 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)); // radius1
coords2.add(COSInteger.get(100));
coords2.add(COSInteger.get(400));
coords2.add(COSInteger.get(0)); // radius2
radialShading.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 editor
try (PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, false))
{
contentStream.shadingFill(radialShading);
}
中找到有关径向阴影的更多背景知识
我已经可以通过以下方法使用 contentStream 添加行:
setLineWidth(h) - 设置线宽
setLineDashPattern(pattern, period) - 需要创建模式 space 和点,例如 new float[]{0.075,2}
setLineCapStyle(2) - 将所有点设置为矩形
moveTo(x,y) - 设置起点
lineTo(x,y) - 设置终点
stroke() - 打印线
但现在我需要创建一个从点中心到点边缘的渐变
谁能给我建议如何添加渐变?
这基于源代码中的 CreateGradientShadingPDF.java 示例。这两个圆圈的位置相同,但第二个圆圈是空的。函数中c0为白色,c1为黑色。
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
// type 2 (exponential) function with attributes
COSDictionary 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 attributes
PDShadingType3 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)); // radius1
coords2.add(COSInteger.get(100));
coords2.add(COSInteger.get(400));
coords2.add(COSInteger.get(0)); // radius2
radialShading.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 editor
try (PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, false))
{
contentStream.shadingFill(radialShading);
}
中找到有关径向阴影的更多背景知识