您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 从_Java_应用程序动态生成_PDF_文件
4内容o熟悉iTextV5.3.0版iTextAPI:详细了解在Eclipse中下载和配置iText样例应用程序运行样例应用程序结束语下载参考资料评论许多应用程序都要求动态生成PDF文档。这些应用程序涵盖从生成客户对帐单并通过电子邮件交付的银行到购买特定的图书章节并以PDF格式接收这些图书章节的读者。这个列表不胜枚举。在本文中,我们将使用iTextJava库生成PDF文档。我们将向您演示一个样例应用程序,以便您可自行完成它并能更好地理解它。熟悉iTextV5.3.0版iText是一个可从免费获取的Java库(请参见参考资料)。iText库非常强大,且支持生成HTML、RTF和XML文档,还支持生成PDF文档。您可以选择各种各样的字体来用于文档中。另外,iText的结构允许您使用相同代码生成上面提及的任何类型的文档。iText库包含使用各种字体生成PDF文本、在PDF文档中生成表格、向页面中添加水印等的类。iText还提供了其他许多特性。在一篇文章中无法演示所有这些特性。我们将介绍生成PDF所需的基本知识。有关更多详细信息,请参阅供应商提供的文档(参见参考资料)。我们将使用Eclipse开发我们的样例应用程序。作为一个开源IDE,Eclipse可免费获取且非常强大。您可立即下载Eclipse(参见参考资料)。iTextAPI:详细了解com.itextpdf.text.Document是用于生成PDF文档的主要类。这是第一个需要实例化的类。创建文档之后,您需要一个编写器来向其中写入信息。com.itextpdf.text.pdf.PdfWriter是一个PDF编写器。下面提供了其他一些常用的类:com.itextpdf.text.Paragraph:此类表示一个缩进的段落。com.itextpdf.text.Chapter:此类表示PDF文档中的一章。使用Paragraph作为标题、int作为章节编号来创建该类。com.itextpdf.text.Font:此类包含一种字体的所有规范,比如字体集、字号、样式和颜色。各种字体都在此类中声明为静态常量。com.itextpdf.text.List:此类表示一个列表,反过来,该列表又包含许多ListItems。com.itextpdf.text.pdf.PDFPTable:这是一个表格,可放在一个绝对位置上,也可作为类Table添加到文档中。com.itextpdf.text.Anchor:一个Anchor可能是一个引用,或是一个引用的目标。在Eclipse中下载和配置iText作为一个纯Java库,iText以JAR文件的形式提供(参见参考资料)。下载该库之后(假设下载到路径C:\temp),使用以下步骤在Eclipse环境中配置iText库:1.在Eclipse中创建一个名为iText的新Java项目。2.右键单击PackageExplorer视图中的iText项目,选择Properties。3.单击JavaBuildPath。在Libraries选项卡上,单击AddExternalJARs。4.找到C:\temp目录并选择此目录中的itext-5.3.0.jar。5.单击OK。iText现在已配置,Eclipse已准备好创建Java应用程序来生成动态的PDF文档。回页首样例应用程序还有什么能比您亲自创建的一个有效样例能更好地演示任何技术呢?现在您已拥有所需的工具(EclipseIDE)和库(iTextlibrary),我们已准备好设计和开发一个有效的样例程序。首先创建一个简单的PDF文档,该文档包含一些基本元素,比如纯文本、具有非默认字体的彩色文本、表格、列表、章、节等。此应用程序的用途是让您熟悉使用iText库的方式。有许多类为您执行了与PDF文档生成相关的大量工作。本文不可能介绍所有这些类。iText的javadocs是有关如何使用这些类的一个不错的信息来源。接下来我们开始编码。第一步是创建一个文档。文档是一个PDF文档的所有元素的容器。清单1.实例化文档对象Documentdocument=newDocument(PageSize.A4,50,50,50,50);第一个参数是页面大小。接下来的几个参数分别是左边距、右边距、上边距和下边距。此文档的类型还未定义。它依赖于您创建的编写器类型。对于我们的样例,我们选择com.itextpdf.text.pdf.PdfWriter。其他编写器包括HtmlWriter、RtfWriter、XmlWriter等。它们的名称说明了它们的实际用途。清单2.创建PdfWriter对象PdfWriterwriter=PdfWriter.getInstance(document,\newFileOutputStream(C:\\ITextTest.pdf));document.open();第一个参数是文档对象的引用,第二个参数是输出将写入的文件的绝对名称。接下来,我们打开文档开始编写。现在,我们将在文档的第一页上添加一些文本。任何文本都借助com.itextpdf.text.Paragraph来进行添加。您可使用您的文本以及字体、颜色、字号等默认设置创建一个默认段落。否则,您可提供自己的字体。在本文中,我们还将讨论PDF文档的定位符(链接)。在此PDF中,我们使用backToTop作为链接。当单击backToTop链接时,它会将您带到文档的第一页。您需要将该文本设置为第一页的定位目标。让我们看看如何将定位目标和字体设置到所添加的段落中。清单3.创建段落对象AnchoranchorTarget=newAnchor(Firstpageofthedocument.);anchorTarget.setName(BackToTop);Paragraphparagraph1=newParagraph();paragraph1.setSpacingBefore(50);paragraph1.add(anchorTarget);document.add(paragraph1);document.add(newParagraph(Somemoretextonthe\firstpagewithdifferentcolorandfonttype.,FontFactory.getFont(FontFactory.COURIER,14,Font.BOLD,newCMYKColor(0,255,0,0))));图1显示了清单3中的代码的样例输出。要关闭文档,将document.close();添加到清单3中的代码末尾。图1.清单3中的代码的样例输出您刚才看到了如何将纯文本添加到PDF文档中。接下来,我们需要向文档中添加一些复杂的元素。首先创建一个新章。章是一种特殊的节,它从一个新页开始且默认会显示一个编号。清单4.创建章对象Paragraphtitle1=newParagraph(Chapter1,FontFactory.getFont(FontFactory.HELVETICA,18,Font.BOLDITALIC,newCMYKColor(0,255,255,17)));Chapterchapter1=newChapter(title1,1);chapter1.setNumberDepth(0);在清单4中的代码中,我们创建了一个新的章对象chapter1,它的标题为“ThisisChapter1”。将编号深度设置为0,这样就不会在页面上显示章编号。节是章的子元素。在清单5中的代码中,我们创建一个标题为“ThisisSection1inChapter1”的节。要在此节下添加一些文本,我们创建了另一个段落对象someSectionText,并将它添加到节对象中。清单5.创建节对象Paragraphtitle11=newParagraph(ThisisSection1inChapter1,FontFactory.getFont(FontFactory.HELVETICA,16,Font.BOLD,newCMYKColor(0,255,255,17)));Sectionsection1=chapter1.addSection(title11);ParagraphsomeSectionText=newParagraph(Thistextcomesaspartofsection1ofchapter1.);section1.add(someSectionText);someSectionText=newParagraph(Followingisa3X2table.);section1.add(someSectionText);在添加表格之前,让我们看看该文档的外观。添加以下两行代码以关闭图2中的文档。然后编译和执行程序,以生成PDF文档:document.add(chapter1);document.close();。图2.章的样例输出接下来,我们创建一个表格对象。一个表格包含一个行和列的矩阵。一行中的一个单元格可占据多于一列。类似地,一列中的一个单元格可占据多于一行。清单6.创建表格对象PdfPTablet=newPdfPTable(3);t.setSpacingBefore(25);t.setSpacingAfter(25);PdfPCellc1=newPdfPCell(newPhrase(Header1));t.addCell(c1);PdfPCellc2=newPdfPCell(newPhrase(Header2));t.addCell(c2);PdfPCellc3=newPdfPCell(newPhrase(Header3));t.addCell(c3);t.addCell(1.1);t.addCell(1.2);t.addCell(1.3);section1.add(t);在清单6中的代码中,我们创建了一个PDFPTable对象t,它包含3列且在不断地添加行。接下来,我们创建3个PDFPcell对象,每个对象包含不同的文本。我们不断地将它们添加到表格中。它们会添加到第一行中,从第一列开始,移动到同一行中的下一列。该行完成后,将下一个单元格添加到下一行的第一列中。也可通过提供单元格的文本来将它添加到表格中,比如t.addCell(1.1);。最后,将表格对象添加到节对象中。最后,让我们看看如何将一个列表添加到PDF文档中。列表包含多个ListItem。一个列表可带有编号,也可不带编号。将第一个参数作为true传送,表明您希望创建带编号的列表。清单7.创建列表对象Listl=newList(true,false,10);l.add(newListItem(Firstitemoflist));l.add(newListItem(Seconditemoflist));section1.add(l);我们已将所有内容都添加到chapter1对象中。现在我们将一个图像添加到该Java对象中。我们可使用以下一个Image方法缩放图像:scaleAbsolute()scaleAbsoluteWidth()scaleAbsoluteHeight()scalePercentage()scaleToFit()在清单8中,我们使用了scaleAbsolute。然后将图像对象添加到Section中。清单8.将Image添加到主Document中Imageimage2=Image.getInstance(IBMLogo.bmp);image2.scaleAbsolute(120f,120f);section1.add(image2);iText中的com.itextpdf.text.Anchor类表示一个外部网站或文档内部的一个链接。定位符(链接)可像网页中的一个链接一样单击。要添加定位符,我们需要创建一个新定位符并将引用设置为清单3中创建的Anchor目标。然后将定位符添加到节中,并将该节添加到文档中。清单9.将定
本文标题:从_Java_应用程序动态生成_PDF_文件
链接地址:https://www.777doc.com/doc-2711394 .html