Java 代码实例 13Java操作pdf的工具类itext
Posted 哪 吒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 代码实例 13Java操作pdf的工具类itext相关的知识,希望对你有一定的参考价值。
目录
一、什么是iText?
在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题。
二、引入jar
1、项目要使用iText,必须引入jar包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.6</version>
</dependency>
2、输出中文,还要引入下面itext-asian.jar
包
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
3、设置pdf文件密码,还要引入下面bcprov-jdk15on.jar
包
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.47</version>
</dependency>
三、iText常用类
com.itextpdf.text.Document
:这是iText库中最常用的类,它代表了一个 pdf 实例。如果你需要从零开始生成一个pdf文件,你需要使用这个Document
类。首先创建该实例,然后打开它,并添加内容,最后关闭该实例,即可生成一个pdf文件。com.itextpdf.text.Paragraph
:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等com.itextpdf.text.Chapter
:表示 pdf 的一个章节,他通过一个Paragraph
类型的标题和整形章数创建com.itextpdf.text.Font
:这个类包含了所有规范好的字体,包括family of font
,大小,样式和颜色,所有这些字体都被声明为静态常量com.itextpdf.text.List
:表示一个列表;com.itextpdf.text.Anchor
:表示一个锚,类似于html页面的链接。com.itextpdf.text.pdf.PdfWriter
:当这个PdfWriter
被添加到PdfDocument
后,所有添加到Document
的内容将会写入到与文件或网络关联的输出流中。com.itextpdf.text.pdf.PdfReader
:用于读取 pdf 文件;
四、生成PDF步骤
1、创建文档
Document document = new Document();
2、通过书写器将文档写入磁盘
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithColor.pdf"));
3、打开文档
document.open();
4、向文档中添加内容
document.add(new Paragraph("i love CSDN"));
5、关闭文档
document.close();
五、Java操作pdf的工具类itext
package com.neusoft.guor.itext;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfAction;
import com.itextpdf.text.pdf.PdfAnnotation;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfOutline;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfString;
import com.itextpdf.text.pdf.PdfTransition;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.DottedLineSeparator;
import com.itextpdf.text.pdf.draw.LineSeparator;
import com.itextpdf.text.pdf.draw.VerticalPositionMark;
/**
* itext PDF操作
*/
public class PDFInit
public static final String FILE_DIR = "E:\\\\guor\\\\itext\\\\";
public static final String const_JPG_JAVA = FILE_DIR + "java.jpg";
public static final String const_JPG_nginx = FILE_DIR + "nginx.jpg";
private static final String const_NEZHA = "哪吒编程";
private static final String const_NEZHA_PROGRAM = "获取Java学习资料请关注公众号:哪吒编程";
private static final String const_BIBIDONG = "比比东";
private static final String const_YUNYUN = "云韵";
private static final String const_BAIDU = "百度一下 你就知道";
private static final String const_BAIDU_URL = "https://www.baidu.com";
private static final String const_PAGE_FIRST = "第一页";
private static final String const_PAGE_SECOND = "第二页";
private static final String const_PAGE_THIRD = "第三页";
private static final String const_PAGE_FOUR = "第四页";
private static final String const_PAGE_FIVE = "第五页";
private static final String const_TITLE_FIRST = "一级标题";
private static final String const_TITLE_SECOND = "二级标题";
private static final String const_CONTENT = "内容";
// 普通中文字体
public static Font static_FONT_CHINESE = null;
// 超链字体
public static Font static_FONT_LINK = null;
private static void pdfFontInit() throws IOException, DocumentException
// 微软雅黑
BaseFont chinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// 普通中文字体
static_FONT_CHINESE = new Font(chinese, 12, Font.NORMAL);// Font.BOLD为加粗
// 超链字体
static_FONT_LINK = new Font(chinese, 12, Font.NORMAL, BaseColor.BLUE);
public static Document document;
public static void main(String[] args) throws Exception
pdfFontInit();
//createPDF();// 生成一个 PDF 文件
//createPDFWithColor();// 设置PDF的页面大小和背景颜色
//createPDFWithPassWord();// 创建带密码的PDF
//createPDFWithNewPages();// 为PDF添加页
//createPDFWithWaterMark();// 为PDF文件添加水印,背景图
//createPDFWithContent();//插入块Chunk, 内容Phrase, 段落Paragraph, List
//createPDFWithExtraContent();//插入Anchor, Image, Chapter, Section
//draw();//画图
//createPDFWithAlignment();//设置段落
//createPDFToDeletePage();//删除 page
//insertPage();// 插入 page
//splitPDF();//分割 page
//mergePDF();// 合并 PDF 文件
//sortpage();// 排序page
//setHeaderFooter();// 页眉,页脚
//addColumnText();// 左右文字
//setView();// 文档视图
//pdfToZip();// 压缩PDF到Zip
addAnnotation();// 注释
/**
* 创建一个 PDF 文件,并添加文本
*/
public static void createPDF() throws IOException, DocumentException
// 实例化 document
document = new Document();
// 生成文件
String path = FILE_DIR + "createPDF.pdf";
File file = new File(path);
if(!file.exists())
file.createNewFile();
PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDF.pdf"));
// 打开 document
document.open();
// 添加文本 此处无法写入中文 TODO
document.add(new Paragraph(const_NEZHA));
document.add(new Paragraph(const_NEZHA, static_FONT_CHINESE));
// 关闭 document
document.close();
/**
* 创建PDF文件,修改文件的属性
*/
public static void createPDFWithColor() throws FileNotFoundException, DocumentException
// 页面大小
Rectangle rect = new Rectangle(PageSize.A5.rotate());
// 页面背景色
rect.setBackgroundColor(BaseColor.YELLOW);
document = new Document(rect);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithColor.pdf"));
// PDF版本(默认1.4)
writer.setPdfVersion(PdfWriter.VERSION_1_6);
// 文档属性
document.addAuthor(const_NEZHA);
document.addTitle("我的第一个pdf");
// 页边空白
document.setMargins(10, 10, 10, 10);
// 打开
document.open();
document.add(new Paragraph(const_NEZHA, static_FONT_CHINESE));
// 关闭
document.close();
/**
* 创建带密码的PDF
*/
public static void createPDFWithPassWord() throws FileNotFoundException, DocumentException
// 页面大小
Rectangle rect = new Rectangle(PageSize.A5.rotate());
// 页面背景色
rect.setBackgroundColor(BaseColor.YELLOW);
document = new Document(rect);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFWithPassWord.pdf"));
// userPassword打开密码:"123"
// ownerPassword编辑密码: "123456"
writer.setEncryption("123".getBytes(), "123456".getBytes(), PdfWriter.ALLOW_SCREENREADERS, PdfWriter.STANDARD_ENCRYPTION_128);
document.open();
document.add(new Paragraph(const_NEZHA, static_FONT_CHINESE));
document.close();
/**
* 为PDF添加页
*/
public static void createPDFWithNewPages() throws FileNotFoundException, DocumentException
document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(FILE_DIR + "createPDFAddNewPages.pdf"));
document.open();
document.add(new Paragraph(const_PAGE_FIRST, static_FONT_CHINESE));
document.newPage();
document.add(new Paragraph(const_PAGE_SECOND, static_FONT_CHINESE));
writer.setPageEmpty(true);
document.newPage();
document.add(new Paragraph(const_PAGE_THIRD, static_FONT_CHINESE));
document.close();
/**
* 为PDF文件添加水印,背景图
*/
public static void createPDFWithWaterMark() throws IOException, DocumentException
FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithWaterMark.pdf");
document = new Document();
PdfWriter.getInstance(document, out);
document.open();
document.add(new Paragraph(const_PAGE_FIRST, static_FONT_CHINESE));
document.newPage();
document.add(new Paragraph(const_PAGE_SECOND, static_FONT_CHINESE));
document.newPage();
document.add(new Paragraph(const_PAGE_THIRD, static_FONT_CHINESE));
document.close();
// 图片水印
PdfReader reader = new PdfReader(FILE_DIR + "createPDFWithWaterMark.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(FILE_DIR + "createPDFWithWaterMark2.pdf"));
Image img = Image.getInstance(const_JPG_JAVA);
img.setAbsolutePosition(200, 200);
PdfContentByte under = stamp.getUnderContent(1);
under.addImage(img);
// 文字水印
PdfContentByte over = stamp.getOverContent(2);
// 加载字库来完成对字体的创建
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED);
over.beginText();
// 设置颜色 默认为蓝色
over.setColorFill(BaseColor.RED);
// 设置字体字号
over.setFontAndSize(bf, 50);
// 设置起始位置
over.setTextMatrix(30, 30);
// 开始写入水印 左-下-倾斜度
over.showTextAligned(Element.ALIGN_LEFT, "nezha", 245, 400, 30);
over.endText();
// 背景图
Image img2 = Image.getInstance(const_JPG_NGINX);
img2.setAbsolutePosition(0, 0);
PdfContentByte under2 = stamp.getUnderContent(3);
under2.addImage(img2);
stamp.close();
reader.close();
/**
* 插入Chunk, Phrase, Paragraph, List
* Chunk : 块,PDF文档中描述的最小原子元素
* Phrase : 短语,Chunk的集合
* Paragraph : 段落,一个有序的Phrase集合
*/
public static void createPDFWithContent() throws DocumentException, FileNotFoundException
FileOutputStream out = new FileOutputStream(FILE_DIR + "createPDFWithContent.pdf");
document = new Document();
PdfWriter.getInstance(document, out);
document.open();
// 添加块
document.add(new Chunk(const_NEZHA, static_FONT_CHINESE));
Font font = new Font(Font.FontFamily.HELVETICA, 8, Font.BOLD, BaseColor.WHITE);
Chunk id = new Chunk("springboot", font);
id.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.5f);
id.setTextRise(7);
document.add(id);
Font font2 = new Font(Font.FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE);
Chunk id2 = new Chunk("springcloud", font2);
id2.setBackground(BaseColor.BLACK, 1f, 0.5f, 1f, 1.以上是关于Java 代码实例 13Java操作pdf的工具类itext的主要内容,如果未能解决你的问题,请参考以下文章
从《Java核心技术卷Ⅱ》看Java操作pdf的工具类itext