0

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

我的 iText 版本是:itext-2.0.8

我需要以下最终产品:在此处输入图像描述

我有一个 2 列的 PDF 表。

我为每个单元格添加了背景颜色。但这就是结果:

在此处输入图像描述

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

一些来样:

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

1 回答 1

1

我没有认真使用过这么古老的 iText 版本,因此只能指向更新的代码。不过,快速查看 svn annotate 结果似乎表明,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,因此您拥有创建所需的任何平铺图案所需的所有方法。

于 2013-10-02T08:34:12.267 回答