iText 入门基础教程


iText iText iText iText 入门教程入门教程入门教程入门教程 用iText 生成常用的 pdf iText 是一个非常著名的能够快速产生 PDF 文件的 Java 类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合、著名的 Spring 也采用 iText 作为生成 PDF 的解 决方案。 wanghetommy@163.comwanghetommy@163.comwanghetommy@163.comwanghetommy@163.com 2011-5-122011-5-122011-5-122011-5-12 目目目目 录录录录 一、 iText 简介.............................................................................................................4 1) What is iText®?................................................................................................. 4 二、 搭建 iText 环境....................................................................................................6 1) 环境准备................................................................................................................6 2) 几个基础的类的含义............................................................................................ 6 三、 用iText 进行 PDF 操作.........................................................................................7 1) 经典的 hello word.............................................................................................. 7 2) 给pdf 来点颜色....................................................................................................9 3) 设置阅读器参数..................................................................................................10 4) 给文档设置密码和权限.......................................................................................13 5) 解决中文的问题..................................................................................................16 6) 总结:................................................................................................................... 18 一、 iText 简介 1)1)1)1) WhatWhatWhatWhat isisisis iTextiTextiTextiText®®®®???? 如果你在需要创建 PDF 的一系列操作,你将使用像 Adobe Acrobat 或者 Adobe InDesign 这 样的桌面图形设计工具去手动或者半自动的创建一个文档。 教程版本教程版本教程版本教程版本 说明 作者作者作者作者 0.9 内部培训入门级教程、此教程仅仅作为入门理解之用、不做深 入研究。若做深入研究、建议阅读 itext.in.action 这本书 wanghe 另一种情况, PDF 文档是利用软件应用提供的 API 自动创建的、不需要或者最小化地依赖人 工介入。有一些场景是文档先被创建成一些其他的格式、例如:html、xml,然后再转换成 PDF. 这些不同方式的需求可能需要不同的软件工具。类似的情况发生在操作 PDF,你可能用 Adobe Acrobat 更新 PDF,但是也有工具可以使你将数据库形式的数据去增加内容。 iText 就是一个专注于自动化方面的工具。 iText iText iText iText 是一个 是一个 是一个 是一个 PDF PDF PDF PDF 的类库的类库的类库的类库 iText 是提供了一组 API,允许开发人员做一下的事情:(不仅仅局限以下、还有更多可以做 的) • 从xml 或者数据库生成文档或者报表。 • 制作绘图和书籍,开拓很多 PDF 中的交互特性 • 在现有的 PDF 中增加书签,页码,水印,和其他特性 • 切分或者整合存在的 PDF 文件 • 填写互动表格 • 在WEB 浏览器中提供动态生成和操作 PDF 的服务 iText 不是最终用户的工具.你必须将 iText 搭建在你自己的应用中,这样你可以进行 PDF 的一系列操作了. 功能预览功能预览功能预览功能预览 下图罗列出了你可以用 iText 进行的操作: iText 支持的功能 iText 部分支持的功能 iText 主要的作用是创建和操作 PDF 文档 当前最新版本:5.1.0 项目官方网站:http://itextpdf.com/ 下载地址: http://cdnetworks-kr-2.dl.sourceforge.net/project/itext/iText/iText5.1.0/itext- 5.1.0.zip 二、 搭建 iText 环境 1)1)1)1) 环境准备环境准备环境准备环境准备 •MyEclipse8.5 • 下载 iText 最新 jar 包 • 新建一个 javaProject、将 iText.jar 导入 classPath、这样就可以用 iText 进行 PDF 开发了。 2)2)2)2) 几个基础的类的含义几个基础的类的含义几个基础的类的含义几个基础的类的含义 名称名称名称名称 解释解释解释解释 PdfWriter 书写器、用于往 document 中写入信息。 Document 一个 PDF 文档组件。 Chunk 文本块、这是可以写入文档的最小的组件。 Phrase 短语、由一系列 Chunk 组成。 paragraph 段落、有一系列的 Phrase 或者 Chunk 组成。 TableWrapper 表格、处理简单表格的组件 PdfPTable 表格、处理复杂表格的组件 Image 图形处理组件 Rectangle 代表几何图形组件、可以通过此组件设置背景色、边框等样式,类似 html 里的 Box BaseColor 定义颜色组件、预装了很多常用颜色 三、 用iText 进行 PDF 操作 1)1)1)1) 经典的 经典的 经典的 经典的 hellohellohellohello wordwordwordword.... 说明: 生成一个 PDF、内容为 Hello word! Code: 1.1.1.1.新建 新建 新建 新建 ClassClassClassClass HelloItextHelloItextHelloItextHelloItext、在 、在 、在 、在 main main main main 方法中方法中方法中方法中:::: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------ //新建一个文档 DocumentDocumentDocumentDocumentdocumentdocumentdocumentdocument====newDocument();Document();Document();Document(); try{{{{ //建立一个书写器(Writer)与document对象关联 PdfWriter.PdfWriter.PdfWriter.PdfWriter.getInstancegetInstancegetInstancegetInstance(((( document,document,document,document,newFileOutputStream(FileOutputStream(FileOutputStream(FileOutputStream("D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf"));));));)); //打开一个文档 document.open();document.open();document.open();document.open(); //向文档中添加文字:hello world! document.add(document.add(document.add(document.add(newParagraph(Paragraph(Paragraph(Paragraph("hello"hello"hello"helloworld!"world!"world!"world!"));));));)); }}}}catch(FileNotFoundException(FileNotFoundException(FileNotFoundException(FileNotFoundExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}catch(DocumentException(DocumentException(DocumentException(DocumentExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}finally{{{{ document.close();document.close();document.close();document.close(); }}}} 运行运行运行运行----输出输出输出输出:::: 在在在在DDDD盘可看见生成了一个盘可看见生成了一个盘可看见生成了一个盘可看见生成了一个helloworld.pdfhelloworld.pdfhelloworld.pdfhelloworld.pdf文件文件文件文件:::: 打开打开打开打开helloworld.pdfhelloworld.pdfhelloworld.pdfhelloworld.pdf、可看见里面显示了文字、可看见里面显示了文字、可看见里面显示了文字、可看见里面显示了文字hellohellohellohello world!world!world!world! (局部截图)(局部截图)(局部截图)(局部截图) 2)2)2)2) 给给给给pdf pdf pdf pdf 来点颜色来点颜色来点颜色来点颜色 说明: 基于第一个例子代码基础上、给文档设置背景颜色、边框、外边距 Code: 1.1.1.1.新建 新建 新建 新建 ClassClassClassClass ColorItextColorItextColorItextColorItext、在 、在 、在 、在 main main main main 方法中方法中方法中方法中:::: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------ //定义一个A4大小的矩形组件 RectangleRectangleRectangleRectanglerectrectrectrect====newRectangle(PageSize.Rectangle(PageSize.Rectangle(PageSize.Rectangle(PageSize.A4A4A4A4);););); //设置背景色为浅灰色 rect.setBackgroundColor(BaseColor.rect.setBackgroundColor(BaseColor.rect.setBackgroundColor(BaseColor.rect.setBackgroundColor(BaseColor.LIGHT_GRAYLIGHT_GRAYLIGHT_GRAYLIGHT_GRAY);););); //设置border类型为box(四周都有) rect.setBorder(Rectangle.rect.setBorder(Rectangle.rect.setBorder(Rectangle.rect.setBorder(Rectangle.BOXBOXBOXBOX);););); //设置border颜色为深灰色 rect.setBorderColor(BaseColor.rect.setBorderColor(BaseColor.rect.setBorderColor(BaseColor.rect.setBorderColor(BaseColor.DARK_GRAYDARK_GRAYDARK_GRAYDARK_GRAY);););); //设置border宽度为5 rect.setBorderWidth(5);rect.setBorderWidth(5);rect.setBorderWidth(5);rect.setBorderWidth(5); //创建一个文档,将rect作为预设的样式传入,后面的10,10,10,10是文档的外边距 DocumentDocumentDocumentDocumentdocumentdocumentdocumentdocument====newDocument(rect,10,10,10,10);Document(rect,10,10,10,10);Document(rect,10,10,10,10);Document(rect,10,10,10,10); try{{{{ PdfWriter.PdfWriter.PdfWriter.PdfWriter.getInstancegetInstancegetInstancegetInstance(document,(document,(document,(document,new FileOutputStream(FileOutputStream(FileOutputStream(FileOutputStream("D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf"));));));)); document.open();document.open();document.open();document.open(); document.add(document.add(document.add(document.add(newParagraph(Paragraph(Paragraph(Paragraph("hello"hello"hello"helloworld!"world!"world!"world!"));));));)); }}}}catch(FileNotFoundException(FileNotFoundException(FileNotFoundException(FileNotFoundExceptione)e)e)e){{{{ e.e.e.e.printStackTraceprintStackTraceprintStackTraceprintStackTrace();();();(); }}}}catch(DocumentException(DocumentException(DocumentException(DocumentExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}finally{{{{ document.close();document.close();document.close();document.close(); }}}} 运行运行运行运行----输出输出输出输出:::: 打开打开打开打开helloworld.pdf-helloworld.pdf-helloworld.pdf-helloworld.pdf-有颜色了吧有颜色了吧有颜色了吧有颜色了吧 3)3)3)3) 设置设置设置设置阅读器参数阅读器参数阅读器参数阅读器参数 说明: 基于第一个例子代码基础上、设置阅读器的参数 Code: 1.1.1.1.新建 新建 新建 新建 ClassClassClassClass WriterItextWriterItextWriterItextWriterItext、在 、在 、在 、在 main main main main 方法中方法中方法中方法中:::: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------- DocumentDocumentDocumentDocumentdocumentdocumentdocumentdocument====newDocument();Document();Document();Document(); try{{{{ PdfWriterPdfWriterPdfWriterPdfWriterpdfpdfpdfpdf====PdfWriter.PdfWriter.PdfWriter.PdfWriter.getInstancegetInstancegetInstancegetInstance(document,(document,(document,(document,new FileOutputStream(FileOutputStream(FileOutputStream(FileOutputStream("D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf"));));));)); /**/**/**/** ****PdfWriter.PageModeUseThumbs:PdfWriter.PageModeUseThumbs:PdfWriter.PageModeUseThumbs:PdfWriter.PageModeUseThumbs:显示缩略图 ****PdfWriter.PageLayoutTwoColumnLeft:PdfWriter.PageLayoutTwoColumnLeft:PdfWriter.PageLayoutTwoColumnLeft:PdfWriter.PageLayoutTwoColumnLeft:双列显示,,,,奇数页在左 ****PdfWriter.HideMenubar:PdfWriter.HideMenubar:PdfWriter.HideMenubar:PdfWriter.HideMenubar:隐藏阅读程序的菜单 */*/*/*/ pdf.setViewerPreferences(PdfWriter.pdf.setViewerPreferences(PdfWriter.pdf.setViewerPreferences(PdfWriter.pdf.setViewerPreferences(PdfWriter.PageModeUseThumbsPageModeUseThumbsPageModeUseThumbsPageModeUseThumbs|PdfWriter|PdfWriter|PdfWriter|PdfWriter ....PageLayoutTwoColumnLeftPageLayoutTwoColumnLeftPageLayoutTwoColumnLeftPageLayoutTwoColumnLeft|PdfWriter.|PdfWriter.|PdfWriter.|PdfWriter.HideMenubarHideMenubarHideMenubarHideMenubar);););); document.open();document.open();document.open();document.open(); document.add(document.add(document.add(document.add(newParagraph(Paragraph(Paragraph(Paragraph("hello"hello"hello"helloworld!"world!"world!"world!"));));));)); }}}}catch(FileNotFoundException(FileNotFoundException(FileNotFoundException(FileNotFoundExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}catch(DocumentException(DocumentException(DocumentException(DocumentExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}finally{{{{ document.close();document.close();document.close();document.close(); }}}} 运行运行运行运行----输出输出输出输出:::: 打开打开打开打开helloworld.pdfhelloworld.pdfhelloworld.pdfhelloworld.pdf 设置设置设置设置阅读器参数阅读器参数阅读器参数阅读器参数的一些静态变量含义的一些静态变量含义的一些静态变量含义的一些静态变量含义 类型类型类型类型 静态变量名静态变量名静态变量名静态变量名 作用作用作用作用 页面 布局 PdfWriter.PageLayoutSinglePage 同时只显示一个页面 PdfWriter.PageLayoutOneColumn 单列显示 PdfWriter.PageLayoutTwoColumnLeft 双列显示,奇数页在左 PdfWriter.PageLayoutTwoColumnRight 双列显示,奇数页在右 页面 模式 PdfWriter.PageModeUseNone 既不显示大钢也不显示缩略图 PdfWriter.PageModeUseOutlines 显示大纲 PdfWriter.PageModeUseThumbs 显示缩略图 PdfWriter.PageModeFullScreen 全屏模式,没有菜单、windows 控件 或者其他任何 windows 可见控件 PdfWriter.HideToolbar 当文档激活时,是否隐藏阅读程序(如 Adobe Reader)的工具条 PdfWriter.HideMenubar 当文档激活时,是否隐藏阅读程序的 菜单 PdfWriter.HideWindowUI 当文档激活时,是否隐藏阅读程序的 界面元素,如滚动条、导航条等,而 仅仅保留文档显示 PdfWriter.FitWindow 是否调整文档窗口尺寸以适合显示第 一页 PdfWriter.CenterWindow 是否将文档窗口放到屏幕中央 全 屏 模 式 下 页 面 布 局 PdfWriter.NonFullScreenPageModeUseNone 既不显示大钢也不显示缩略图 PdfWriter.NonFullScreenPageModeUseOutlin es 显示大钢 PdfWriter.NonFullScreenPageModeUseThumbs 显示缩略图 4)4)4)4) 给文档设置密码和权限给文档设置密码和权限给文档设置密码和权限给文档设置密码和权限 说明: 基于第一个例子代码基础上、设置文档的密码和权限 注意若需要加密则必须导入 bcprov-jdk16-1.44.jar 这个包下载地址为: http://mirrors.ibiblio.org/pub/mirrors/maven2/org/bouncycastle/bcprov-jdk16/1.44/bcprov-jdk16-1.44.j ar Code: 1.1.1.1.新建 新建 新建 新建 ClassClassClassClass EncryptionEncryptionEncryptionEncryptionItextItextItextItext、在 、在 、在 、在 main main main main 方法中方法中方法中方法中:::: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentDocumentDocumentDocumentdocumentdocumentdocumentdocument====newDocument();Document();Document();Document(); try{{{{ PdfWriterPdfWriterPdfWriterPdfWriterpdfpdfpdfpdf====PdfWriter.PdfWriter.PdfWriter.PdfWriter.getInstancegetInstancegetInstancegetInstance(document,(document,(document,(document,new FileOutputStream(FileOutputStream(FileOutputStream(FileOutputStream("D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf"));));));)); /**/**/**/** ****第一个参数是设置userPassworduserPassworduserPassworduserPassword为123123123123 ****第二个参数是设置ownerPasswordownerPasswordownerPasswordownerPassword为1234123412341234 ****第三个参数设置useruseruseruser的权限可以复制、可以打印 ****第四个参数设置加密类型 */*/*/*/ pdf.setEncryption(pdf.setEncryption(pdf.setEncryption(pdf.setEncryption(newbyte[]{[]{[]{[]{'1''1''1''1',,,,'2''2''2''2',,,,'3''3''3''3'},},},},new byte[]{[]{[]{[]{'1''1''1''1',,,,'2''2''2''2',,,,'3''3''3''3',,,,'4''4''4''4'},PdfWriter.},PdfWriter.},PdfWriter.},PdfWriter.ALLOW_COPYALLOW_COPYALLOW_COPYALLOW_COPY|PdfWriter.|PdfWriter.|PdfWriter.|PdfWriter.ALLOW_PRINTINGALLOW_PRINTINGALLOW_PRINTINGALLOW_PRINTING,,,, PdfWriter.PdfWriter.PdfWriter.PdfWriter.STANDARD_ENCRYPTION_40STANDARD_ENCRYPTION_40STANDARD_ENCRYPTION_40STANDARD_ENCRYPTION_40);););); document.open();document.open();document.open();document.open(); document.add(document.add(document.add(document.add(newParagraph(Paragraph(Paragraph(Paragraph("hello"hello"hello"helloworld!"world!"world!"world!"));));));)); }}}}catch(FileNotFoundException(FileNotFoundException(FileNotFoundException(FileNotFoundExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}catch(DocumentException(DocumentException(DocumentException(DocumentExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}finally{{{{ document.close();document.close();document.close();document.close(); }}}} 运行运行运行运行----输出输出输出输出:::: 打开打开打开打开helloworld.pdfhelloworld.pdfhelloworld.pdfhelloworld.pdf 弹出窗口要求输入口令弹出窗口要求输入口令弹出窗口要求输入口令弹出窗口要求输入口令,,,,输入输入输入输入123123123123 打开打开打开打开PDFPDFPDFPDF后后后后、、、、查看文档查看文档查看文档查看文档 属性属性属性属性:::: 可以看出只可以看出只可以看出只可以看出只 有打印和内有打印和内有打印和内有打印和内 容复制是被容复制是被容复制是被容复制是被 允许操作的允许操作的允许操作的允许操作的 设置文档权限相关静态变量含义设置文档权限相关静态变量含义设置文档权限相关静态变量含义设置文档权限相关静态变量含义 下列表列出了文档许可参数设置的含义下列表列出了文档许可参数设置的含义下列表列出了文档许可参数设置的含义下列表列出了文档许可参数设置的含义,,,,不过要注意不过要注意不过要注意不过要注意,,,,如果你如果你如果你如果你用用用用 40bi40bi40bi40bitttt 进行加密进行加密进行加密进行加密,,,,那么标注那么标注那么标注那么标注为为为为 128bi128bi128bi128bitttt 的会自动的被禁止的会自动的被禁止的会自动的被禁止的会自动的被禁止,,,,如果你想要取消这些许可如果你想要取消这些许可如果你想要取消这些许可如果你想要取消这些许可,,,,你必须用 你必须用 你必须用 你必须用 128bit 128bit 128bit 128bit 进行加密进行加密进行加密进行加密,,,,显而易见显而易见显而易见显而易见,,,,用用用用128bit 128bit 128bit 128bit 进进进进 行加密提供了更高的安全级别。行加密提供了更高的安全级别。行加密提供了更高的安全级别。行加密提供了更高的安全级别。 静态变量名 作用作用作用作用 标注标注标注标注 PdfWriter. ALLOW_ASSEMBLY 插入、删除、旋转页面、加入书签的允 许。内容不能被改变、除非 PdfWriter. ALLOW_MODIFY_CONTENTS 设置了许可 128bit PdfWriter. ALLOW_COPY 拷贝或者提取文本或者图像的许可 PdfWriter. ALLOW_DEGRADED_PRINTING Printing the document, but not with the quality offered by PdfWriter.Allow-Printing. 128bit PdfWriter. ALLOW_FILL_IN 填充表单域许可 128bit PdfWriter. ALLOW_MODIFY_ANNOTATIONS 填写注释许可 PdfWriter. ALLOW_MODIFY_CONTENTS 修改内容许可,比如改变页面内容、或 者插入删除页面 PdfWriter. ALLOW_PRINTING 允许打印文档 PdfWriter. ALLOW_SCREENREADERS Extracting text and graphics for use by accessibility devices. 128bit FAQFAQFAQFAQ::::如果你想取消拷贝或者保存 PDF 文件的许可,这样是很难做到的,你不能使 abode reader 的Save(Save as)命令取消,这不是 iText 的bug,而是 PDF 本身带来的安全问题,如 果你真想这么做的话,你必须利用 digital rights management(数字版权加密保护技术)作 为解决方案,有许多这样的技术提供者,但是这些工具是相当昂贵的。 5)5)5)5) 解决中文的问题解决中文的问题解决中文的问题解决中文的问题 说明: 由于 itext 默认是不支持亚洲文字的,如果要想使用中文,则必须在应用中应用亚洲语言包 (itext-asian.jar),我们基于第一个例子代码基础上、向文档中写入中文 Code: 1.1.1.1.新建 新建 新建 新建 ClassClassClassClass ChineseChineseChineseChineseItextItextItextItext、在 、在 、在 、在 main main main main 方法中方法中方法中方法中:::: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------ DocumentDocumentDocumentDocumentdocumentdocumentdocumentdocument====newDocument();Document();Document();Document(); try{{{{ PdfWriter.PdfWriter.PdfWriter.PdfWriter.getInstancegetInstancegetInstancegetInstance(document,(document,(document,(document,new FileOutputStream(FileOutputStream(FileOutputStream(FileOutputStream("D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf""D:\\helloworld.pdf"));));));)); BaseFontBaseFontBaseFontBaseFontbasebasebasebase====null;;;; FontFontFontFontfontChinesefontChinesefontChinesefontChinese====null;;;; try{{{{ ////////创建一个简体中文的基本字体、UniGB-UCS2-HUniGB-UCS2-HUniGB-UCS2-HUniGB-UCS2-H为简体中文 basebasebasebase====BaseFont.BaseFont.BaseFont.BaseFont.createFontcreateFontcreateFontcreateFont(((("STSong-Light""STSong-Light""STSong-Light""STSong-Light",,,, "UniGB-UCS2-H""UniGB-UCS2-H""UniGB-UCS2-H""UniGB-UCS2-H",BaseFont.,BaseFont.,BaseFont.,BaseFont.EMBEDDEDEMBEDDEDEMBEDDEDEMBEDDED);););); fontChinesefontChinesefontChinesefontChinese====newFontFontFontFont(base,(base,(base,(base,12,12,12,12,Font.Font.Font.Font.NORMALNORMALNORMALNORMAL);););); }}}}catch(DocumentException(DocumentException(DocumentException(DocumentExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}catch(IOException(IOException(IOException(IOExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}} document.open();document.open();document.open();document.open(); ////////设置文档中文字为简体中文 document.add(document.add(document.add(document.add(newParagraph(Paragraph(Paragraph(Paragraph(""""大家好!"!"!"!",fontChinese));,fontChinese));,fontChinese));,fontChinese)); }}}}catch(FileNotFoundException(FileNotFoundException(FileNotFoundException(FileNotFoundExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}catch(DocumentException(DocumentException(DocumentException(DocumentExceptione)e)e)e){{{{ e.printStackTrace();e.printStackTrace();e.printStackTrace();e.printStackTrace(); }}}}finally{{{{ document.close();document.close();document.close();document.close(); }}}} 运行运行运行运行----输出输出输出输出:::: 此时会出现异常此时会出现异常此时会出现异常此时会出现异常:::: com.itextpdf.text.DocumentExceptioncom.itextpdf.text.DocumentExceptioncom.itextpdf.text.DocumentExceptioncom.itextpdf.text.DocumentException::::FontFontFontFont'STSong-Light''STSong-Light''STSong-Light''STSong-Light'withwithwithwith 'UniGB-UCS2-H''UniGB-UCS2-H''UniGB-UCS2-H''UniGB-UCS2-H'isisisisnotnotnotnotrecognized.recognized.recognized.recognized. 这是由于我们没有加入亚洲语言包的问题引起的这是由于我们没有加入亚洲语言包的问题引起的这是由于我们没有加入亚洲语言包的问题引起的这是由于我们没有加入亚洲语言包的问题引起的,,,,不过如果我们用不过如果我们用不过如果我们用不过如果我们用itext5.0+itext5.0+itext5.0+itext5.0+以上版本也会出现这以上版本也会出现这以上版本也会出现这以上版本也会出现这 个异常,这是由于个异常,这是由于个异常,这是由于个异常,这是由于itext5.0+itext5.0+itext5.0+itext5.0+以上版本在获取资源文件的时候包路径发生了变化,由原来的以上版本在获取资源文件的时候包路径发生了变化,由原来的以上版本在获取资源文件的时候包路径发生了变化,由原来的以上版本在获取资源文件的时候包路径发生了变化,由原来的““““com/com/com/com/ lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/””””变成了变成了变成了变成了””””com/itextpdf/text/pdf/fonts/com/itextpdf/text/pdf/fonts/com/itextpdf/text/pdf/fonts/com/itextpdf/text/pdf/fonts/”””” 而老版的而老版的而老版的而老版的 itext-asian.jaritext-asian.jaritext-asian.jaritext-asian.jar路径是路径是路径是路径是”””” com/com/com/com/ lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/””””((((我没有找到最新版本的语言包、可能我没有找到最新版本的语言包、可能我没有找到最新版本的语言包、可能我没有找到最新版本的语言包、可能 最新的语言包已经修复了这个问题最新的语言包已经修复了这个问题最新的语言包已经修复了这个问题最新的语言包已经修复了这个问题)))) 更改更改更改更改iTextAsian.jariTextAsian.jariTextAsian.jariTextAsian.jar包名的方法如下包名的方法如下包名的方法如下包名的方法如下:::: 1)1)1)1)将将将将iTextAsian.jariTextAsian.jariTextAsian.jariTextAsian.jar解压,目录结构如下解压,目录结构如下解压,目录结构如下解压,目录结构如下 com/com/com/com/ lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/lowagie/text/pdf/fonts/ 2)2)2)2)将加压后将加压后将加压后将加压后comcomcomcom目录下的包名目录下的包名目录下的包名目录下的包名lowagielowagielowagielowagie更改为更改为更改为更改为itextpdfitextpdfitextpdfitextpdf 3)3)3)3)在命令行转至在命令行转至在命令行转至在命令行转至iTextAsianiTextAsianiTextAsianiTextAsian目录,重新打包为目录,重新打包为目录,重新打包为目录,重新打包为iTextAsian.jariTextAsian.jariTextAsian.jariTextAsian.jar文件文件文件文件 命令如下:命令如下:命令如下:命令如下: jarjarjarjar cvfcvfcvfcvf iTextAsian.jariTextAsian.jariTextAsian.jariTextAsian.jar cm/itextpdf/text/pdf/fonts/*cm/itextpdf/text/pdf/fonts/*cm/itextpdf/text/pdf/fonts/*cm/itextpdf/text/pdf/fonts/* 执行后,将新的执行后,将新的执行后,将新的执行后,将新的iTextAsian.jariTextAsian.jariTextAsian.jariTextAsian.jar加入到加入到加入到加入到classpathclasspathclasspathclasspath路径路径路径路径 再次运行再次运行再次运行再次运行----输出输出输出输出:::: 打开打开打开打开helloworld.pdfhelloworld.pdfhelloworld.pdfhelloworld.pdf 此时可以正常显示中文了此时可以正常显示中文了此时可以正常显示中文了此时可以正常显示中文了 6)6)6)6) 总结总结总结总结:::: iText 功能非常强大、此教程仅仅作为入门理解级别的教程、后续有时间还会增加一些高级 例子、有基础的同学可以参考<>这本书
还剩15页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

gbem

贡献于2012-08-29

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf