`
8366
  • 浏览: 815566 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Itext操做PDF文档

 
阅读更多

 

 

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装非常方便,在http://www.lowagie.com/iText/download.html - download 网站上下载iText.jar文件后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

 

网站:

官方网站:http://www.lowagie.com/iText/

api:http://www.1t3xt.info/api/

 

 

步骤:首先下载需要的jar,主要有三个,将这3个包导入到我们的web项目的lib目录下,就可以使用itext生成 标准的pdf文档了

 

iText.jar : 必须的jar

 

iTextAsian.jar: 支持中文的jar

bcprov-jdk15-140.jar: pdf文档加密所要使用的一个包

 

例子:生成一个HelloWord!:

 

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

 

①建立com.lowagie.text.Document对象的实例。 Document document = new Document(); 

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

PDFWriter.getInstance(document, new FileOutputStream("Helloworld.PDF")); 

③打开文档。 document.open(); 

④向文档中添加内容。 document.add(new Paragraph("Hello World")); 

⑤关闭文档。 document.close(); 

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

 

 

如何支持中文:

在这里我们的的解决思路是将字体构造成中文的,然后在需要中文的时候,使用该字体完成对中文的支持

 

BaseFont bf=null;

//定义标题中文标题字体

Font fontTopic = null;

//定义黑色字体

Font fontBlack=null;

 

bf = BaseFont.createFont("STSong-Light",

"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

fontTopic = new Font(bf, 14, Font.NORMAL,Color.BLUE);

fontBlack = new Font(bf, 6, Font.NORMAL,Color.BLACK);

 

首先要定义一个基础字体BaseFont bf,用他构建一个可以书写中文的字体,其他字体如fontTopic ,fontBlack 可以在这个字体上构建,给他加入一些新的特性,比如字体大小,颜色,在构建好以后,就可以使用这些字体了,用他们来书写中文

 

设置文档页面大小,页面布局

 

//new文档的时候,可以使用下面的构造方法,传递纸的大小,左边距,右边距,上边距,下边距

 

Document document = new Document(PageSize.A4,60,60,50,50);

 

添加段落:

//使用字体fontTopic

1.Paragraph p= new Paragraph("套餐论证指标",fontTopic);

//设置段落对其方式为居中,1-居中,2-具右,默认具左

2.p.setAlignment(1);

3.document.add(p);

如果我们需要页面布局,比如在标题下面和表格上面有一些空白,我门可以用几个空段落来实现这个目标,也是3

Paragraph p1= new Paragraph(" ",fontTopic);

p1.setAlignment(1);

document.add(p1);

 

 

 

 

添加表格:

 

  1. Table table = new Table(8); //构造一个有8列的表格

 

//设置列宽

  1. int headerwidths[] = {20, 22, 22, 10, 11, 11, 11, 10};
  2. table.setWidths(headerwidths);
  3. table.setWidth(110);
  4. table.setPadding(3);//设置表格中cell相对表格的大小,值越大生成表格的cell越大
  5. Cell cell=new Cell(new Paragraph("商品名称", fontRed));//给表格里添加一个cell

table.addCell(cell);

  1. //如果要设置下一个cell 3 则可以
  2. cell= new Cell(new Paragraph(""));

cell.setColspan(2);

table.addCell(cell);

  1. //最后记得
  2. document.add(table);
  3. document.close();

 

在我们构造我们需要的表格的样子时候,我们最好一行一行构造,在有行跨多列的时候,我们可以使用setColspan(?),这样我们就可以清晰的构造出我们想要的表格的样式了,不要一会构造行,一会构造列,到最后就乱了

 

设置图片:

 

  1. Image jpgBack = Image.getInstance("logo.gif");
  2. jpgBack.setAbsolutePosition(3, 768);//设置图片的左上角的坐标为(3, 768),注意屏幕左下脚的坐标为(0,0)
  3. pgBack.setAlignment(Image.UNDERLYING);
  4. document.add(jpgBack);

 

设置水印图片和水印文字

 

水印图片和水印文字主要是给已经存在的pdf文档中添加的,假设我们的目录下有Chap0101.pdf 文档,现在我们要给这个文档添加水印图片和水印文字

 

PdfReader reader = new PdfReader("Chap0101.pdf");

PdfContentByte under;//文档起始页

PdfContentByte over;//文档结束页

Image img = Image.getInstance("watermark.jpg");

//设置图片显示的位置

img.setAbsolutePosition(200, 500);

//水印效果一定是给一个已经存在的文档加的,加好以后要另起一个名字

PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("Chap0102.pdf"));

under = stamp.getUnderContent(1);

under.addImage(img);

over = stamp.getOverContent(1);

over.beginText();

over.setFontAndSize(bf, 30);

over.showTextAligned(Element.ALIGN_LEFT, " 

析", 220, 500, 45);

 

over.endText();

stamp.close();

//删除以前没有水印文件

File file =new File("Chap0101.pdf");

 

if(file.exists())

{

file.delete();

}

 

设置密码:

 

设置密码也是在写之前就要先设置密码,主要是在得到PdfWriter  对象后,就开始对文档加密

 

 

PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("Chap0102.pdf"));

writer.setEncryption(PdfWriter.STRENGTH128BITS, "user", "8366", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);

 

然后进行其他操作

 

完整的在套餐分析中使用itext的代码以及显示效果:

 

 

public class NewPDF

 

{

 

public static void main(String[] args)

{

 

BaseFont bf=null;

//定义标题中文标题字体

Font fontTopic = null;

//定义黑色字体

Font fontBlack=null;

//定义红色字体

Font fontRed=null;

try

{

 

bf = BaseFont.createFont("STSong-Light",

"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

fontTopic = new Font(bf, 14, Font.NORMAL,Color.BLUE);

fontBlack = new Font(bf, 6, Font.NORMAL,Color.BLACK);

fontRed = new Font(bf, 6, Font.NORMAL,Color.RED);

 

Document document = new Document(PageSize.A4,60,60,60,50);

 

 

PdfWriter.getInstance(document, new FileOutputStream ("Chap0101.pdf"));

 

document.open();

//使用自定义的中文段落字体

Paragraph p= new Paragraph("套餐论证指标",fontTopic);

 

//添加两行空行

Paragraph p1= new Paragraph(" ",fontTopic);

Paragraph p2= new Paragraph(" ",fontTopic);

 

 

//设置段落对其方式为居中,1-居中,2-具右,默认具左

p.setAlignment(1);

p1.setAlignment(1);

p2.setAlignment(1);

document.add(p);

document.add(p1);

document.add(p2);

 

//设置图片

Image jpgBack = Image.getInstance("logo.gif");

jpgBack.setAbsolutePosition(3, 768);

 

jpgBack.setAlignment(Image.UNDERLYING);

 

document.add(jpgBack);

//设置表格为8行

 

Table table = new Table(8);

 

//设置列宽

int headerwidths[] = {20, 22, 22, 10, 11, 11, 11, 10};

table.setWidths(headerwidths);

table.setWidth(110);

//设置表格中cell相对表格的大小,值越大生成表格的cell越大

table.setPadding(2);

Cell cell=new Cell(new Paragraph("商品名称", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("商称的值", fontBlack));

table.addCell(cell);

 

cell= new Cell(new Paragraph(""));

cell.setColspan(2);

table.addCell(cell);

 

 

cell= new Cell(new Paragraph("宽表", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("时间", fontBlack));

table.addCell(cell);

 

cell= new Cell(new Paragraph("", fontBlack));

cell.setColspan(2);

table.addCell(cell);

 

cell= new Cell(new Paragraph("新增客户数", fontRed));

table.addCell(cell);

 

 

cell= new Cell(new Paragraph("新客数值", fontBlack));

table.addCell(cell);

 

cell= new Cell(new Paragraph("", fontBlack));

cell.setColspan(6);

table.addCell(cell);

 

cell= new Cell(new Paragraph("纯理性条件下本网预计目标客户数", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("纯数值", fontBlack));

table.addCell(cell);

cell= new Cell(new Paragraph("", fontBlack));

cell.setColspan(6);

table.addCell(cell);

 

cell= new Cell(new Paragraph("合理性条件下本网预计目标客户数", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("合数值", fontBlack));

table.addCell(cell);

cell= new Cell(new Paragraph("", fontBlack));

cell.setColspan(6);

table.addCell(cell);

 

cell= new Cell(new Paragraph("最大可能损失指标", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("最标值", fontBlack));

table.addCell(cell);

cell= new Cell(new Paragraph("", fontBlack));

cell.setColspan(6);

table.addCell(cell);

 

 

cell= new Cell(new Paragraph("本网客户收益", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("收益值", fontBlack));

table.addCell(cell);

cell= new Cell(new Paragraph("新增客户收益", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("信益值", fontBlack));

table.addCell(cell);

cell= new Cell(new Paragraph("挽留客户数", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("挽值", fontBlack));

table.addCell(cell);

 

cell= new Cell(new Paragraph("", fontBlack));

cell.setColspan(2);

table.addCell(cell);

 

cell= new Cell(new Paragraph("发展预计", fontRed));

cell.setColspan(8);

table.addCell(cell);

 

 

cell= new Cell(new Paragraph("", fontRed));

table.addCell(cell);

 

cell= new Cell(new Paragraph("纯理性条件下本网预计目标客户数(个)", fontRed));

 

table.addCell(cell);

 

cell= new Cell(new Paragraph("合理性条件下本网预计目标客户数(个)", fontRed));

 

table.addCell(cell);

 

cell= new Cell(new Paragraph("新增客户数(个)", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("最大可能损失(元)", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("本网客户收益(元)", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("新增客户收益(元)", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("挽留客户数(个)", fontRed));

 

table.addCell(cell);

 

cell= new Cell(new Paragraph("第一月", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值1", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值2", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值3", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值4", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值5", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值7", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值7", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("第二月", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值1", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值2", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值3", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值4", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值5", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值7", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值7", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("第三月", fontRed));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值1", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值2", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值3", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值4", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值5", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值7", fontBlack));

 

table.addCell(cell);

cell= new Cell(new Paragraph("值7", fontBlack));

 

table.addCell(cell);

document.add(table);

document.close();

PdfReader reader = new PdfReader("Chap0101.pdf");

PdfContentByte under;

PdfContentByte over;

Image img = Image.getInstance("watermark.jpg");

img.setAbsolutePosition(200, 500);

//水印效果一定是给一个已经存在的文档加的,加好以后要另起一个名字

PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("Chap0102.pdf"));

 

//设置密码,给文档写之前就要先设定密码,并且设置为可拷贝,可打印

stamp.setEncryption(PdfWriter.STRENGTH128BITS, "userpass", "8366", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);

under = stamp.getUnderContent(1);

 

under.addImage(img);

 

over = stamp.getOverContent(1);

over.beginText();

over.setFontAndSize(bf, 30);

over.showTextAligned(Element.ALIGN_LEFT, " 

析", 220, 500, 45);

 

over.endText();

stamp.close();

//删除以前没有水印文件

File file =new File("Chap0101.pdf");

 

if(file.exists())

{

file.delete();

}

 

}

catch(Exception e)

{

e.printStackTrace();

}

 

 

 

}

 

}

 

 

效果:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    iText操作Pdf简单整理

    在使用iText时,首先需要引入相应的库文件,如压缩包中的`itextpdf-5.5.1.jar`,这是iText的主要库,包含了处理PDF文档的核心功能。如果需要处理中文字符或者亚洲语言,还需要引入`itext-asian-5.1.0.jar.zip`解压后...

    itext生成PDF开发文档

    import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.layout.Document; public class create_PDF { public static void main(String args[]) throws ...

    iText中文帮助文档_itext中文帮助文档_itext_iTextpdf_itext中文文档_

    这个中文帮助文档提供了详细的指导,帮助开发者理解和使用iText来创建包含丰富内容的PDF文件。以下是对iText库和文档中涉及的关键知识点的详细解释: 1. **iText基本概念**: - **PDF(Portable Document Format)...

    itextpdf中文帮助文档.pdf

    iTextPDF是一款广泛使用的开源Java库,用于创建、修改PDF文档。这个中文帮助文档提供了关于如何使用iTextPDF库在Java项目中处理PDF的详细指南,适合对PDF操作有一定需求的开发者。iTextPDF不仅支持创建新的PDF文档,...

    java使用itext实现pdf文件下载

    在实际应用中,你可能需要根据业务需求对PDF文件进行更复杂的操作,如添加页眉页脚、插入表格、处理图像等。Itext库提供了丰富的API来支持这些功能,你可以查阅其官方文档或者相关的教程进行深入学习。 在压缩包中...

    iText_pdf.rar_iText pdf_itext PDF类

    在描述中提到的“iText可以制作中文PDF文件的JAVA源程序”,意味着这个压缩包可能包含示例代码或教程,展示了如何使用iText库在Java程序中创建包含中文字符的PDF文档。通常,处理中文字符需要正确配置字体资源,并...

    使用itext操作pdf文档(创建、签章、斜字水印、文本替换)

    在IT行业中,处理PDF文档的需求非常常见,包括创建新的PDF文档、添加签名、插入水印以及进行文本替换等操作。iText是一个流行的Java和.NET平台的开源库,专门用于处理PDF文档。这篇博客文章...

    iText PDF pdf文档生成itext5.5.11.zip,itxt-asian5.20.jar,加水印,去水印代码,功能强大。

    iText5-itextpdf-5.5.11.jar是主要的库文件,包含了大部分的功能实现;iText5-xmlworker-5.5.11.jar则用于处理HTML到PDF的转换,使得你可以将网页内容轻松转换为PDF格式。 2. itext-asian5.20.jar:这个库是iText的...

    利用itext操作pdf从数据库导出大量数据

    iText是一个强大的Java库,允许开发者在应用程序中创建、修改和处理PDF文档。本篇文章将详细介绍如何利用iText库操作PDF,从数据库中导出大量数据。 首先,我们需要理解iText的基本概念和功能。iText提供了丰富的...

    使用IText生成PDF和WORD文档

    这将生成一个名为"output.pdf"的PDF文件,其中包含指定的文本。 接下来,我们转向Word文档的生成。虽然IText的主要功能是处理PDF,但它也可以通过使用Apache POI库或iTextAspose库生成Word(.doc或.docx)文件。...

    itext7 pdf转图片

    - PDF文档的结构:PDF由多个对象组成,如页、字体、图像、注释等,这些对象在PDF文件中以XML式的语法存储。 - 转换PDF:除了基本的创建和编辑功能,iText 7还允许开发者将PDF文档转换为其他格式,例如HTML、XML或...

    Android使用iText生成pdf并读取pdf内容

    在Android平台上,生成和读取PDF文件是一项常见的需求,特别是在数据导出、报告生成或文档共享等场景。iText是一个强大的开源库,它允许开发者在Java和.NET环境中创建、编辑和处理PDF文档。在这个场景中,我们将探讨...

    java通过itext操作pdf模板写入pdf合同数据

    - **保存结果**:完成数据写入后,调用`PdfStamper`的`close()`方法,将更改保存到新的PDF文件中。 5. **示例代码** 下面是一个简单的示例,展示了如何使用iText读取模板并写入数据: ```java PdfReader reader...

    itext 生成pdf 目录

    iText 是一个强大的Java库,专门用于创建和修改PDF文档。在PDF文档中,目录(或书签)是用户友好的导航工具,可以帮助读者快速跳转到特定章节或页面。本篇文章将深入探讨如何使用iText来生成PDF的目录。 首先,理解...

    freemarker+itext生成PDF

    在Java世界中,Itext 是一个广泛使用的库,它允许开发者创建、修改和操作PDF文档。这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的...

    Itext删除PDF的图层

    Itext是一个开源Java库,专为处理PDF文档设计,提供了一系列API用于创建、编辑和阅读PDF文件。 **Itext库介绍** Itext是PDF处理的强力工具,它允许开发者进行各种操作,包括添加文本、图像、表格,以及处理PDF的...

    itext生成pdf文件-表格

    iText是一个流行的Java库,专门用于创建和编辑PDF文档。本文将深入探讨iText如何生成包含表格的PDF文件,同时结合提供的“itext教程_itext的使用方法_iava使用itext实现pdh的输出.doc”文档,为您详细解析这一过程。...

    itextpdf-5.5.13

    《iTextPDF 5.5.13:创建PDF文件的高效工具》 iTextPDF是一款功能强大的Java库,主要用于创建、编辑以及处理PDF文档。版本5.5.13是其历史版本之一,提供了丰富的API和功能,使得开发者能够方便地在Android平台上...

    iTextpdf支持中文

    iTextpdf是一款强大的Java库,专门用于生成和编辑PDF文档,同时也支持在Android平台上使用。这个库使得开发者能够轻松地在应用程序中创建、修改和处理PDF文档,包括添加文本、图像、表格、链接等元素。在标题中提到...

    itext解析pdf全能最新jar

    iText是著名的开放源码的站点sourceforge的一个项目,它是一个用于生成PDF文档的一个java开源库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。如果PDF是标记的且包含一个结构树,...

Global site tag (gtag.js) - Google Analytics