iText PDF Java API 入门介绍教程

iText是一个非常强大的Java库,用于创建和操作PDF文档。可以在Java应用程序中生成PDF文档,包括文本、表格、图像等丰富的内容。iText具有强大的功能,如PDF/A、数字签名、加密等,适用于复杂的PDF处理需求。iText是一个非常灵活和强大的库,可以根据具体需求进行大量的定制和扩展。

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

推荐阅读
cjavapy编程之路首页