如果一个表格不能放在一页中,将自动被分割,示例代码0508显示了当一个表格到达页边时发生的情况,这将在下一节中解释。
大表格
跨越几页的表格将自动被分割成不同的部分。示例代码0509显示了一个跨越多页的报表。该报表有一个表头,如果你希望这个表头在每页都出现,你可以用endHeaders()方法标记表头区域的结束点,见示例代码0510。 为做这样的报表,建议设置单元格间距为0和仅使用指定的填距。 你可能已经注意到了,当一个表格被分割时,一些边界好象丢失了。这是因为单元格在前一页被完整地绘制了而不会传递给下一页。 ? 强行将一个表格或单元格布置到一页上
有有些情况下,你可能希望避免单元格或者整个表被拆分成两个部分,示例代码0511差不多和示例代码0508完全一样,但我们设置了参数TableHasToFit为true,看看示例代码0508和示例代码0511结果区别。在示例代码0512中我们修改了示例代码0510的CellsHaveToFit属性为true,比较两个示例产生结果的区别。
内存管理
当我们添加一个对象到文档时,该对象一有可能就写入了输出流,但当创建一个表格时,该Table对象一直保存着,对于真正的大表格,这将成为一个问题。 同样,当你正写一个HttpServletResponse对象到输出流时,浏览器也可能超时。这就是为什么你自己用fitsPage()方法控制表分割是有用的,示例代码0513告诉你如何做。
嵌套表格
有两种方法嵌套表格,第一种是利用insertTable方法明确地将一个表格插入到另外一个表格,示例代码0514显示了通过插入到其他表格的办法创建的5
个 表格。正如你看到的在前面两个表中,所有空的单元格自动得到分割,因为改变了原来的表格。如果一个单元格不空,列跨度和(或)行跨度将自动调整到新的位 置,页面上第三个表格显示所有原表中列的相关宽度都得到了保护,第四个表格显示我们可以在插入了表格后添加其他单元格:该单元格自由地添加到下一个单元格 中。最后是一个深度嵌套的表格。
当你使用insertTable方法时,插入表的宽度百分比不会被考虑,如果你希望插入表仅占单元格的80%(这是默认的宽度百分比),你不得不在单元格中绕排,见示例代码0515,这也是让一个表结合其他数据存放在同一个单元格中的唯一办法,见示例代码0516。
备注:你只能将一个表格插入到列跨度和行跨度均为1的单元格中。
表格偏移
当一个表格被添加到文档之前,以当前间距为准的新行将被添加(如前一个插入对象的间距)。有时因为前一个插入对象和当前表格间的间距过大或过小你并不希望这样做,如果你想改变这个空间,你不得不设置表格偏移,如示例代码0517。
表格的绝对位置
iTextSharp.text.Table是一个通过标准方法创建表格的相当简单的类,但有时你希望表格有一些特殊的行为,这种情况下你将使用更复杂的类
com.lowagie.text.pdf.PdfPTable,示例代码0518是一个非常简单的例子,在第十章和十二章中将有一些更复杂的例子。
第六章 图片
Image对象
如果你学习过API,你可能已经注意到可以通过几种构造函数来创建图片,本手册中,我们将仅仅告诉你最简单的解决方案,如访问通过文件名或URL确定的图片生成的Image对象。
public static Image getInstance(Uri url)
public static Image getInstance(string filename) Image是一个抽象类,故得到实例的方法将判断给出的图片的类别(GIF、Jpeg、PNG??)并返回对象的类别Gif、Jpeg、Png??,一些图片会被忽略,如果你想知道哪些图片会被忽略,请查阅FAQ
(http://www.lowagie.com/iText/faq.html#images)。 ? 通过URL得到图片实例
这是添加一个图片最简单的办法,见示例代码0601,我们添加了一个WMF、一个Gif、一个Jpeg和一个PNG图片到文档中,使用4个URL得到: Image wmf = Image.getInstance(new URL(\harbour.wmf\ Image gif = Image.getInstance(new URL(\ Image jpeg = Image.getInstance(new URL(\ Image png = Image.getInstance(new URL(\
备注:许多PDF库在插入一个图片前都将其解压缩并转换成位图格式,下面是几个我为什么不这样做的原因:
? ?
这将导致PDF文件增大,这样产生的PDF文件尺寸是不同图片文件尺寸总和的数十倍。 面临一个法律问题:LZW算法受专利保护,所以不允许使用这种算法来解压缩GIF等文件。
? 通过文件名得到图片实例
通过简单地改变图片引用路径将示例代码0601改成示例代码0602: Image gif = Image.getInstance(\ Image jpeg = Image.getInstance(\
Image png = Image.getInstance(\
同示例代码0601的区别只是该图象从本地获取而已,另外一个例子见示例代码0603。
图片的位置
? 对齐方式
通过下面方法设置图片的对齐方式: Alignment = Image.RIGHT Alignment = Image.MIDDLE Alignment = Image.LEFT 参见示例代码0604。
我们将Vonnegut的图片放在右边,小孩的图片放在中间,hitchcock的图片放在左边。 ? 图片和文本
另外,你还可以指定文本相对图片的环绕方式: Alignment = Image.RIGHT | Image.TEXTWRAP Alignment = Image.MIDDLE
Alignment = Image.LEFT | Image.UNDERLYING
见示例代码0506,文字在Vonnegut图片的左侧,并不在我小孩的图处环绕,且排在Hitchcock图片的上面。 说明:该功能尚有一些BUG。 ? 绝对位置
当制作PDF文件时,你可能用到该方法:
public void setAbsolutePosition(int absoluteX, int absoluteY) 将一个图片放要页面上一个绝对位置的代码见示例代码0606,我们在不同的坐标处添加了两幅图片,这里使用给定的坐标将图片放在了左下角,通过将图片的宽度和高度作为X和Y坐标将设置第一个图片,坐标的2倍设置第二个图片。
缩放和旋转图片
? 缩放
有几种办法可以缩放图片:
public void scaleAbsolute(int newWidth, int newHeight) public void scalePercent(int percent)
public void scalePercent(int percentX, int percentY) public void scaleToFit(int fitWidth, int fitHeight)
小孩的图片大小为194×202象素,如果你想让图片小一些,你可以通过scaleAbsolute(97, 101)进行缩放,使用scalePercent(50)也能到达同样的效果。
还可以通过scaleAbsolute(194, 101)来减小,所以这些例子都放在了示例代码0607中。 ? 对分辨率的影响
如果一个图片不经任何缩放,其分辨率(resolution)为72,如果该图片缩放比例为50%,则分辨率为144,如果有更低的缩放比,则分辨率将更大,因为象素相同但尺寸变得更小了。使用72/300=24%的比例放置一个300dpi的图片,例:你用300dpi扫描了一个5×5英寸的图片,图片结果为1500×1500象素(5×300),当你用24%(72/300=0.24)的比例将该图片放置到PDF文件中时,PDF中的图片将为5×5英寸1500X1500象素300dpi,该图片将始终为1500X1500象素而不管尺寸如何。 ? 旋转
可以通过下面的方法旋转图片 public void setRotation(double r) 详见示例代码0608。
原始图片数据
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库iText中文帮助文档(6)在线全文阅读。
相关推荐: