Java使用iTextPDF生成PDF文件的實(shí)現(xiàn)方法
iText介紹和說明
因?yàn)轫?xiàng)目需要生成PDF文件,所以去找了一下能夠生成PDF的Java工具,看到了iText可以說好評(píng)如潮。
如果你想通過java操作PDF文件,那么 iText 絕對(duì)是你的首選。
引入依賴
這里使用的是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步:
- 創(chuàng)建文檔實(shí)例 Document
- 獲取PdfWriter實(shí)例 (需要指定Document實(shí)例 和pdf 生成的磁盤路徑)
- 打開文檔
- 添加段落內(nèi)容
- 關(guān)閉操作文檔實(shí)例 (操作完成后必須執(zhí)行文檔關(guān)閉操作)
創(chuàng)建工具類
public class PdfUtil {
// 標(biāo)準(zhǔn)字體
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 段落內(nèi)容
* @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) {
//中文字體 ----不然中文會(huì)亂碼
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);
}
}
/**
* 創(chuàng)建居中得單元格
*
* @return
*/
public static PdfPCell createCenterPdfPCell() {
PdfPCell cell = new PdfPCell();
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setFixedHeight(fixedHeight);
return cell;
}
/**
* 創(chuàng)建指定文字得單元格
*
* @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 表格列數(shù)
* @return
*/
public static PdfPTable createPdfPTable(int len) {
PdfPTable pdfPTable = new PdfPTable(len);
pdfPTable.setSpacingBefore(5);
pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);
return pdfPTable;
}
}
創(chuàng)建controller進(jìn)行測試
/**
* @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";
// 設(shè)置下載格式為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();
//設(shè)置字體
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. 添加段落內(nèi)容
document.add(title);
// 5. close()
document.close();
os.close();
return new Response().setContent("success");
}
}
運(yùn)行結(jié)果
下載頁面:

下載的文件效果:

到此這篇關(guān)于Java使用iTextPDF生成PDF文件的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Java使用iTextPDF生成PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot讀取Resource目錄下文件的四種方式總結(jié)
在Spring?Boot項(xiàng)目中,經(jīng)常需要獲取resources目錄下的文件,這些文件可以包括配置文件、模板文件、靜態(tài)資源等,本文將介紹四種常用的方法來獲取resources目錄下的文件,需要的朋友可以參考下2023-08-08
webuploader在springMVC+jquery+Java開發(fā)環(huán)境下的大文件分片上傳的實(shí)例代碼
這篇文章主要介紹了webuploader在springMVC+jquery+Java開發(fā)環(huán)境下的大文件分片上傳的實(shí)例代碼,需要的朋友可以參考下2017-04-04
springboot實(shí)現(xiàn)異步任務(wù)
這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)異步任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05
Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式)
這篇文章主要介紹了Mybatis實(shí)現(xiàn)SQL映射的兩種方法(xml文件形式和注解形式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot接口防抖(防重復(fù)提交)的實(shí)現(xiàn)方法
SpringBoot接口防抖主要通過前端和后端兩種方式實(shí)現(xiàn),前端通過JavaScript控制用戶操作,后端通過攔截器、過濾器等機(jī)制控制請(qǐng)求頻率,文中介紹的非常詳細(xì),感興趣的可以了解一下2024-11-11
詳解Spring Boot 定時(shí)任務(wù)的實(shí)現(xiàn)方法
最近在用SpringBoot寫一個(gè)關(guān)于定時(shí)項(xiàng)目的時(shí)候遇到一個(gè)問題,下面小編把如何處理定時(shí)任務(wù)的解決思路分享給大家 ,需要的朋友參考下2017-05-05
JDBC數(shù)據(jù)源連接池配置及應(yīng)用
這篇文章主要介紹JDBC建立數(shù)據(jù)庫連接的兩種方式,使用配置數(shù)據(jù)源的方式連接數(shù)據(jù)庫,效率更高,推薦使用,希望能給大家做一個(gè)參考。2016-06-06

