maven依赖如下:

 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>

输出中文,还要引入下面itext-asian.jar包:

<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包:

<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.54</version>
</dependency>

iText常用类

  1. com.itextpdf.text.Document:这是iText库中最常用的类,它代表了一个pdf实例。如果你需要从零开始生成一个PDF文件,你需要使用这个Document类。首先创建(new)该实例,然后打开(open)它,并添加(add)内容,最后关闭(close)该实例,即可生成一个pdf文件。
  2. com.itextpdf.text.Paragraph:表示一个缩进的文本段落,在段落中,你可以设置对齐方式,缩进,段落前后间隔等
  3. com.itextpdf.text.Chapter:表示PDF的一个章节,他通过一个Paragraph类型的标题和整形章数创建
  4. com.itextpdf.text.Font:这个类包含了所有规范好的字体,包括family of font,大小,样式和颜色,所有这些字体都被声明为静态常量
  5. com.itextpdf.text.List:表示一个列表;
  6. com.itextpdf.text.Anchor:表示一个锚,类似于HTML页面的链接。
  7. com.itextpdf.text.pdf.PdfWriter:当这个PdfWriter被添加到PdfDocument后,所有添加到Document的内容将会写入到与文件或网络关联的输出流中。
    com.itextpdf.text.pdf.PdfReader:用于读取PDF文件;

PDF中创建表格

public static void main(String[] args) throws DocumentException, FileNotFoundException {//创建文件Document document = new Document();//建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test4.pdf"));//打开文件document.open();//添加内容document.add(new Paragraph("HD content here"));// 3列的表.PdfPTable table = new PdfPTable(3); table.setWidthPercentage(100); // 宽度100%填充table.setSpacingBefore(10f); // 前间距table.setSpacingAfter(10f); // 后间距List<PdfPRow> listRow = table.getRows();//设置列宽float[] columnWidths = { 1f, 2f, 3f };table.setWidths(columnWidths);//行1PdfPCell cells1[]= new PdfPCell[3];PdfPRow row1 = new PdfPRow(cells1);//单元格cells1[0] = new PdfPCell(new Paragraph("111"));//单元格内容cells1[0].setBorderColor(BaseColor.BLUE);//边框验证cells1[0].setPaddingLeft(20);//左填充20cells1[0].setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中cells1[0].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中cells1[1] = new PdfPCell(new Paragraph("222"));cells1[2] = new PdfPCell(new Paragraph("333"));//行2PdfPCell cells2[]= new PdfPCell[3];PdfPRow row2 = new PdfPRow(cells2);cells2[0] = new PdfPCell(new Paragraph("444"));//把第一行添加到集合listRow.add(row1);listRow.add(row2);//把表格添加到文件中document.add(table);//关闭文档document.close();//关闭书写器writer.close();}

给PDF文件设置文件属性

public static void main(String[] args) throws FileNotFoundException, DocumentException {//创建文件Document document = new Document();//建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test2.pdf"));//打开文件document.open();//添加内容document.add(new Paragraph("Some content here"));//设置属性//标题document.addTitle("this is a title");//作者document.addAuthor("H__D");//主题document.addSubject("this is subject");//关键字document.addKeywords("Keywords");//创建时间document.addCreationDate();//应用程序document.addCreator("hd.com");//关闭文档document.close();//关闭书写器writer.close();}

PDF中添加图片

public static void main(String[] args) throws DocumentException, IOException {//创建文件Document document = new Document();//建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test3.pdf"));//打开文件document.open();//添加内容document.add(new Paragraph("HD content here"));//图片1Image image1 = Image.getInstance("C:/Users/H__D/Desktop/IMG_0109.JPG");//设置图片位置的x轴和y周image1.setAbsolutePosition(100f, 550f);//设置图片的宽度和高度image1.scaleAbsolute(200, 200);//将图片1添加到pdf文件中document.add(image1);//图片2Image image2 = Image.getInstance(new URL("http://static.cnblogs.com/images/adminlogo.gif"));//将图片2添加到pdf文件中document.add(image2);//关闭文档document.close();//关闭书写器writer.close();}

PDF中创建列表

 public static void main(String[] args) throws DocumentException, FileNotFoundException {//创建文件Document document = new Document();//建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test5.pdf"));//打开文件document.open();//添加内容document.add(new Paragraph("HD content here"));//添加有序列表List orderedList = new List(List.ORDERED);orderedList.add(new ListItem("Item one"));orderedList.add(new ListItem("Item two"));orderedList.add(new ListItem("Item three"));document.add(orderedList);//关闭文档document.close();//关闭书写器writer.close();}

PDF中设置样式/格式化输出,输出中文内容,必须引入itext-asian.jar

public static void main(String[] args) throws DocumentException, IOException {//创建文件Document document = new Document();//建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test6.pdf"));//打开文件document.open();//中文字体,解决中文不能显示问题BaseFont bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);//蓝色字体Font blueFont = new Font(bfChinese,12, Font.NORMAL);blueFont.setColor(BaseColor.BLUE);//段落文本Paragraph paragraphBlue = new Paragraph("paragraphOne blue front", blueFont);document.add(paragraphBlue);//绿色字体Font greenFont = new Font(bfChinese,12, Font.NORMAL);greenFont.setColor(BaseColor.GREEN);//创建章节Paragraph chapterTitle = new Paragraph("段落标题xxxx", greenFont);Chapter chapter1 = new Chapter(chapterTitle, 1);chapter1.setNumberDepth(0);Paragraph sectionTitle = new Paragraph("部分标题", greenFont);Section section1 = chapter1.addSection(sectionTitle);Paragraph sectionContent = new Paragraph("部分内容", blueFont);section1.add(sectionContent);//将章节添加到文章中document.add(chapter1);//关闭文档document.close();//关闭书写器writer.close();}

给PDF文件设置密码,需要引入bcprov-jdk15on.jar包

public static void main(String[] args) throws DocumentException, IOException {// 创建文件Document document = new Document();// 建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test8.pdf"));//用户密码String userPassword = "123456";//拥有者密码String ownerPassword = "hd";writer.setEncryption(userPassword.getBytes(), ownerPassword.getBytes(), PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128);// 打开文件document.open();//添加内容document.add(new Paragraph("password !!!!"));// 关闭文档document.close();// 关闭书写器writer.close();}

给PDF文件设置权限

public static void main(String[] args) throws DocumentException, IOException {// 创建文件Document document = new Document();// 建立一个书写器PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/Users/H__D/Desktop/test9.pdf"));// 只读权限writer.setEncryption("".getBytes(), "".getBytes(), PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);// 打开文件document.open();// 添加内容document.add(new Paragraph("password !!!!"));// 关闭文档document.close();// 关闭书写器writer.close();}

读取/修改已有的PDF文件

public static void main(String[] args) throws DocumentException, IOException {//读取pdf文件PdfReader pdfReader = new PdfReader("C:/Users/H__D/Desktop/test1.pdf");//修改器PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("C:/Users/H__D/Desktop/test10.pdf"));Image image = Image.getInstance("C:/Users/H__D/Desktop/IMG_0109.JPG");image.scaleAbsolute(50, 50);image.setAbsolutePosition(0, 700);for(int i=1; i<= pdfReader.getNumberOfPages(); i++){PdfContentByte content = pdfStamper.getUnderContent(i);content.addImage(image);}pdfStamper.close();}

pdf工具类

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPRow;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.compress.utils.IOUtils;/*** @author sxyuser* @description pdf导出工具类* @date 2022/5/11 9:22:31*/
@Slf4j
public class PdfUtil {private PdfUtil() {}// 生成pdf文件public static void createPdf(File filePath, PdfPTable table)throws DocumentException, FileNotFoundException {log.error("filePath----------{}", filePath.getPath());// 1.创建一个文档实例 设置文档纸张为A4Document document = new Document(PageSize.A4);// 2.创建PdfWriter对象,设置pdf生成路径PdfWriter instance = PdfWriter.getInstance(document, new FileOutputStream(filePath));// 3.打开文档进行我们需要的操作document.open();document.add(table);// 5.关闭文档document.close();instance.close();}/*** 生成表格的一行** @param cell1 第一列* @param cell2 第二列* @return 行数据*/public static PdfPRow pdfRow(PdfPCell cell1, PdfPCell cell2) {PdfPCell[] pdfCell = new PdfPCell[2];if (cell2 == null) {// 合并列cell1.setColspan(2);}// 将数据放入第一列pdfCell[0] = cell1;// 将数据放入第二列pdfCell[1] = cell2;return new PdfPRow(pdfCell);}/*** 生成表格** @param columns 表格的列数* @param columnWidths 列宽* @return 表格实例*/public static PdfPTable doCreateTable(int columns, float[] columnWidths)throws DocumentException {// 1.生成一个两列的表格PdfPTable table = new PdfPTable(columns);// 表格占比100%table.setWidthPercentage(100);// 设置前后距离table.setSpacingBefore(20f);table.setSpacingAfter(20f);table.setWidths(columnWidths);return table;}/*** 生成一个有特性的单元格** @param cellContent 单元格中的数据* @return 单元格*/public static PdfPCell createSpecialCell(String cellContent) {BaseFont baseFont = null;try {// 设置支持中文baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);} catch (Exception e) {log.error(e.getMessage());}// 设置字体Font font = new Font(baseFont, 12, Font.NORMAL);Paragraph phrase = new Paragraph(cellContent, font);PdfPCell cell = new PdfPCell(phrase);// 内边距:10cell.setPaddingLeft(10);// 水平居左cell.setHorizontalAlignment(Element.ALIGN_LEFT);// 单元格内容垂直居中cell.setVerticalAlignment(Element.ALIGN_MIDDLE);return cell;}/*** 下载文件** @param filePath 文件地址* @param response 前台响应*/public static void downLoadFile(File filePath, HttpServletResponse response) {// 重置响应response.reset();try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream())) {log.error("downLoadFile--------{}", filePath);response.setCharacterEncoding("UTF-8");response.setContentType("text/html;chartSet=UTF-8");response.setContentType("application/pdf");response.addHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("模板.pdf", StandardCharsets.UTF_8));// 对流进行拷贝IOUtils.copy(bis, bos);// 关闭流response.getOutputStream().flush();IOUtils.closeQuietly(bis);IOUtils.closeQuietly(bos);} catch (Exception e) {log.error("【下载文件】下载文件失败,失败信息为{}", e.getMessage());}}/*** 递归删除目录下的所有文件及子目录下所有文件** @param file 文件*/public static void deleteFile(File file) {// 判断指定路径的文件或文件是否存在if (!file.exists()) {return;}// 返回当前路径下的所有文件和文件夹名称File[] files = file.listFiles();// 遍历所有文件及文件夹assert files != null;for (File f : files) {// 如果是文件就删除if (f.isFile()) {// 删除文件f.delete();} else {// 如果是目录,则调用递归方法deleteFile(f);}}}
}

工具类的使用

  // 获取文件路径File filePath = new ClassPathResource("static/file/模板.pdf").getFile();// 创建一个两列的表格PdfPTable table = doCreateTable(2, new float[] {1f, 1f});// 查询的集合数据,循环遍历数据infoArrayList.forEach(e -> {// 获得表格的行的集合ArrayList<PdfPRow> rows = table.getRows();//第一行rows.add(pdfRow(createSpecialCell(e.getTitle()), null));// 第二行rows.add(pdfRow(createSpecialCell(e.getChoice1()), createSpecialCell(e.getChoice2())));}});// 创建pdfPdfUtil.createPdf(filePath, table);

效果图

itext 生成 PDF相关推荐

  1. Java使用itext生成Pdf

    Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...

  2. java 生成pdf itext_使用Java组件itext 生成pdf介绍

    iText是一个能够快速产生PDF文件的Java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用iText与 ...

  3. java itext 设计器_使用Java组件itext 生成pdf的介绍

    [IT168 技术]iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给 ...

  4. 利用velocity模板以及itext生成pdf

    利用velocity模板以及itext生成pdf 我整理的源码:http://download.csdn.net/download/u012174571/8748897 首先是velocity的使用: ...

  5. java生成pdf加密_java使用iText 生成PDF全攻略(表格,加密)

    java使用iText 生成PDF全攻略,包括创建文档,设置字体,添加表格(PdfPTable),创建新页(newPage),设置布局,加密 主要使用的jar包: itextpdf-5.4.2.jar ...

  6. itext生成pdf间距_使用itext生成pdf

    在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过 在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到 ...

  7. itext 生成pdf 输出特殊符号_JAVA提取PDF内容及转换PDF为图片

    今天给大家分享一下使用java处理pdf文件,包括提取pdf文本.提取pdf图片.pdf转图片三种操作. 主要使用到的库是apache开源的pdfbox,目前最新版本是2.0.x,网上的资料一般是1. ...

  8. java itext 横线,Java itext生成pdf设置下划线,,package cn.o

    Java itext生成pdf设置下划线,,package cn.opackage cn.outofmemory.example.itextpdf;import com.itextpdf.text.C ...

  9. iText生成pdf中文字体

    用iText生成pdf时,内容有中文的时候用到中文字体. 直接使用iTextAsian.jar中的字体 BaseFont base = BaseFont.createFont("STSong ...

  10. java pdf 首行缩进_java使用iText生成pdf文档的对齐方式

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

最新文章

  1. 部分人说 Java 的性能已经达到甚至超过 C++,是真的吗?
  2. iOS进阶之底层原理-isa与对象
  3. Exception经验之谈,万万没想到被很多团队采纳!
  4. 修改otrs notification master邮件通知地址和名称
  5. Ubuntu 安装LAMP ...
  6. L - 土拨鼠掷鼬鼠(二分查找)
  7. YbtOJ-毒瘤染色【LCT】
  8. codeforces 962E Byteland, Berland and Disputed Cities 最小生成树变形
  9. AIX6.1平台11.2.0.3RAC 实施手册
  10. 科技资讯杂志 科技资讯杂志社科技资讯编辑部2022年第17期目录
  11. 美团旅行销售绩效系统研发实践
  12. PhotoShop - 建立剪切蒙版
  13. 计算机桌面上的照片转pdf免费,有没有免费将图片转PDF的工具?
  14. 详解ARM的AMBA设备中的DMA设备(Linux驱动之DMA)
  15. 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法代码讲解+资源打包下载】...
  16. 关于5G,四大运营商说......
  17. 在线CAD平台,MxCAD云图 2021.01.20更新,在线CAD软件
  18. 淘宝网【附源码-仅学习】
  19. 初识 CGI,CGI 简识
  20. 3.25 使用钢笔工具选择平滑形状的叶子 [原创Ps教程]

热门文章

  1. win7 企业版 kms 批量激活 简单配置.
  2. 【测评】思维导图的战争!手绘和数字思维导图哪个更实用?
  3. 2010 模板下载 罗斯文_纯干货!速卖通运费模板的设置技巧!
  4. 内外盘分仓跟单系统源码CTP程序化交易系统源码
  5. android 支付宝手势密码锁,Android仿支付宝手势密码解锁功能
  6. ExoPlayer的监听事件(Kotlin)
  7. smartsvn基本操作
  8. QTTabBar+Office Tab+Quicker 助力高效使用Windows办公
  9. PDF文件切成图片然后拼接成长图
  10. Android APK反编译技巧全讲解