IText简介及示例_氺氺的博客-程序员信息网_itext例子

技术标签: Java Web  

一、iText简介

   iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 

        使用iText非常方便,引入jar包,程序中就可以使用iText类库了。iText.jar包下载地址:http://www.itextpdf.com/download.php

        如果生成的PDF文件中需要出现中文、日文、韩文字符,则同样的地址,下载extrajars-2.3.zip扩展包,里面包括itext-asian.jar等扩展工具包。

二、功能介绍

         在企业的信息系统中,报表处理一直占比较重要的作用,iText组件通过在服务器端使用Jsp 或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。

适合使用IText的需求:

        Typically, iText is used in projects that have one ofthe following requirements:

        The content isn't available in advance: it'scalculated based on user input or real-time database information.

        The PDF files can't be produced manually due to the massivevolume of content: a large number of pages or documents.

        Documents need to be created in unattended mode, in abatch process.

        The content needs to be customized or personalized;for instance, the name of the end user has to be stamped on a number of pages.

        Often you'll encounter these requirements in webapplications, where content needs to be served dynamically to a browser.Normally, you'd serve this information in the form of HTML, but for somedocuments, PDF is preferred over HTML for better printing quality, foridentical presentation on a variety of platforms, for security reasons, or toreduce the file size.

        通常,iText用于具有下列条件之一的项目:

        内容不固定,它是基于用户输入或实时数据库信息计算。

        由于页数多或者文件较大而造成的内容过多而使得PDF文件不能手动生成,。

        文件需要在无人值守模式下创建的,使用批处理过程。

        内容需要自定义或个性化;例如,最终用户的名字需要被印在某一页中。

        通常你会在Web应用程序中遇到的这些要求,其中的内容对于浏览者来说必须是动态。通常,你会以HTML的形式提供这些信息,但对于一些文档,PDF格式在印刷质量上是优于HTML的,同样,在各种平台上,出于安全原因,或减少文件大小的考虑,PDF都优于HTML。

三、demo演示,一个最简单的使用IText转化为PDF的例子

       用iText生成PDF文档需要5个步骤: 

  ①建立com.itextpdf.text.Document对象的实例。

        Document document= new Document(); 

  ②建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。

        PDFWriter.getInstance(document,new FileOutputStream("ITextTest.pdf")); 

  ③打开文档。

        document.open(); 

  ④向文档中添加内容。

        document.add(newParagraph("IText  Test")); 

  ⑤关闭文档。

        document.close(); 

  通过上面的5个步骤,就能产生一个ITextTest.PDF的文件,文件内容为"ITextTest"。

        具体代码如下:

package com.wh;
 
importjava.io.FileOutputStream;
importcom.itextpdf.text.BaseColor;
importcom.itextpdf.text.Document;
importcom.itextpdf.text.Element;
importcom.itextpdf.text.Font;
importcom.itextpdf.text.Paragraph;
importcom.itextpdf.text.Rectangle;
importcom.itextpdf.text.pdf.BaseFont;
importcom.itextpdf.text.pdf.PdfPTable;
importcom.itextpdf.text.pdf.PdfWriter;
 
public class ToPDF{
       // 表头
       public static final String[] tableHeader= { "姓名", "性别", "年龄",
                     "学院", "专业", "年级"};
 
       // 数据表字段数
       private static final int colNumber = 6;
 
       // 表格的设置
       private static final int spacing = 2;
 
       // 表格的设置
       private static final int padding = 2;
 
       // 导出Pdf文挡
       public static void exportPdfDocument() {
              // 创建文Pdf文挡50, 50, 50,50左右上下距离
              Document document = newDocument(new Rectangle(1500, 2000), 50, 50, 50,
                            50);
              try {
                     //使用PDFWriter进行写文件操作
                     PdfWriter.getInstance(document,new FileOutputStream(
                                   "d:\\学生信息.pdf"));
                     document.open();
                     // 中文字体
                     BaseFont bfChinese =BaseFont.createFont("STSong-Light",
                                   "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
                     Font fontChinese = newFont(bfChinese, 12, Font.NORMAL);
                     // 创建有colNumber(6)列的表格
                     PdfPTable datatable = newPdfPTable(colNumber);
                     //定义表格的宽度
                     int[] cellsWidth = { 8, 2,2, 8, 5, 3 };
                     datatable.setWidths(cellsWidth);
                     // 表格的宽度百分比
                     datatable.setWidthPercentage(100);
                     datatable.getDefaultCell().setPadding(padding);
                     datatable.getDefaultCell().setBorderWidth(spacing);
                     //设置表格的底色
                     datatable.getDefaultCell().setBackgroundColor(BaseColor.GREEN);
                     datatable.getDefaultCell().setHorizontalAlignment(
                                   Element.ALIGN_CENTER);
                     // 添加表头元素
                     for (int i = 0; i <colNumber; i++) {
                            datatable.addCell(newParagraph(tableHeader[i], fontChinese));
                     }
                     // 添加子元素
                     for (int i = 0; i <colNumber; i++) {
                            datatable.addCell(newParagraph(tableHeader[i], fontChinese));
                     }
                     document.add(datatable);
              } catch (Exception e) {
                     e.printStackTrace();
              }
              document.close();
       }
 
       public static void main(String[] args)throws Exception {
              exportPdfDocument();
       }
 
}

下载示例代码及jar包请点击:  下载

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wanghuan203/article/details/9112473

智能推荐

使用powerdesigner导入mysql数据保存为pdm文件_韩镱的博客-程序员信息网

在做下面的操作的时候需要下载mysql odbc首先打开powerdesigner点击文件,选择反向工程,再选着Database,出现下面的弹框此时你要输入你要连接的数据库地址,用户,密码这个时候你就会看到下拉框里有数据的连接驱动,然后输入用户,密码此外,odbc的连接还可以在另一处能看到这就是刚才拉取数据库创建的数据源信息...

Android Picasso的基本使用_微微泛黄的博客-程序员信息网

Picasso是Android中强大的图像下载和缓存库。Picasso Introduction(介绍):在Android应用程序中图片的添加有必须的环境和良好的视觉风格,Picasso可以很轻松的加载图片在你的应用程序中-通常在一行代码中。[java] view plain copy print?Picasso.with(context).load(“http://i.imgur.com/Dv

C语言面试常见笔试题_c语言面试笔试_wellnw的博客-程序员信息网

1.以下是32 位系统上C 程序,请计算sizeof 的值。程序一:char str[] = “Hello” ; char *p = str ; i nt n = 10; 请计算(1)sizeof (str ) = 6 ...

CoreData事务记录查询(Query)中NSPersistentHistoryTransaction.fetchRequest总返回nil的解决_nspersistancehistory_大熊猫侯佩的博客-程序员信息网

在本篇博文中,我们解决了 CoreData 事务记录查询(Query)中NSPersistentHistoryTransaction.fetchRequest 总返回空值的问题,你值得拥有!

第一只WiFi蠕虫的诞生:完整解析博通WiFi芯片Broadpwn漏洞(含EXP/POC)_yangzcc的博客-程序员信息网

过去的几个月里,Android 和 iOS 数十亿台设备中都曾出现过可怕的 WiFi 远程代码执行漏洞 BroadPwn。谷歌 7 月初发布了修复补丁,而苹果则是在 7 月 19 日发布的更新。而此次开得热火朝天的 Black Hat 2017上安全研究员 Nitay Artenstein 也针对这个漏洞进行了详细剖析。Broadpwn 漏洞甚至还能进化成 WiFi 蠕虫,如果你的移动设备没...

python中sys模块是什么意思_python3中SYS模块_weixin_39758953的博客-程序员信息网

sys.argv 命令行参数List,第一个元素是程序本身路径sys.modules 返回系统导入的模块字段,key是模块名,value是模块sys.exit(n) 退出程序,正常退出时exit(0)sys.version 获取Python解释程序的版本信息sys.maxint 最大的Int值sys...

随便推点

大数据学习--预备知识:数学基础_大数据数学基础_TKE_manman的博客-程序员信息网

数学知识回顾一、线性代数二、概率论及数理统计三、信息熵和基尼系数四、最优化一二两部分是对之前的数学知识的复习,后面两部分是大数据中涉及到的新的知识。一、线性代数:1.线性代数:1.1行列式是一个将方阵映射到一个标量的函数,记作det(A)或|A|。行列式也可以看作是有向面积或体积在一般欧几里得空间的推广。或者说是在n维欧几里得空间中,行列式描述的是一个线性变换对“体积”所造成的影响...

R语言实战(七)图形进阶_weixin_33953384的博客-程序员信息网

本文对应《R语言实战》第11章:中级绘图;第16章:高级图形进阶基础图形一章,侧重展示单类别型或连续型变量的分布情况;中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关系)的绘图;高级绘图进阶一章介绍四种图形系统,主要介绍lattice和ggplot2包。=========================================================...

软件工程:第二章作业_weixin_34187862的博客-程序员信息网

1.软件工程和程序大作业的调查根据程序的难易程度和学生的个人程度不同代码的数量和时间都是不同的,程序根据年级不同程序有难到易由多到少,程序设计大多是团队合作,自己无法独立完成,能够独立完成的同学很少,程序是否能够解决实际问题有的程序可能是写着有趣,有的可能为解决实际而写的,所交作业版本少证明只有少部分同学自己思考程序大部分同学无法独立完成。计本和软工的同学完成一个大的程序几百行代码大概三四天可...

TensorFlow中的CTC损失函数实例_HELLOWORLD2424的博客-程序员信息网

TensorFlow中的CTC损失函数实例以下是CTC损失函数的APItf.nn.ctc_loss( labels, logits, label_length, logit_length, logits_time_major=True, unique=None, blank_index=None, name=None)

Varnish 3安装部署及使用_remotesupport的博客-程序员信息网

Varnish安装源码安装Varnish安装pcre:# wget -c http://downloads.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.bz2# tar jxvf pcre-8.32.tar.bz2# cd pcre-8.32# ./configure && make && make ins