首页 > 编程语言 >iText PDF Java API 入门介绍教程

iText PDF Java API 入门介绍教程

时间:2024-02-03 23:27:08浏览次数:30  
标签:java itextpdf iText API io import Java document com

 

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

 参考文档:iText PDF Java API 入门介绍教程-CJavaPy

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

参考文档:iText PDF Java API 入门介绍教程-CJavaPy

标签:java,itextpdf,iText,API,io,import,Java,document,com
From: https://www.cnblogs.com/tinyblog/p/18005386

相关文章

  • Java浅谈BufferedReader
    既然Scanner简单好用,为什么要用BufferedReader呢?主要原因是面对大量的读入显得较慢且不安全,这里体现在三个方面,一方面是解析的问题,好用意味着封装的更复杂,一拖n的接口解析起来会慢;另一方面是缓冲区的问题,Scanner缓冲区小1024B,直面物理介质的机会更大,众所周知,IO时间在大数据面前......
  • java面向对象基础语法之成员变量和局部变量的区别(详细)
    一:概述在面向对象一开始的学习中,对一些其中基础语法的了解和熟悉非常的重要,有助于更深入的去学习面向对象的知识。在这里具体的说明一下成员变量和局部变量的区别。二:具体说明<1>java中变量的分类<2>成员变量和局部变量的定义说明。成员变量:成员变量分为静态变量(类变量)和实例变量......
  • 【Java基础】BlockingQueue及其子类
    ArrayBlockingQueue(数组实现的有界阻塞队列)特点:基于数组的有界阻塞队列,按先进先出(FIFO)原则排序元素。可以选择公平性(即按线程等待的先后顺序访问队列)或非公平性,默认是非公平的。用途:适用于需要固定大小的队列场景。LinkedBlockingQueue(链表实现的阻塞队列)特点:基于链表的可选边界(有......
  • 记录--实现一个鼠标框选的功能,要怎么实现和设计 api?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助前言前两年在一家做电商的公司做了一个需求:鼠标框选商品卡片,开始拖拽的时候合成一个然后改变位置,页面上有几千个所以还要结合虚拟列表。当时不知道怎么做,就在github上到处找现成的库,最后找到了react-selectable......
  • 地铁最优线路算法的求解(三)-深度优先搜索java实现
    多的不说,showmethecode,先上一段java代码1/*2*深度优先算法(DFS)算法生成所有可能路径3*startId:出发站4*endId:到达站5*graph:辅助邻接矩阵,若99站与35站相邻,6*则graph[35][99]=1,graph[99][35]=17*8*......
  • Java套接字编程学习
    一、前言Java套接字编程用于不同JRE上运行的应用程序之间进行通信,可以是面向连接或无连接的。Socket类和ServerSocket类用于面向连接的套接字编程,DatagramSocket类和DatagramPacket类用于无连接的套接字编程。我们需要根据服务器IP地址和端口号来区分套接字。Socket类用于客户端和......
  • Java生成微信小程序二维码的方式有哪些?
    大家好我是咕噜美乐蒂,很高兴又见面啦!今天我们来谈一下如何使用Java生成微信小程序二维码,有哪些方式方法呢?生成微信小程序二维码是开发微信小程序时的常见需求之一。在Java中,我们可以使用多种方式来生成微信小程序二维码。本文将为您介绍几种常用的方式。一、使用第三方库1.zxingzxi......
  • linux的java服务启动,停止sh脚本
    #!/bin/bash#######################################################Copyright2019PhamNgocHoai##LicensedundertheApacheLicense,Version2.0(the"License");#youmaynotusethisfileexceptincompliancewiththeLicense.#Youmay......
  • Java 中的Map集合
    Map1.Map接口中常用的方法importjava.util.Collection;importjava.util.HashMap;importjava.util.Map;/*java.util.Map接口中常用的方法:Map和Collection没有继承关系Map集合以key和value的方式存储数据:键值对key和value都是引用数据类型key和value都是存储对象的地......
  • 如何在 JavaScript 中验证 URL
    如何在JavaScript中验证URL统一资源定位符URL(UniformResourceLocator)引导你进入互联网上的一个页面或文件。URL是互联网上事物的地址。所有有效的URL都遵循某些模式。因此,如果你知道这些模式,你就可以在你的程序中确定一个URL是否有效,并给出反馈、抛出一个错误,等等。......