Java 使用PDFbox绘制饼图

Java 使用PDFbox绘制饼图,java,pdf,pdfbox,Java,Pdf,Pdfbox,我正在尝试用PDFbox绘制饼图,但是在片之间有白线,有人能帮我吗?有这样的选择吗 附上我正在使用的绘制圆弧的代码: while (start < stop) { List<Float> smallArc = PdfUtils.createSmallArc(a, b, radius, start, start + 2.0944 > stop ? stop : start + 2.0944); contentStream.saveGraph

我正在尝试用PDFbox绘制饼图,但是在片之间有白线,有人能帮我吗?有这样的选择吗

附上我正在使用的绘制圆弧的代码:

while (start < stop) {
    List<Float> smallArc = PdfUtils.createSmallArc(a, b, radius, start, start + 
        2.0944 > stop ? stop : start + 2.0944);
    contentStream.saveGraphicsState();
    contentStream.setNonStrokingColor(components[0], components[1], 
        components[2]);
    contentStream.moveTo(smallArc.get(0), smallArc.get(1));
    contentStream.curveTo(smallArc.get(2), smallArc.get(3), smallArc.get(4), 
        smallArc.get(5), smallArc.get(6), smallArc.get(7));
    contentStream.fill();
    contentStream.restoreGraphicsState();
    start += 2.0944;
}


public static List<Float> createSmallArc(float x, float y, double r, double a1, double a2) {
    double a = (a2 - a1) / 2;
    double x4 = r * Math.cos(a);
    double y4 = r * Math.sin(a);
    double x1 = x4;
    double y1 = -y4;
    double q1 = x1 * x1 + y1 * y1;

    double q2 = q1 + x1 * x4 + y1 * y4;
    double k2 = 4 / 3d * (Math.sqrt(2 * q1 * q2) - q2) / (x1 * y4 - y1 * x4);
    double x2 = x1 - k2 * y1;
    double y2 = y1 + k2 * x1;
    double x3 = x2;
    double y3 = -y2;

    double ar = a + a1;
    double cos_ar = Math.cos(ar);
    double sin_ar = Math.sin(ar);

    List<Float> list = new ArrayList<Float>();
    list.add((float) (r * Math.cos(a1)) + x);
    list.add((float) -(r * Math.sin(a1)) + y);
    list.add((float) (x2 * cos_ar - y2 * sin_ar) + x);
    list.add((float) -(x2 * sin_ar + y2 * cos_ar) + y);
    list.add((float) (x3 * cos_ar - y3 * sin_ar) + x);
    list.add((float) -(x3 * sin_ar + y3 * cos_ar) + y);
    list.add((float) (r * Math.cos(a2)) + x);
    list.add((float) -(r * Math.sin(a2)) + y);
    return list;
}
while(启动<停止){
List smallArc=PdfUtils.createSmallArc(a、b、半径、起点、起点+
2.0944>停止?停止:开始+2.0944);
contentStream.saveGraphicsState();
contentStream.SetNonSrokingColor(组件[0],组件[1],
组件[2]);
contentStream.moveTo(smallArc.get(0),smallArc.get(1));
contentStream.curveTo(smallArc.get(2)、smallArc.get(3)、smallArc.get(4),
smallArc.get(5)、smallArc.get(6)、smallArc.get(7));
contentStream.fill();
contentStream.restoreGraphicsState();
起动+=2.0944;
}
公共静态列表CreateSallArc(浮点x、浮点y、双r、双a1、双a2){
双a=(a2-a1)/2;
双x4=r*数学cos(a);
双y4=r*数学sin(a);
双x1=x4;
双y1=-y4;
双q1=x1*x1+y1*y1;
双q2=q1+x1*x4+y1*y4;
双k2=4/3d*(数学sqrt(2*q1*q2)-q2)/(x1*y4-y1*x4);
双x2=x1-k2*y1;
双y2=y1+k2*x1;
双x3=x2;
双y3=-y2;
双ar=a+a1;
双cos_ar=数学cos(ar);
double sin_ar=Math.sin(ar);
列表=新的ArrayList();
添加((浮动)(r*Math.cos(a1))+x);
添加((浮点)-(r*Math.sin(a1))+y);
添加((浮动)(x2*cos_ar-y2*sin_ar)+x);
列表。添加((浮动)-(x2*sin_-ar+y2*cos_-ar)+y);
列表。添加((浮动)(x3*cos_-ar-y3*sin_-ar)+x);
列表。添加((浮动)-(x3*sin_-ar+y3*cos_-ar)+y);
添加((浮动)(r*数学cos(a2))+x);
添加((浮点)-(r*Math.sin(a2))+y);
退货清单;
}
结果的附图:


谢谢

不要使用
fill()
,使用
fillAndStroke()
方法调用
setStrokingColor()
,使用与
setNonStrokingColor()
相同的参数尝试strokeAndFill,并将笔划颜色设置为与非笔划颜色相同的颜色。您得到了什么?
start
stop
在您的代码中不会更改,因此一旦进入
while
循环,您的程序将永远不会离开它,直到出现错误…@mkl I编辑了问题并添加了缺少的代码。@tilmahauser问题已解决,谢谢!