1、添加iText依赖
要开始使用iText,需要将其添加到项目中。如使用的是Maven,可以在pom.xml文件中添加以下依赖:
<!-- PDF 动态填充 start -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.12</version>
</dependency>
<dependency>
<!-- 不使用 asian 包里的字体可不引入,中文仅有 ST-Light(华文宋体) 一个字体 -->
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!-- PDF 动态填充 end -->
<!-- 图片动态填充 start -->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-all</artifactId>
<version>${batik.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-transcoder</artifactId>
<version>${batik.version}</version>
</dependency>
<!-- 转码实现,可替代 -->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-codec</artifactId>
<version>${batik.version}</version>
</dependency>
<!-- 图片动态填充 end -->
下载地址:http://developers.itextpdf.com/itext-java
2、使用iText 创建 PDF 文件
先实例化一个iText中 Document类,使用PdfWriter创建一个pdf,并且在新pdf的段落上添加一些文字。代码如下,
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.io.FileNotFoundException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
public class Main {
public static void main(String[] args) {
try {
//添加文本
//创建文档对象
Document document = new Document();
//实例化生成的文档
PdfWriter.getInstance(document, new FileOutputStream(
"MyFirstDynamic.pdf"));
//打开文档
document.open();
//在文档中添加文本内容
document.add(new Paragraph("Hello World! www.cjavapy.com"));
//关闭文档对象
document.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
3、使用iText 添加图片
使用iText 可以将图像添加到PDF文件中,代码如下,
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.io.FileNotFoundException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
public class Main {
public static void main(String[] args) {
try {
//添加文本
//创建文档对象
Document document = new Document();
//实例化生成的文档
PdfWriter.getInstance(document, new FileOutputStream(
"MyFirstDynamic.pdf"));
//打开文档
document.open();
//在文档中添加文本内容
document.add(new Paragraph("Hello World! www.cjavapy.com"));
document.close();
InputStream is = null;
OutputStream os = null;
PdfStamper stamper = null;
PdfReader pdfReader = null;
int pageNo;
float x, y, width, height;
is = new FileInputStream("MyFirstDynamic.pdf");
os = new FileOutputStream("MyFirstDynamic_pic.pdf");
pdfReader = new PdfReader(is);
// 读取模板文件
stamper = new PdfStamper(pdfReader, os)
//固定页码、图像大小及图像位置(左下角为 0 ,0)
pageNo = 1;
x = 100;
y = 700;
width = 50;
height = 50
//设置图像
PdfContentByte pdfContentByte = stamp.getOverContent(pageNo);
Image img = Image.getInstance(IMAGE_PATH);
// 图像宽高 (可根据预设控件大小)
img.scaleAbsolute(width, height);
//设置图片位置(以左下角为起点
img.setAbsolutePosition(x, y);
pdfContentByte.addImage(img);
stamper.close();
pdfReader.close()
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != stamper) {
try {
stamper.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (null != pdfReader) {
try {
pdfReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("图像填充执行完毕");
}
}
3、设置页面布局
iText可以创建新的PDF文档,也可以编辑已存在的文档。设置页面布局是创建PDF时的一个重要步骤,包括页面大小、页边距等。代码如下,
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.io.FileNotFoundException;
public class Main {
public static void main(String[] args) {
try {
//添加文本
//创建文档对象
Document document = new Document(PageSize.A4.rotate());//横向
document.setMargins(36, 0, 36, 0);//单位磅 1英寸=72磅
//实例化生成的文档
PdfWriter.getInstance(document, new FileOutputStream(
"MyFirstDynamic.pdf"));
//打开文档
document.open();
//在文档中添加文本内容
document.add(new Paragraph("Hello World! www.cjavapy.com"));
document.add(new Paragraph("*****************************************************"));
//3.镜像 水平页边距
document.setMarginMirroring(true);//镜像 水平页边距 交换 左右页边距
document.setMarginMirroringTopBottom(true);//镜像 竖直页边距 交换 顶部和底部页边距
//4.换页
//setPageSize 要在换页前使用 才可以作用于新的页面
document.setPageSize(PageSize.A4);
document.newPage();
document.add(new Paragraph("*****************************************************"));
document.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}