



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关键字: itext 生成 pdf iText是一个比较底层的pdf库,很多项目的pdf操作都是以它为基础的。像spring,以及另一个比较有名的报表工具jasperreports。简单的pdf报表输出用它比较合适,比较复杂的话使用起来就比较困难了,你要手工编写太多的代码。 比较好的是iText网站上提供相当多的示例代码,比较容易入门。我这里只说一些在它的文档里并没有直接讲到的东西。 1 关于Document Document的几种构造函数: public Document(); public Document(Rectangle pageSize); public Document(Rectangle pageSize, int marginLeft, int marginRight, int marginTop, int marginBottom); 下面两种比较有用,如果是你想定义纸张大小和边缘的时候。对于Margin,iText上提到“You can also change the margins while you are adding content. Note that the changes will only be noticed on the NEXT page. If you want the margins mirrored (odd and even pages), you can do this with this method: setMarginMirroring(true). ”不过,对于table似乎并不好使。table并不会了理会你设定的margin,如果想改变它的magin还是需要去改变它的宽度(setWidth)。 2 pdf表单 使用PdfStamper是可以填充pdf表单的,这样就给出了一种很好的报表生成思路。 word制作报表样式-acrobat转pdf-itext填充数据-输出pdf 这做非常简单,因为可以比较容易的控制pdf的样式。我对于Java的报表工具了解的并不多,不过在jasperreports,即使用GUI工具做一个样式比较复杂的报表也不是怎么容易。比如有那种斜线的表头,比较花哨的嵌套表格。这样的情况还是比较多见的,客户不会关系你实现起来是否困难。不过想要使用这种方式也有不足的地方。首先是acrobat把word转化成pdf的时候,格式总是保持不好,特别的是字体。然后是文件的体积这样生成的pdf会比直接用iText生成的pdf文件大很多,acrobat在pdf里加入了太多无用的信息。初次使用iText填充Adobe Designer生成的pdf表单时会有点小麻烦。在Designer中设计了一个name的text文本框的绑定名为name。照着iText中例子使用使用PdfStamper的setField方法去这样写form.setField(name, XXXX);并不会成功。原因是Adobe Designer生成的表单名都是具有层次的,它可能是这个样子form10.#0。不过我们可以用一个方法把它们列出来,只要做一次就知道结构了,可以使用类似下面的代码: PdfReader reader = new PdfReader(form.pdf); PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(registered_flat.pdf); AcroFields form = stamp.getAcroFields(); for (Iterator it = form.getFields().keySet().iterator(); it .hasNext();) System.out.println(it.next(); 如果直接用iText编程生成的表单就不会有这样的问题,设定的什么名字就是什么名字。 3 表单元素 pdf并不像html那样具有良好清晰的结构,而是一个有层次的文档类型。在它的maillist里,作者说明了iText虽然可以操作现存的pdf文件但是没办法去还原它的结构的。没办法像html一样,能从一个pdf文件获得一个清晰的“源文件”的。关于层次,可以从iText上得到详细的讲述,获取去看看pdf规范。表单和普通文本是不在一个层上的。没办法适用对待文本表各一样把它们简单的add进Document对象。获取一个cb直接去用绝对定位的方法可以加入表单元素,不过很多的时候因为排版并不能那么简单的去做。就是在html中布局一样可以使用表格定位。想把一个表单元素加入cell,要借助cell的setCellEvent方法。以一个checkbox为例。新建一个类CheckBoxForm,实现PdfPCellEvent接口。需要实现一个cellLayout的方法。 public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte canvases) position可以好好利用,它包含当前cell的位置信息,你可以用它来确定自己checkbox的位置。 position.top()-position.bottom()就能得到高position.right()-position.left()可以得到长,如果需要这两个值得花可以如此计算。下面的代码就是定义一个宽度为a的checkbox的rectangle 。它在cell中水平居中,垂直也居中。 float bo = (position.top()-position.bottom()-a)/2; float ao = (position.right()-position.left()-a)/2; Rectangle rectangle = new Rectangle(position.left() + ao, position .bottom() + bo, position.left() +ao+ a, position.bottom()+ bo + a); 然后把它加入Document RadioCheckField tf = new RadioCheckField(writer, rectangle, fieldname, f); tf.setCheckType(RadioCheckField.TYPE_SQUARE); tf.setBorderWidth(1); tf.setBorderColor(Color.black); tf.setBackgroundColor(Color.white); try PdfFormField field = tf.getCheckField(); writer.addAnnotation(field); catch (IOException e) e.printStackTrace(); catch (DocumentException e) e.printStackTrace(); 其它的元素与此类似。 4 PdfPTable和Table 说不上哪种更好用,有时候不能不使用PdfPTable。可惜它只有setColspan方法,没有setRowspan。嵌套的时候也有区别,PdfPTable是用addcell()加入嵌套表的,table则有一个更明了的方法insertTable()。PdfPTable想进行设置border之类的操作要先获得一个默认cell, pdfPTableName.getDefaultCell().setBorder(Rectangle.NO_BORDER);/设置无框的表 另外在PdfPTable中,一些修饰属性会因为设置的时机不正确而没有效果。如,适用cell的构造函数加入了文本,在cell的setVerticalAlignment()fangfa去设定垂直对齐方式就不会有效。还有一个有意思的不同是table默认外边框是加粗的,而PdfPTable则一样粗细。 5 字体 iText的例子有很多足够用,给出一些pdf的字体名称和编码,如果想使用内嵌字体的话。 语言 PDF 字体名 简体中文 STSong-Light 繁体中文 MHei-Medium MSung-Light 日语 HeiseiKakuGo-W5 HeiseiMin-W3 韩语 HYGoThic-Medium HYSMyeongJo-Medium 字符集 编码 简体中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑工程师高级职称考试要点解析与预测题
- 2025年计算机等级考试(二级人工智能与人工智能与人工智能与大数据)试卷及答案
- 2026届广东省深圳市乐而思中心化学高二上期中教学质量检测试题含解析
- 2025年化工原理面试专题氟化工艺应用篇模拟题答案详解
- 2025年期刊编辑岗位竞聘面试预测题及应对策略
- 2025年篮球裁判理论考试题库及答案
- 2025年审计师考试笔试预测试题及答案权威发布
- 2025年行走安全知识测试题集及答案
- 北京市门头沟区2023-2024学年九年级上学期期中考试道德与法制试题及答案
- 2025年高级心理咨询师认证考试模拟题及答案解析
- 影像科品管圈QCC成果报告 缩短影像报告等待时间护理课件
- 结构施工图审图要点
- 电影赞助招商方案
- 医务人员人文素养提升系列讲座
- 危险化学品的安全储存和使用
- 精神障碍社区康复服务 基本情况登记表(模板)、精神障碍社区康复服务协议(模板)
- 一种新型离心擒纵式速度稳定机构的制作方法
- 世界和中国芍药栽培区的分布及地理气候因子的综合分析
- 口腔科车针分类
- 急性st段抬高型心肌梗死
- GB/T 21709.8-2008针灸技术操作规范第8部分:皮内针
评论
0/150
提交评论