Itextpdf :矩形中的文本和颜色

Itextpdf : text and color in rectangle

是否可以使用 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();

但是颜色好像被忽略了。我做错了什么?

请输入

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

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

同样的问题iText PDF Rectangle fill with color

你做错了顺序。

你需要:

  1. 更改图形状态(例如填充颜色、描边颜色...)
  2. 创建路径
  3. 填充and/or描边路径

您可以切换第 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() 运算符不会执行任何操作。