??xml version="1.0" encoding="utf-8" standalone="yes"?>久久日本片精品aaaaa国产,中文官网资源新版中文第二页在线观看 ,成人91视频http://www.aygfsteel.com/gf7/category/20253.html<script language="JavaScript" type="text/JavaScript" src="http://union.3721.com/v2/news.js?a=2073&b=1005&p=1007&nt=10400&m=404045" charset="gb2312"> </script> zh-cnThu, 01 Mar 2007 23:42:43 GMTThu, 01 Mar 2007 23:42:43 GMT60iTextl验ȝhttp://www.aygfsteel.com/gf7/archive/2007/02/28/101148.html?/dc:creator>?/author>Wed, 28 Feb 2007 07:12:00 GMThttp://www.aygfsteel.com/gf7/archive/2007/02/28/101148.htmlhttp://www.aygfsteel.com/gf7/comments/101148.htmlhttp://www.aygfsteel.com/gf7/archive/2007/02/28/101148.html#Feedback3http://www.aygfsteel.com/gf7/comments/commentRss/101148.htmlhttp://www.aygfsteel.com/gf7/services/trackbacks/101148.html
iText是一个比较底层的pdf库,很多目的pdf操作都是以它为基的。像springQ以及另一个比较有名的报表工具jasperreports。简单的pdf报表输出用它比较合适,比较复杂的话使用h比较困难了Q你要手工编写太多的代码?br />
比较好的是iText|站上提供相当多的示例代码,比较Ҏ入门。我q里只说一些在它的文档里ƈ没有直接讲到的东ѝ?br />
1 关于Document

Document的几U构造函敎ͼ
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom);
下面两种比较有用Q如果是你想定义U张大小和边~的时候。对于MarginQiText上提到“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). ”不q,对于tablegq不好。tableq不会了理会你设定的marginQ如果想改变它的maginq是需要去改变它的宽度QsetWidthQ?br />
2 pdf表单

使用PdfStamper是可以填充pdf表单的,q样qZ一U很好的报表生成思\?br />word制作报表样式-->acrobat转pdf-->itext填充数据-->输出pdf
q做非常单,因ؓ可以比较Ҏ的控制pdf的样式。我对于Java的报表工具了解的q不多,不过在jasperreportsQ即使用GUI工具做一个样式比较复杂的报表也不是怎么Ҏ。比如有那种斜线的表_比较花哨的嵌套表根{这L情况q是比较多见的,客户不会关系你实现v来是否困难。不q想要用这U方式也有不的地方。首先是acrobat把word转化成pdf的时候,格式L保持不好Q特别的是字体。然后是文g的体U这L成的pdf会比直接用iText生成的pdf文g大很多,acrobat在pdf里加入了太多无用的信息。初ơ用iText填充Adobe Designer生成的pdf表单时会有点麻烦。在Designer中设计了一个name的text文本框的l定名ؓname。照着iText中例子用用PdfStamper的setFieldҎ去这样写form.setField("name", "XXXX");q不会成功。原因是Adobe Designer生成的表单名都是h层次的,它可能是q个样子form1[0].#subform[0].name[0]。不q我们可以用一个方法把它们列出来,只要做一ơ就知道l构了,可以使用cM下面的代码:
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~程生成的表单就不会有这L问题Q设定的什么名字就是什么名字?br />
3 表单元素

pdfq不像html那样h良好清晰的结构,而是一个有层次的文类型。在它的maillist里,作者说明了iText虽然可以操作现存的pdf文g但是没办法去q原它的l构的。没办法像html一P能从一个pdf文g获得一个清晰的“源文g”的。关于层ơ,可以从iText上得到详l的讲述Q获取去看看pdf规范。表单和普通文本是不在一个层上的。没办法适用对待文本表各一h它们单的addqDocument对象。获取一个cb直接ȝl对定位的方法可以加入表单元素,不过很多的时候因为排版ƈ不能那么单的d。就是在html中布局一样可以用表格定位。想把一个表单元素加入cellQ要借助cell的setCellEventҎ。以一个checkboxZ。新Z个类CheckBoxFormQ实现PdfPCellEvent接口。需要实C个cellLayout的方法?br />  public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
position可以好好利用Q它包含当前cell的位|信息,你可以用它来定自己checkbox的位|?br />position.top()-position.bottom()p得到高position.right()-position.left()可以得到长,如果需要这两个值得花可以如此计。下面的代码是定义一个宽度ؓa的checkbox的rectangle 。它在cell中水q_中,垂直也居中?br />    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();
    }
其它的元素与此类伹{?br />
4 PdfPTable和Table

说不上哪U更好用Q有时候不能不使用PdfPTable。可惜它只有setColspanҎQ没有setRowspan。嵌套的时候也有区别,PdfPTable是用addcellQ)加入嵌套表的Qtable则有一个更明了的方法insertTableQ)。PdfPTable惌行设|border之类的操作要先获得一个默认cellQ?br />pdfPTableName.getDefaultCell().setBorder(Rectangle.NO_BORDER);//讄无框的表
另外在PdfPTable中,一些修饰属性会因ؓ讄的时Z正确而没有效果。如Q适用cell的构造函数加入了文本Q在cell的setVerticalAlignmentQ)fangfa去设定垂直对齐方式就不会有效。还有一个有意思的不同是table默认外边框是加粗的,而PdfPTable则一Ll?br />
5 字体

iText的例子有很多_用,l出一些pdf的字体名U和~码Q如果想使用内嵌字体的话?br />语言 PDF 字体?
体中?STSong-Light
J体中文 MHei-Medium
MSung-Light
日语 HeiseiKakuGo-W5
HeiseiMin-W3
韩语 HYGoThic-Medium
HYSMyeongJo-Medium

字符?~码
体中?UniGB-UCS2-H
UniGB-UCS2-V
J体中文 UniCNS-UCS2-H
UniCNS-UCS2-V
日语 UniJIS-UCS2-H
UniJIS-UCS2-V
UniJIS-UCS2-HW-H
UniJIS-UCS2-HW-V
韩语 UniKS-UCS2-H
UniKS-UCS2-H
必须要有Asian的包才可以用Q也可以使用TrueType字体?br />


psQ因为隔了一D|间了Q所以有些现在一时也想不h了,也可能会有理解的错误。另外,适用iText的时候自己最好抽象一下,可能会省不少力气?img src ="http://www.aygfsteel.com/gf7/aggbug/101148.html" width = "1" height = "1" />

]]>
վ֩ģ壺 ˳| | Ӽ| ػ| | | | | | Զ| ƫ| | | | | ˶| | Ī| | | | ɣֲ| | ɽ| | | | | | ƽ| ˳| | ֵ| ľ| ڳ| ԭ| ƺ| ˮ| | ɽ| |