Itextpdf:矩形中的文本和颜色

时间:2015-09-29 09:54:10

标签: pdf itext itextpdf

是否可以使用iText在矩形中设置背景颜色的文本?

我有以下代码:

PdfContentByte canvas = writer.getDirectContent();
BaseColor bColor = new BaseColor(0xFF, 0xD0, 0x00);
canvas.setColorFill(bColor);
canvas.fill();
canvas.rectangle(rect.getLeft(), rect.getBottom() - 1.5f, rect.getWidth(), rect.getHeight());
canvas.stroke();

但颜色似乎被忽略了。我做错了什么?

2 个答案:

答案 0 :(得分:2)

你正在以错误的顺序做事。

你需要:

  1. 更改图形状态(例如填充颜色,笔触颜色......)
  2. 创建路径
  3. 填充和/或中风路径
  4. 您可以切换步骤1和2,但步骤3始终需要最后一次。

    所以你应该调整你的代码:

    PdfContentByte canvas = writer.getDirectContent();
    BaseColor bColor = new BaseColor(0xFF, 0xD0, 0x00);
    canvas.setColorFill(bColor);
    canvas.rectangle(rect.getLeft(), rect.getBottom() - 1.5f, rect.getWidth(), rect.getHeight());
    canvas.fillStroke();
    

    请注意,这也是错误的:

    PdfContentByte canvas = writer.getDirectContent();
    BaseColor bColor = new BaseColor(0xFF, 0xD0, 0x00);
    canvas.setColorFill(bColor);
    canvas.rectangle(rect.getLeft(), rect.getBottom() - 1.5f, rect.getWidth(), rect.getHeight());
    canvas.fill();
    canvas.stroke();
    

    在这种情况下,矩形将由canvas.fill()填充,但它不会有任何边框,因为填充它时已经处理了使用rectangle()方法创建的路径。在canvas.fill();canvas.stroke();之间没有创建新路径,因此stroke()运营商不会做任何事情。

答案 1 :(得分:1)

请放

canvas.setColorFill(bColor);
canvas.fill();

之后

 canvas.rectangle(rect.getLeft(), rect.getBottom() - 1.5f, rect.getWidth(), rect.getHeight());

同样的问题iText PDF Rectangle fill with color