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(); } } }