public static Image getInstance(int width, int height, int components, int bpc, byte data)
本例中创建了一个100×100象素的图片,因为每个象素用RGB描述,所以图片大小为100×100×3字节。
System.Drawing.Bitmap
示例代码0610是一个比较高级的话题,理由如下:
首次使用到了System.Drawing.Bitmap类。该类在.net框架中,可以使用更多类型的图片,如TIFF、GIF,而这些图片在iText中均不支持,你可以检查一下.net框架看看你需要的图片格式是否得到支持。
前面的例子中,还有一些事情要注意:当添加一个图片时不会出现什么问题,文字始终浮于图片上面,本例中,我们希望图片浮在文字上面。这也是为什么我们将使用iTextSharp.text.pdf.PdfContentByte类的原因(见第十章)。
你将发现使用的图片为透明的gif格式,你可以到http://itextsharp.sourceforge.net/examples/h.gif下载得到。
TIFF和CCITT
示例代码0611也是一个比较高级的话题,例中转换一个TIFF文件到PDF文件。
u 图片遮罩
示例代码0613在,我们创建了一个用作遮罩的图片
3C
7E
E7
C3
C3
E7
7E
3C
该图片尺寸为8×8象素,每组一个字节,使用makeMask()方法可以转换成遮罩。
byte maskr = {(byte)0x3c, (byte)0x7e, (byte)0xe7, (byte)0xc3, (byte)0xc3, (byte)0xe7, (byte)0x7e, (byte)0x3c};
Image mask = Image.getInstance(8, 8, 1, 1, maskr);
mask.makeMask();
mask.setInvertMask(true);
我们可以用该遮罩直接遮住其他图片的一部分。
PdfContentByte cb = writer.DirectContent;
Image image = Image.getInstance("vonnegut.gif");
image.ImageMask = mask;
或者我们将该遮罩用于模板遮罪中。
PdfContentByte cb = writer.DirectContent;
cb.setRGBColorFill(255, 0, 0);
cb.addImage(mask, mask.scaledWidth() * 8, 0, 0, mask.scaledHeight() * 8, 100, 400);
关于ContentByte对象更多信息请参见第十章。
图片和其他对象
u 图片在块中
有时,可以方便地将图片置于块中,通过一定偏移将一个图片置于块中:
Chunk ck = new Chunk(img, 0, -5);
具体代码见示例代码0614,我们可以添加该特殊图片块到短句、表格等,本例中的图片请到http://itextsharp.sourceforge.net/examples/pngnow.png下载。
u 图片在表格中
你可以将图片添加到单元格中,但有两个副作用:
l 表格的宽度是确定,当图片超出单元格的宽度时,将自动缩小。
l 你不能进行文字绕排和为图片添加下划线。
参见示例代码0615。
u 图片链接注释
如果你希望得到一个可点击的图片,或者想添加链接注释到图片上,你需要创建一个Annotation对象,并添加到图片上,你不需要指定位置(你可以使用0,0,0,0),该位置会内部更新以适合该图片。
gif.Annotation = new Annotation(0, 0, 0, 0, "Chap1102b.pdf", 3);
jpeg.Annotation = new Annotation("picture", "These are my children", 0, 0, 0, 0);
参加示例代码0616。
第二部分 其他文档格式
第七章 XML和 (X)HTML
本章主要介绍了如何利用iText控件生成XLM文档和(X)HTML文档,但我们对这些并不感兴趣,故只介绍本章中提到的将XML转为PDF。
在第一章中,我们通过5步生产一个PDF文件,为了将一个XML文件转换为PDF文件,只需重写第3和第4步,第5步由解析器自动处理。
//第3步:创建一个解析器并设置文档句柄:
iTextHandler h = new iTextHandl