Java使用iTextPDF生成PDF文件的实现方法
作者:mangoBUPT 发布时间:2023-10-15 10:44:13
标签:Java,iTextPDF,PDF
iText介绍和说明
因为项目需要生成PDF文件,所以去找了一下能够生成PDF的Java工具,看到了iText可以说好评如潮。
如果你想通过java操作PDF文件,那么 iText 绝对是你的首选。
引入依赖
这里使用的是iText5
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
使用步骤简单介绍
快速入手iText拢共需要5步:
创建文档实例 Document
获取PdfWriter实例 (需要指定Document实例 和pdf 生成的磁盘路径)
打开文档
添加段落内容
关闭操作文档实例 (操作完成后必须执行文档关闭操作)
创建工具类
public class PdfUtil {
// 标准字体
public static Font NORMALFONT;
// 加粗字体
public static Font BOLDFONT;
//固定高
public static float fixedHeight = 27f;
//间距
public static int spacing = 5;
static {
try {
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
NORMALFONT = new Font(bfChinese, 10, Font.NORMAL);
BOLDFONT = new Font(bfChinese, 14, Font.BOLD);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Document createDocument() {
//生成pdf
Document document = new Document();
// 页面大小
Rectangle rectangle = new Rectangle(PageSize.A4);
// 页面背景颜色
rectangle.setBackgroundColor(BaseColor.WHITE);
document.setPageSize(rectangle);
// 页边距 左,右,上,下
document.setMargins(20, 20, 20, 20);
return document;
}
/**
* @param text 段落内容
* @return
*/
public static Paragraph createParagraph(String text, Font font) {
Paragraph elements = new Paragraph(text, font);
elements.setSpacingBefore(5);
elements.setSpacingAfter(5);
elements.setSpacingAfter(spacing);
return elements;
}
public static Font createFont(int fontNumber, int fontSize, BaseColor fontColor) {
//中文字体 ----不然中文会乱码
BaseFont bf = null;
try {
bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
return new Font(bf, fontNumber, fontSize, fontColor);
} catch (Exception e) {
e.printStackTrace();
}
return new Font(bf, Font.DEFAULTSIZE, Font.NORMAL, BaseColor.BLACK);
}
/**
* 隐藏表格边框线
*
* @param cell 单元格
*/
public static void disableBorderSide(PdfPCell cell) {
if (cell != null) {
cell.disableBorderSide(1);
cell.disableBorderSide(2);
cell.disableBorderSide(4);
cell.disableBorderSide(8);
}
}
/**
* 创建居中得单元格
*
* @return
*/
public static PdfPCell createCenterPdfPCell() {
PdfPCell cell = new PdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setFixedHeight(fixedHeight);
return cell;
}
/**
* 创建指定文字得单元格
*
* @param text
* @return
*/
public static PdfPCell createCenterPdfPCell(String text, int rowSpan, int colSpan, Font font) {
PdfPCell cell = new PdfPCell(new Paragraph(text, font));
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setFixedHeight(fixedHeight);
cell.setRowspan(rowSpan);
cell.setColspan(colSpan);
return cell;
}
/**
* @param len 表格列数
* @return
*/
public static PdfPTable createPdfPTable(int len) {
PdfPTable pdfPTable = new PdfPTable(len);
pdfPTable.setSpacingBefore(5);
pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);
return pdfPTable;
}
}
创建controller进行测试
/**
* @author Wang Guolong
* @version 1.0
* @date 2020/6/28 3:17 下午
*/
@RestController
@RequestMapping("/pdf")
public class PdfController {
@RequestMapping("/generate")
public Response generatePDF(HttpServletResponse response) throws Exception {
String filename = "测试pdf";
// 设置下载格式为pdf
response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8") + ".pdf");
OutputStream os = new BufferedOutputStream(response.getOutputStream());
// 1. Document document = new Document();
Document document = PdfUtil.createDocument();
// 2. 获取writer
PdfWriter.getInstance(document, os);
// 3. open()
document.open();
//设置字体
Font blackFont = PdfUtil.createFont(10, Font.NORMAL, BaseColor.BLACK);
Font blueFont = PdfUtil.createFont(10, Font.NORMAL, BaseColor.BLUE);
Font bigFont = PdfUtil.createFont(14, Font.NORMAL, BaseColor.BLACK);
Font littleFont = PdfUtil.createFont(10, Font.NORMAL, BaseColor.BLACK);
Paragraph title = PdfUtil.createParagraph("测试pdf", bigFont);
title.setAlignment(Element.ALIGN_CENTER);
// 4. 添加段落内容
document.add(title);
// 5. close()
document.close();
os.close();
return new Response().setContent("success");
}
}
运行结果
下载页面:
下载的文件效果:
来源:https://blog.csdn.net/MCmango/article/details/113933761
0
投稿
猜你喜欢
- 一、概述当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。一般情况下,我们知道View类有个View
- 详解Java中HashSet和TreeSet的区别1. HashSetHashSet有以下特点:不能保证元素的排列顺序,顺序有可能发生变化不
- 前言Queue 也是 Java 集合框架中定义的一种接口,直接继承自 Collection 接口。除了基本的 Collection 接口规定
- 在主Activity中:listview=(ListView)findViewById(R.id.listview);getData();/
- 补间可以实现两个图形之间颜色、形状、大小、位置等的线性变化。例如A...AB...BC...C,其中A、B、C是三幅图片,两个A的宽分别是1
- 1,compareTo(Object o)方法是java.lang.Comparable<T>接口中的方法,当需要对某个类的对象
- 一、整合原理二、导包(41个)1.hibernate(1)hibernate/lib/required(2)hibernate/lib/jp
- 今天接触了一下ToStringBuilder类,这里做一个备忘。ToStringBuilder在包 common-lang 中,主要用于一个
- 本文将带领大家使用基于JAX-RS REST风格的实现Jersey来上传文件到服务器制定的文件夹,如果是图片并读取显示出该图片。准备工作:准
- 前言在Java System#exit 无法退出程序的问题一文末尾提到优雅停机的一种实现方案,要借助Shutdown Hook进行实现,本文
- 本文实例讲述了C#实现把图片转换成二进制以及把二进制转换成图片的方法。分享给大家供大家参考,具体如下:private void button
- 生成1. 生成error 文件的路径:你可以通过参数设置-XX:ErrorFile=/path/hs_error%p.log, 默认是在Ja
- 介绍Java状态模式(State Pattern)是一种面向对象的设计模式,它将对象的状态封装成独立的状态对象,并将对象的行为与状态对象解耦
- 一、概念Tomcat的虚拟目录即在服务器上另选择一个webapps之外的文件夹存放项目文件,通过配置Tomcat的属性,实现访问。注:未配置
- 添加POM依赖:<!-- spring-boot-监控--><dependency> <group
- 单例模式的实现(5种)常用:饿汉式(线程安全,调用效率高,但是不能延时加载)懒汉式(线程安全,调用效率不高,可以延时加载)其他:双重检测锁式
- 1.理解全过程1.1.概述需要具备的知识Socket网络编程反向代理的理解平滑加权轮询算法的理解线程池的理解目的:实现Socket 集群服务
- Kotlin 基础教程之异常概述在Kotlin-null的处理里提到的NPE,它就是一个异常。而,异常是程序运行过程中出现的错误。在Kotl
- 1|0构造socket在【客户端/服务端】的通信模式中,客户端需要主动构造与服务器连接的 Socket,构造方法有以下几种重载形式:Sock
- 背景近期在调研一个开源仓库,于是将 代码 从github下载后,当IDEA sync依赖时出现Cannot resolve org.four