Canvas itext7绘制百分比填充圆

Canvas itext7绘制百分比填充圆,canvas,draw,itext7,Canvas,Draw,Itext7,我需要画一个圆圈,这个圆圈有一定的百分比。我试过弧线,但那只是奇怪地切割圆。最终结果应该是这样的。当我连一个x%填充圆都画不出来的时候,我不知道该怎么做。通过叠加彩色和白色圆圈,我可以画出我想要的其余部分,但是如果我必须在顶层进行奇怪的切割,那就没有用了 我尝试过的代码: int tx=300; int ty=200; int tr=100; PdfCanvas canvas1 = new PdfCanvas(pdfPage); canvas1.setColor(

我需要画一个圆圈,这个圆圈有一定的百分比。我试过弧线,但那只是奇怪地切割圆。最终结果应该是这样的。当我连一个x%填充圆都画不出来的时候,我不知道该怎么做。通过叠加彩色和白色圆圈,我可以画出我想要的其余部分,但是如果我必须在顶层进行奇怪的切割,那就没有用了

我尝试过的代码:

int tx=300;
    int ty=200;
    int tr=100;
    PdfCanvas canvas1 = new PdfCanvas(pdfPage);
    canvas1.setColor(Color.GRAY, true);
    canvas1.circle(tx, ty, tr);
    canvas1.fill();

    PdfCanvas canvas11 = new PdfCanvas(pdfPage);
    canvas11.setColor(Color.WHITE, true);
    canvas11.circle(tx, ty, tr-10);
    canvas11.fill();

    PdfCanvas canvas2 = new PdfCanvas(pdfPage);
    canvas2.setColor(Color.GREEN, true);
    canvas2.arc(tx-tr-10, ty-tr-10, tx+tr+10, ty+tr+10,90,87);//87 is just for testing
    //canvas2.circle(tx, ty, tr+20);
    canvas2.fill();

    PdfCanvas canvas22 = new PdfCanvas(pdfPage);
    canvas22.setColor(Color.WHITE, true);
    canvas22.circle(tx, ty, tr-20);
    canvas22.fill();

首先,我看到您使用的是iText 7.0.x版本,因为颜色常量在color类中,而7.1.x已经发布了很长一段时间,7.1.4是目前的最新版本。我建议您在项目中尽早切换到新行,因为这是目前正在积极维护的版本行。API在7.0和7.1之间的差异非常小,但在您的情况下,必须使用ColorConstants类而不是Color

此外,无需每次创建新的PdfCanvas实例。您可以使用一个实例。如果需要,可以调用saveState和restoreState,以便颜色、线宽等设置仅适用于保存和恢复状态之间的操作

使用PdfCanvasarc进行处理实际上是有效的,但是您需要查看如何抚摸圆弧,而不是填充圆弧。如果我稍微修改一下您的代码:

int centerX = 300;
int centerY = 200;
int radius = 100;
float fillPercent = 80;
float circleThickness = 10;
float arcThickness = 15;

PdfCanvas canvas = new PdfCanvas(pdfPage);
canvas.setFillColor(ColorConstants.GRAY);
canvas.circle(centerX, centerY, radius);
canvas.fill();

canvas.setFillColor(ColorConstants.WHITE);
canvas.circle(centerX, centerY, radius - circleThickness);
canvas.fill();

canvas.setStrokeColor(ColorConstants.GREEN);
canvas.setLineWidth(arcThickness);
canvas.arc(centerX - radius + circleThickness / 2, centerY - radius + circleThickness / 2,
        centerX + radius - circleThickness / 2, centerY + radius - circleThickness / 2, 90, -fillPercent / 100 * 360.);
canvas.stroke();
我可以达到以下效果:


请你能展示一下你实际尝试过的代码吗?包括在内,但是没有多少xD