[转载]使用iText操作pdf文件

摘要:
几天前,我在使用iText操作pdf文件时写了一篇文章“Java读取pdf文件的内容”,但似乎没有太多涉及读取pdf文件内容(可能我没有找到它,我还检查了Java字段中的相关组件以获取pdf文件。I.HelloWorldiText创建pdf文件非常简单。

使用iText操作pdf文件

        前段时间写过一篇文章《java读取pdf文件的内容》,pig0045给我回复,说可以直接利用iText搞定,我很感激,因为以前处理pdf文件并不多,对这块相关组件并不了解,pig0045给我介绍了一个新的方法,谢谢!欣喜之余,马上google了一把iText,发现iText在生成pdf文件方面功能很强大,而在读取pdf文件内容方面似乎涉及并不多(也许是我没查到,有不同观点的朋友,大家探讨一下阿)。
        同时我也查了下java领域针对pdf的相关组件,发现有很多开源的东东,都可以操作pdf,恩,很不错的。大致介绍几个:xpdf,iText,PDFBox,感兴趣的话,大家可以自己查一下。
        好了,回到文章主题,查了下iText后,我也去稍微看了下相关的api,做了一些简单的demo,虽然网上相关介绍很多,但是自己写一遍程序再用自己的语言记录下来,理解会更为深刻一点。
准备工作:到http://www.lowagie.com/iText/下载最新的iText的jar包,并将其放到classpath中。
一.Hello World
iText创建pdf文件是十分简单的,为了演示其极其简单性,我们做一个HelloWorld吧,让大家体验一下。
在这个pdf文件中,我们只显示一句话"Hello World",实现方式如下:
[转载]使用iText操作pdf文件第1张        // 创建一个文档对象
[转载]使用iText操作pdf文件第1张
        Document doc = new Document();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        
try ...{
[转载]使用iText操作pdf文件第5张            
// 定义输出位置并把文档对象装入输出对象中
[转载]使用iText操作pdf文件第5张
            PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
[转载]使用iText操作pdf文件第5张            
// 打开文档对象
[转载]使用iText操作pdf文件第5张
            doc.open();
[转载]使用iText操作pdf文件第5张            
// 加入文字“Hello World”
[转载]使用iText操作pdf文件第5张
            doc.add(new Paragraph("HelloWorld"));
[转载]使用iText操作pdf文件第5张            
// 关闭文档对象,释放资源
[转载]使用iText操作pdf文件第5张
            doc.close();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (FileNotFoundException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (DocumentException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第19张        }
怎么样?很简单吧?下面我们对以上代码稍作解释。
Document(文档)是创建pdf需要使用的第一个类,一旦创建了文档,要向pdf文件里写入内容,则需要一个写入器,而PdfWriter就是这样的一个写入器。Paragraph这个类表示一个缩进的段落。运行以上程序,我们就会在/root目录下看到hello.pdf文件。

但是在实际工作中,我们不可能做这么简单的工作,下面就介绍一下常用的操作。
二.设置页边距
如果我们希望定义页面大小和页边距,可以通过使用Document的构造方法实现:
[转载]使用iText操作pdf文件第1张    public Document();
[转载]使用iText操作pdf文件第1张
[转载]使用iText操作pdf文件第1张    
public Document(Rectangle pageSize);
[转载]使用iText操作pdf文件第1张
[转载]使用iText操作pdf文件第1张    
public Document(Rectangle pageSize,
[转载]使用iText操作pdf文件第1张       
int marginLeft,
[转载]使用iText操作pdf文件第1张       
int marginRight,
[转载]使用iText操作pdf文件第1张       
int marginTop,
[转载]使用iText操作pdf文件第1张       
int marginBottom);
如下:
[转载]使用iText操作pdf文件第1张    Rectangle pSize=new Rectangle(144,90);
[转载]使用iText操作pdf文件第1张        
//文档的背景色
[转载]使用iText操作pdf文件第1张
        pSize.setBackgroundColor(Color.blue);             
[转载]使用iText操作pdf文件第1张        
//创建一个文档对象,设置初始化大小和页边距
[转载]使用iText操作pdf文件第1张
        Document doc=new Document(pSize,5,5,5,5);
在上面的例子中我们通过Rectangle设置了文档的大小,其实iText已经为我们定义好了许多常用的页面,比如:A0-A10,我们可以直接调用,如下:
[转载]使用iText操作pdf文件第1张 Document doc=new Document(PageSize.A4,5,5,5,5);

三.设置字体
iText可以设置显示文本的字体,大小,颜色等,如下:
[转载]使用iText操作pdf文件第1张            // 加入文字“Hello World”,并设置字体为粗体,大小为20,颜色为红色
[转载]使用iText操作pdf文件第1张
            doc.add(new Paragraph("HelloWorld", FontFactory.getFont(
[转载]使用iText操作pdf文件第1张                    FontFactory.COURIER, 
20, Font.BOLD, new Color(25500))));
而要实现中文支持,我们需要到http://itextdocs.lowagie.com/downloads/iTextAsian.jar下载中文支持包,然后把它放入classpath中(我试了几次,都无法下载,这里先不说这块了)。
四.编辑表格
pdf中的table和html中的table差不多,只是其单元格是cell,如下代码加入了一个2*2的表格,代码很简单,就不过多解释了。
[转载]使用iText操作pdf文件第1张        Document doc = new Document();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        
try ...{
[转载]使用iText操作pdf文件第5张            
// 定义输出位置并把文档对象装入输出对象中
[转载]使用iText操作pdf文件第5张
            PdfWriter.getInstance(doc, new FileOutputStream("/root/hello.pdf"));
[转载]使用iText操作pdf文件第5张            
// 打开文档对象
[转载]使用iText操作pdf文件第5张
            doc.open();
[转载]使用iText操作pdf文件第5张            Table t 
= new Table(2,2);
[转载]使用iText操作pdf文件第5张            t.setBorderColor(
new Color(00255));//设置边框颜色为蓝色
[转载]使用iText操作pdf文件第5张
            t.setPadding(5);
[转载]使用iText操作pdf文件第5张            t.setSpacing(
5);//设置单元格边界
[转载]使用iText操作pdf文件第5张
            t.setBorderWidth(1);//设置边框宽度
[转载]使用iText操作pdf文件第5张
            Cell c1 = new Cell("header1");
[转载]使用iText操作pdf文件第5张            c1.setHeader(
true);
[转载]使用iText操作pdf文件第5张            t.addCell(c1);
[转载]使用iText操作pdf文件第5张            c1 
= new Cell("Header2");
[转载]使用iText操作pdf文件第5张            t.addCell(c1);
[转载]使用iText操作pdf文件第5张            t.endHeaders();
[转载]使用iText操作pdf文件第5张            t.addCell(
"1.1");
[转载]使用iText操作pdf文件第5张            t.addCell(
"1.2");
[转载]使用iText操作pdf文件第5张            doc.add(t);
[转载]使用iText操作pdf文件第5张            
// 关闭文档对象,释放资源
[转载]使用iText操作pdf文件第5张
            doc.close();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (FileNotFoundException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (DocumentException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第19张        }

五.插入图片
插入图片和swing插入图片差不多,大家可以参考一下:
[转载]使用iText操作pdf文件第1张        Document doc = new Document();
[转载]使用iText操作pdf文件第1张        Image jpeg;
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        
try ...{
[转载]使用iText操作pdf文件第5张            PdfWriter.getInstance(doc, 
new FileOutputStream("/root/hello.pdf"));
[转载]使用iText操作pdf文件第5张            doc.open();
[转载]使用iText操作pdf文件第5张            jpeg 
= Image.getInstance("/root/1.gif");
[转载]使用iText操作pdf文件第5张            
//图片居中
[转载]使用iText操作pdf文件第5张
            jpeg.setAlignment(Image.ALIGN_CENTER);
[转载]使用iText操作pdf文件第5张            doc.add(jpeg);
[转载]使用iText操作pdf文件第5张            doc.close();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (BadElementException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (MalformedURLException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (IOException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第3张[转载]使用iText操作pdf文件第4张        }
 catch (DocumentException e) ...{
[转载]使用iText操作pdf文件第5张            e.printStackTrace();
[转载]使用iText操作pdf文件第19张        }


           好了,到这里我大致也介绍完了,欢迎大家拍砖,呵呵


转自:http://blog.csdn.net/hbcui1984/archive/2007/06/05/1638843.aspx

免责声明:文章转载自《[转载]使用iText操作pdf文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇银监会35号文整饬影子银行 银行应对仍有余地office 2013下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server xtype的介绍

sysobjects 表 在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。 列名 数据类型 描述 name sysname 对象名。 Id int 对象标识号。 xtype char(2) 对象类型。可以是下列对象类型中的一种: C = CHECK 约束 D = 默认值或...

25.Android之图像的平移、旋转及缩放学习

在Android中,项目目录下的resdrawable用来放置该项目的图片资源。   Android中提供了Bitmap类来获取图像文件信息,进行图像的平移、旋转及缩放等操作,并可以指定格式保存图像文件。 1.图像绘制   在绘制图像之前,需要从项目目录下的resdrawable中获取所需的图片资源。我们可以通过资源索引来获得该图像对象Bitmap。具体...

【转】Linux 下从命令行打开pdf文件和html文件的命令

【转】 Linux 下从命令行打开pdf文件和html文件的命令 转自:http://hipercomer.blog.51cto.com/4415661/900926 如果你经常工作在终端下,某个时刻需要查看一些文档的时候(比如pdf或者html文档),是不是经常需要切换到文件系统中打开这些文件。事实上,你只需要敲一个命令就可以打开这个文件了,完全没有必要...

tmpfs使用探讨

一、 什么是tmpfs? tmpfs是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储。 而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它; ramdisk(中文名:虚拟内存盘,简称:RAM盘)是通过使用软件将RAM模拟当做...

Navicat如何进行搜索筛选

分类: Navicat Navicat提供的“在数据库或模式中查找”功能用于一个数据库和/或模式内搜索表和视图的记录。Navicat“对象筛选”功能可以让用户在对象列表或模型中筛选包含筛选字符串的对象。 在数据库或模式中查找(只限于完整版本) Navicat 提供的“在数据库或模式中查找:功能用于一个数据库和/或模式内搜索表和视图的记录。打开查...

unigui 如何将‘图片Jpeg、Gif等或者文件PDF、Doc等’ 保存到数据库,或者将数据库中的二进制数据(附件)下载为文件

1、参考:  将文件放入数据库,操作TBlobField  :  https://blog.csdn.net/abin30/article/details/1471819 2、UniPdfFrame 的使用:viewerjs Document Viewer simple interface unigui to view OpenOffice + Pdf d...