与Itext的背景图案

时间:2013-10-01 12:04:02

标签: java pdf pdf-generation itext

我正在生成一个带有itext的文档。

我的iText版本是:itext-2.0.8

我需要关注最终产品:enter image description here

我有一个包含2列的PDF表格。

我为每个细胞添加了背景颜色。但这就是结果:

enter image description here

是否可以从第一张图片中获取图案?

有些人来样品:

private static Color firstBGColColor = new Color(255,222,166);
  ...
PdfPTable table = new PdfPTable(2);
table.setWidthPercentage(100);
table.setWidths(new float[]{160,400});
PdfPCell cell;
cell = new PdfPCell();
cell.setPaddingLeft(7);
cell.setPaddingTop(10);
cell.setBorder(Rectangle.NO_BORDER);
cell.setBackgroundColor(firstBGColColor);

1 个答案:

答案 0 :(得分:1)

我没有认真使用过如此古老的iText版本,因此只能指向更新的代码。快速浏览一下svn注释结果似乎表明,大多数中心功能已经在iText中存在了很长时间。因此,此代码至少应该告诉您如何开始。

PDF知道平铺模式的概念,赋予ISO 32000-1的第8.7.3节<平铺模式,这应该是您创建正确背景所需的内容。 iText使用TilingPatternColor.java中的辅助方法支持此类切片模式,如示例DeviceColor.java中所示。摘录:

PdfContentByte canvas = writer.getDirectContent();

PdfPatternPainter square = canvas.createPattern(15, 15);
square.setColorFill(new BaseColor(0xFF, 0xFF, 0x00));
square.setColorStroke(new BaseColor(0xFF, 0x00, 0x00));
square.rectangle(5, 5, 5, 5);
square.fillStroke();

定义了这样的PdfPatternPainter后,您可以从new PatternColor(square)生成一个颜色实例并使用此颜色。

样本使用它如下:

canvas.saveState();
canvas.setColorFill(new PatternColor(square));
canvas.rectangle(36, 696, 126, 126);
canvas.fillStroke();
canvas.restoreState();

您当然必须以不同方式设计PdfPatternPainter。因为它本质上是一个PdfTemplate,你可以拥有创建所需的任何平铺模式所需的所有方法。