iText生成PDF全攻略.doc_第1页
iText生成PDF全攻略.doc_第2页
iText生成PDF全攻略.doc_第3页
iText生成PDF全攻略.doc_第4页
iText生成PDF全攻略.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、iText生成 PDF 全攻略首先还是看看文档。看完了,你把我写的例子跑一遍你就会了。PDF创建文档/创建一个文档对象,并设置他的初始化大小Rectangle pSize=new Rectangle(144,90);/文档的背景色pSize.setBackgroundColor(Color.blue);/常用页面大小PageSize.A4;Document doc=new Document(pSize);try /定义输出位置并把文档对象装入输出对象中PdfWriter.getInstance(doc,new FileOutputStream(c:/hello.pdf);/打开文档对象doc.

2、open();/ 加入文字 Hello World doc.add(new Paragraph(HelloWorld);/ 关闭文档对象,释放资源 doc.close(); catch (FileNotFoundException e) e.printStackTrace(); catch (DocumentException e) e.printStackTrace();设置字体亚洲国家的字体你可以从下载这个包。然后把它直接放到你的ClassPath中就可以了BaseFont bfChinese =BaseFont.createFont(STSong-Light, UniGB-UCS2-H,

3、BaseFont.NOT_EMBEDDED);Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);表格/定义一个表格Table table = new Table(2);/设置表格边框table.setBorderWidth(1);Cell cell = new Cell(Matrix III);cell.setHeader(true);/分列cell.setColspan(2);cell.setBackgroundColor(Color.blue);/分行Cell.setRowspan(2);table.addCell(cell);

4、创建新页/ 创建第 2 的页面 document.newPage(); document.add(new Paragraph(Hello Earth); document.resetHeader();/ 创建第 3 的页面document.newPage();document.add(new Paragraph(Hello Sun); document.add(new Paragraph(Remark: the headerhas vanished!);document.resetPageCount();设置布局PdfWriter writerA = PdfWriter.getInstance

5、(document,new FileOutputStream(d:Chap0108a.pdf);/ 设置布局writerA.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);PdfWriter writerB = PdfWriter.getInstance(document, new FileOutputStream(d:Chap0108b.pdf);/ 设置布局writerB.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar);PdfWriter

6、writerC = PdfWriter.getInstance(document, new FileOutputStream(d:Chap0108c.pdf);/ 设置布局writerC.setViewerPreferences(PdfWriter.PageLayoutTwoC olumnLeft| PdfWriter.PageModeFullScreen| PdfWriter.NonFullScreenPageModeUseThumbs);加密document = new Document(PageSize.A4, 50, 50, 50, 50);PdfWriter writer = Pdf

7、Writer.getInstance(document,new FileOutputStream(d:Chap0109.pdf);/ setEncryption方法中可以设置如下内容(这样打开pdf时需要输入口令!)/ PdfWriter.STRENGTH128BITS, userpass, ownerpass,/ PdfWriter.AllowCopy | PdfWriter.AllowPrinting writer.setEncryption(PdfWriter.STRENGTH40BITS, ,PdfWriter.AllowCopy);)中看到了专门制作 PDF 文件的控件的介绍,暗喜之

8、余,立马下载试验,果然非常轻松地制作出了想要的PDF 文件,因为网站为英文,内容又多,读起来非常费力,在解决了自己的问题后,看到许多网友还在为PDF 文件制作而郁闷,遂决定将该内容翻译为中文,由于本人英语水平一般,许多地方又晦涩难懂,故翻译质量不是很满意,敬请斧正,但大部分能看懂。本文的目的一是解决部分网友的燃眉之急,二是抛砖引玉,如果哪位仁兄愿意将该网站中的内容准确翻译出来,则是天下之大幸。要用本文的方法生成PDF 文件,需要两个控件: itextsharp.dll和ICSharpCode.SharpZipLib.dll,由于示例代码实在太多,我将代码全部整理出来,放在另外一个文件示例代码.

9、doc 中,所有这些资源, 我均放在了本人的ftp 站点(6)上的 Pdf文件制作全攻略 文件夹中(文件夹中另外两个rar 压缩文件为两个控件的源代码,供大家学习研究使用),你可以到这里下载相应的资源,或者直接到原网站下载。为便于调试和叙述,所有例子均为DOS 控制台程序,windows 程序使用方法完全一样,按照下面的步骤创建一个可调试的项目:1、打开 VS2003 ;2、单击菜单 文件 新建 项目 ,在项目类型中选择 Visual C# 项目 ,在模板中选择 控制台应用程序 ,输入文件名称如 MakePdf ,指定好存放路径, 然后点确定按钮;3、在 解

10、决方案资源管理器 中右键单击 引用 ,从弹出的菜单中选择 添加引用 ,在 .NET 选项夹中选择 浏览 ,添加前面提到的两个应用,如下图:4、在代码窗口顶部添加两个引用:using iTextSharp.text;using iTextSharp.text.pdf;至此,准备工作完毕。ViewerPreferences或 Encryption )。所以通过下面的办法得到实例已经足够了:PdfWriter.getInstance(document,new FileStream(Chap01xx.pdf);在第一步中创建一个文档时,第一个参数意义不大,第二个参数可以是任何一种流,到目前为止我们一直

11、使用System.IO.FileStream将 Document写入文件中, 示例代码0105 用到了 System.IO.MemoryStream(这不是一个独立的例子,你必须在Servlet Engine中测试这些代码。Chap0111a.pdf和Chap0111b.pdf的区别)。u通过URL得到图片实例这是添加一个图片最简单的办法,见示例代码0601,我们添加了一个 WMF 、一个 Gif 、一个 Jpeg 和一个 PNG 图片到文档中,使用 4 个 URL 得到:Image wmf = Image.getInstance(newURL(./examples/harbour.wmf);

12、Image gif = Image.getInstance(newURL(./examples/vonnegut.gif);Image jpeg = Image.getInstance(newURL(./examples/myKids.jpg);Image png = Image.getInstance(newURL(./examples/hitchcock.png);备注:许多 PDF 库在插入一个图片前都将其解压缩并转换成位图格式,下面是几个我为什么不这样做的原因:这将导致 PDF 文件增大,这样产生的 PDF 文件尺寸是不同图片文件尺寸总和的数十倍。面临一个法律问题: LZW 算法受专利

13、保护, 所以不允许使用这种算法来解压缩 GIF 等文件。u通过文件名得到图片实例通过简单地改变图片引用路径将示例代码0601 改成示例代码 0602 :Image gif = Image.getInstance(vonnegut.gif);Image jpeg = Image.getInstance(myKids.jpg);Image png = Image.getInstance(hitchcock.png);同示例代码0601 的区别只是该图象从本地获取而已,另外一个例子见示例代码0603 。下载得到。下载。u图片在表格中你可以将图片添加到单元格中,但有两个副作用:l表格的宽度是确定,当图

14、片超出单元格的宽度时,将自动缩小。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);参加示例代码06

15、16 。caesar_coin.jpg的图片:PdfTable在第 5 章中,我们简要地讲述了PdfPTable对象,现在我们将讨论该对象更多的的特性。你可以用 3 种不同的方法创建PdfTable :PdfPTable(float relativeWidths);PdfPTable(int numColumns);PdfPTable(PdfPTable table);你可以给该表设置更多的参数,如表宽度、列宽度、水平对齐方式等,你可以通过下面的办法添加单元格:public void addCell(PdfPCell cell);public void addCell(PdfPTable ta

16、ble);public void addCell(Phrase phrase);public void addCell(String text);除了单元格填距和和间距,这些方法同Table 对象非常类似。这些参数对每个单元格个体进行了设置,当然,你可以设置单元格的默认值,为改变单元格的默认值,使用getDefaultCell()和调用一个或更多的类PdfPCell的方法(你可以设置对齐方式、间距、边框、颜色甚至最低高度)。注:通过 PdfPTable ,你能改变一个单元格的列跨度,但不能改变行跨度!在PdfPTable内部是一些独立的行,要让它支持行跨度更改需要对PdfPTable对象进行很

17、大的调整,不要期望在近期内实现,你可以用嵌套表来解决这些问题。你可以象第5 章一样将一个PdfPTable添加到当前文档中,但你也可以添加一个表在当前页中的绝对位置:public float writeSelectedRows(int rowStart, int rowEnd,float xPos, float yPos, PdfContentByte canvas);参数rowStart是你想开始的行的数目,参数rowEnd是你想显示的最后的行(如果你想显示所有的行,用-1 ),xPos和yPos是表格的坐标,canvas是一个PdfContentByte对象。在示例代码1009中,我们添加

18、了一个表在(100,600)处:table.writeSelectedRows(0, -1, 100, 600,writer.DirectContent);使用 PdfPTable ,你不能设置行跨度和(或)来跨度(怎么和上面的有点矛盾?)你可以使用嵌套表来解决,见示例代码 1010 。最后,示例代码 1011 和示例代码 1012 展示了 PdfTable 可以和 templates 和 columns 一起使用,在示例代码 1012 中将用到 cover.png 图片如下:颜色( SpotColors颜色( spotcolors和示例代码1015)和图案 (Patterns))的使用见示例

19、代码1013 ,示例代码演示了图案 (patterns) 的使用方法。1014第十一章本地和异地转向、目标和概要本地转向有时你需要一个允许读者从文档的一个地方跳转到另外一个地方的链接,你可以通过类Chunk 的 setLocalGoto和setLocalDestination 两个方法实现,例: Chunk localgoto = new Chunk(this word, FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new Color(0, 0, 255).setLocalGoto(test);Chunk destin

20、ation = new Chunk(local destination, FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL, new Color(0, 255, 0).setLocalDestination(test);见示例代码1101 。异地转向在第 3 章中,我们演示了一个锚点如何转向到其他URL ,一个锚点通过不同的字体、风格和颜色,可以包含不同的Chunks ,在 iText 的高级应用中,下面定义链接到URL 的其他方法:Chunk chunk = new Chunk(anchor, FontFactory.get

21、Font(FontFactory.HELVETICA, 12).setAnchor(newURL(u转到 PDF 文档中的指定位置如果你在文档中指定了一个目的地,你可以从另外一个文档跳转到这里,为实现该功能,你可以使用方法:setRemoteGoto: Chunk chunk = new Chunk(jump,FontFactory.getFont(FontFactory.HELVETICA, 12,Font.ITALIC).setRemoteGoto(test.pdf, test);test.pdf 是另外一个pdf 文件, test是该文件的一个目的地。跳转到另一个PDF 文件指定页使用方

22、法 setRemoteGoto,用页码参数代替名称参数,可以非常容易地跳转定另外一个文档的指定页:chunk = new Chunk(jump,FontFactory.getFont(FontFactory.HELVETICA, 12,Font.ITALIC).setRemoteGoto(test.pdf, 3);见示例代码1102u启动一个应用程序可以使用下面的方法启动一个应用程序:public PdfAction(String application, String parameters,String operation, String defaultDir)如果 application为

23、 c:/winnt/notepad.exe(其余参数可以为null ),你可以通过PDF 文件中的链接来启动记事本程序。u文件和 URL如果你想跳转到其他文档或URL ,你需要通过下面的构造函数之一创建一个:PdfAction(String filename, String name);PdfAction(String filename, int page);PdfAction(URL url);PdfAction(String url);前面两个构造函数允许你跳转到文件的指定位置或页码,后两个构造函数允许你跳转到其他URL 上。其余部分略。第十二章页面和表格事件略。-package com.

24、test;import java.awt.Color;import java.io.FileOutputStream;import com.lowagie.text.Cell;import com.lowagie.text.Document;import com.lowagie.text.Element;import com.lowagie.text.Font;import com.lowagie.text.FontFactory;import com.lowagie.text.HeaderFooter;import com.lowagie.text.PageSize;import com.l

25、owagie.text.Paragraph;import com.lowagie.text.Phrase;import com.lowagie.text.Rectangle;import com.lowagie.text.Table;import com.lowagie.text.pdf.AcroFields;import com.lowagie.text.pdf.BaseFont;import com.lowagie.text.pdf.PdfContentByte;import com.lowagie.text.pdf.PdfDictionary;import com.lowagie.tex

26、t.pdf.PdfImportedPage;import com.lowagie.text.pdf.PdfReader;import com.lowagie.text.pdf.PdfStamper;import com.lowagie.text.pdf.PdfTemplate;import com.lowagie.text.pdf.PdfWriter;public class PDFMain /* param args*/public static void main(String args) throws Exception / TODO 自动生成方法存根/test3();test3();p

27、ublic static void test3() throws Exception/上、下、左、右页边距Document document = newDocument(PageSize.A4.rotate(),10,10,1,1);PdfWriter writer=null;try writer = PdfWriter.getInstance(document, new FileOutputStream(c:/chapter5.pdf);catch(Exception e)/ 设置页眉和页脚HeaderFooterheader=newHeaderFooter(newHeaderFooterP

28、hrase( footer =页眉 ),false);newHeaderFooter(newPhrase(页脚),false);document.setHeader(header);document.setFooter(footer);document.open();chapter5(document,writer);document.close();private static void chapter5(Document document,PdfWriter writer) throws ExceptionBaseFont bfChinese=null;try bfChinese =Bas

29、eFont.createFont(STSong-Light,UniGB-UCS2-H,BaseFont.NOT_EMBEDDED); catch (Exception e) / TODO自动生成catch块e.printStackTrace();Font fontChinesed = new Font(bfChinese, 20, Font.NORMAL);Font fontChinesed1 = new Font(bfChinese, 15, Font.NORMAL);Font fontChinesed2 = new Font(bfChinese, 15, Font.BOLD);Paragr

30、aph par = new Paragraph(第五章投资资料表,fontChinesed);par.setAlignment(center);Paragraph par1 = new Paragraph(,fontChinesed);par1.setAlignment(center);标段一Paragraph p1 = new Paragraph(t本资料表是根据本项目的具体情况对 投标人须知 中有关条款所作的补充和修改。n 两者如有不一致,以本资料表为准。,fontChinesed1);p1.setAlignment(Element.ALIGN_CENTER);float widths=0

31、.2f,0.8f;/20%,80%Table tab1=new Table(2);tab1.setWidths(widths);/设置表格2 列所分配比例tab1.setPadding(5);/表格间高度/tab1.setSpacing(5); /边框高度/第一行Paragraph par2 = new Paragraph(,fontChinesed2);par2.setAlignment(left);Cell cel1=new Cell(par2);tab1.addCell(cel1);条款号Paragraph par3 = new Paragraph(,fontChinesed2);Cel

32、l cel2=new Cell(par3);内容cel2.setVerticalAlignment(Element.ALIGN_CENTER); /水平方向居中cel2.setHorizontalAlignment(Element.ALIGN_CENTER);/垂直方向居中tab1.addCell(cel2);/第二行,添加2 列Cell cel3=new Cell();tab1.addCell(cel3);Paragraph par5 = new Paragraph(说明,fontChinesed2);Cell cel4=new Cell(par5);cel4.setHorizontalAl

33、ignment(Element.ALIGN_LEFT);tab1.addCell(cel4);/第三行Paragraph par6 = new Paragraph(1.1,fontChinesed2);Cell cel6=new Cell(par6);cel6.setVerticalAlignment(Element.ALIGN_CENTER);cel6.setRowspan(2);tab1.addCell(cel6);/拆分Paragraph par7 = new Paragraph(招标人名称:,fontChinesed2);Cell tab2_cel1=new Cell(par7);Pa

34、ragraph par8 = new Paragraph(合同名称:,fontChinesed2);Cell tab2_cel2=new Cell(par8);tab1.addCell(tab2_cel1);tab1.addCell(tab2_cel2);/第四行Cell cel7=new Cell();cel7.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCell(cel7);Paragraph par9 = new Paragraph(投标报价,fontChinesed2);Cell cel8=new Cell(par9);tab1.a

35、ddCell(cel8);/第五行Paragraph par10 = new Paragraph(11,fontChinesed2);Cell cel9=new Cell(par10);cel9.setVerticalAlignment(Element.ALIGN_CENTER);cel9.setRowspan(2);tab1.addCell(cel9);/拆分Paragraph par11 = new Paragraph(投标人应单独报出货物由投标人制造厂当地交到买方工厂现场所需的运输费和n 保险费,作为招标人评标时的评标因素。,fontChinesed2);Cell tab3_cel1=n

36、ew Cell(par11);Paragraph par12 = new Paragraph(投标报价为:,fontChinesed2);Paragraph par13 = new Paragraph(相关费用:包括货物总价、包装费和伴随服务费等n+(说明:n+tta.投标人在报价时,包括制造和组装货物使用的配套件和原材料费、 n+tt 相关服务费和已付的全部增值税或其它税(所有税费填写时均计 n+tt 入货价)。 n+ttb.列出要求的备件的费用和清单。n+ttc.列出随供件、易损件和专用工具的费用和清单。n+ttd.每一货物的价格应是唯一的,招标机构和招标人不接受任何可选 n+tt 的报价

37、。 n+tte.合同要求的设计费含技术资料费。n+ttf.履行合同所需的所有项目,如没有另外说明价款,有关费用视作 n+tt 已包括在其他有价款的项目的单价和总价中。n+ttg.所有项目应列出数量、单价和生产厂商等的明细清单,投标人如 n+tt 将数个项目以一个总额标价,招标机构有权视情况要求投标人将 n+tt 每项单价分列表示。 ) n+tth.投标人承诺投标基本方案价已包含招标文件所规定的所有货物和 n+tt 服务范围。此报价若有漏项,由投标人自行承担。履行合同所需 n+tt 的所有项目,如没有另外单独价款说明,有关费用视作已包括在 n+tt 其他有价款的项目的单价和总价中。,fontCh

38、inesed2);par12.add(par13);Cell tab3_cel2=new Cell(par12);tab1.addCell(tab3_cel1);tab1.addCell(tab3_cel2);/第六行Cell cel10=new Cell();cel10.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCell(cel10);Paragraph par14 = new Paragraph( 证明投标人合格和资格的文件 ,fontChinesed2);Cell cel11=new Cell(par14);tab1.addCell

39、(cel11);/第七行Paragraph par15 = new Paragraph(13,fontChinesed2);Cell cel12=new Cell(par15);cel12.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCell(cel12);Paragraph par16 = new Paragraph(资格条件和提供文件: ,fontChinesed2);Paragraph par17 = new Paragraph(n任何对上述资格条件的偏离和没有实质性的响应均将导致废标。,fontChinesed2);par16.ad

40、d(par17);Cell cel13=new Cell(par16);tab1.addCell(cel13);/第八行par15 = new Paragraph(14.3,fontChinesed2);cel12=new Cell(par15);cel10.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCell(cel12);par16 = new Paragraph( 提供货物保证期满后运行1 年所需的备件清单,包括货源和价格表。(不计入投标总价),fontChinesed2);cel13=new Cell(par16);tab1.add

41、Cell(cel13);/第九行cel12=new Cell();cel10.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCell(cel12);par16 = new Paragraph(投标文件的编制和递交,fontChinesed2);cel13=new Cell(par16);tab1.addCell(cel13);/第十行par15 = new Paragraph(15.1,fontChinesed2);cel12=new Cell(par15);cel10.setVerticalAlignment(Element.ALIGN_L

42、EFT);tab1.addCell(cel12);par16 = new Paragraph(投标保证金: ,fontChinesed2);cel13=new Cell(par16);tab1.addCell(cel13);/第十一行par15 = new Paragraph(15.3,fontChinesed2);cel12=new Cell(par15);cel10.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCell(cel12);par16 = new Paragraph(投标保证金采用形式:投标保证金应注明招标编号,应使用人民币,

43、采用投标人+企业网银、电汇、银行汇票(不包括承兑汇票)、本票、支票(仅限于上海本地+支票)、贷记凭证、现金交款单等形式(现金交款单原件应交于宝华招标财务) , +不接收转帐支票、全国支票、人民币现钞、银行保函、已背书的票据和以个人名+义汇入的汇款或解现等。,fontChinesed2);cel13=new Cell(par16);tab1.addCell(cel13);/第十二行par15 = new Paragraph(16.1,fontChinesed2);cel12=new Cell(par15);cel10.setVerticalAlignment(Element.ALIGN_LEFT);tab1.addCe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论