iText - 没有边框的roundRectangle

时间:2015-07-05 15:30:50

标签: itext border

是否可以使用没有边框的roundRectangle?以下代码创建边框大小为0f和1f的roundRectangles和Rectangle。对于roundRectangle,当lineWidth设置为0f时仍然存在可见边框,但对于边框为0f的矩形,情况并非如此。

以下是我正在使用的代码:

    magazine = new Document(PageSize.LETTER,0,0,0,0);
    pdfw = PdfWriter.getInstance(magazine, new FileOutputStream("out.pdf"));
    magazine.open();

    canvas = pdfw.getDirectContent();

    canvas.rectangle(0,0,600,750);
    canvas.setColorFill(BaseColor.ORANGE);
    canvas.fillStroke();

    canvas.setColorStroke(BaseColor.BLACK);
    canvas.setColorFill(BaseColor.GRAY);
    canvas.setLineWidth(1f);

    llx = 100;
    lly = 100;
    wid = 100;
    hei = 100;
    canvas.roundRectangle(llx,lly, wid, hei, 10);
    canvas.fillStroke();

    llx = 100;
    lly = 210;
    wid = 100;
    hei = 100;
    canvas.rectangle(llx,lly, wid, hei);
    canvas.fillStroke();

    canvas.setColorStroke(BaseColor.BLACK);
    canvas.setColorFill(BaseColor.WHITE);
    canvas.setLineWidth(0f);

    llx = 210;
    lly = 100;
    wid = 100;
    hei = 100;
    canvas.roundRectangle(llx,lly, wid, hei, 10);
    canvas.fillStroke();

    llx = 210;
    lly = 210;
    wid = 100;
    hei = 100;
    canvas.rectangle(llx,lly, wid, hei );
    canvas.fillStroke();

1 个答案:

答案 0 :(得分:1)

在PDF中绘制线条和形状时,使用路径构造运算符。以下方法引入了re(矩形)运算符来构造矩形。

canvas.rectangle(0,0,600,750);

iText还提供便捷方法。例如:以下方法引入了一系列m(移至),l(行至),c(曲线至),...运算符:

canvas.roundRectangle(llx,lly, wid, hei, 10);

只要构建了路径,就可以使用路径绘制操作符来实际绘制内容。 iText有不同的fill()stroke()fillStroke()版本。

您正在使用此方法:

canvas.fillStroke();

这意味着您使用填充颜色填充路径并使用笔触颜色描边路径。在你的问题中,你表明你只想填充路径(你想要为圆角矩形内的颜色着色);你不想抚摸它(你不想画圆角矩形的边框)。

这很容易实现。只需将fillStroke()替换为fill()

canvas.fill();

现在,您只会填充圆角矩形而不会描边。

mkl的评论:

  

线宽为0表示可以在器件分辨率下渲染的最细线:1个器件像素宽。

这是对的。将行的宽度更改为0意味着在调用stroke()时不会绘制该行,这是一种常见的误解。如果你不想看到一条线,解决方案很简单:不要划线