itext7绘制%实心圆

时间:2019-01-04 14:44:17

标签: canvas draw itext7

我需要画一个以一定百分比填充的圆。我试过了弧线,但这只是在怪异地切圆。最终结果应类似于this。当我什至不能画一个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();

1 个答案:

答案 0 :(得分:1)

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

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

您使用PdfCanvas#arc的方法实际上是有效的方法,但是您需要研究抚摸弧度而不是填充弧度。如果我稍微修改一下代码:

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();

我可以达到以下效果:

resultant arc