Java使用itext pdf生成PDF文檔

Java使用itext pdf生成PDF文檔

Java使用itextpdf生成PDF文檔

在日常開發中,我們經常需要生成各種類型的文檔,其中PDF是最常用的一種格式。本文將介紹如何使用Java和iText庫生成包含中文內容的PDF文檔,并通過一個具體的示例來展示整個過程。

1. 引言

PDF(Portable Document Format)是一種廣泛使用的文件格式,它能夠保持文檔的原始格式和布局,適用于跨平臺共享和打印。在Java中,我們可以使用iText庫來創建和操作PDF文檔。本文將展示如何使用iText生成包含中文內容的PDF文檔,并確保中文字符正確顯示。

2. 準備工作

2.1 添加依賴

首先,我們需要在項目中添加iText庫的依賴。如果你使用的是Maven項目,可以在pom.xml文件中添加以下依賴:

Xml深色版本

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

此外,為了方便處理文件路徑和流操作,我們還可以引入Hutool庫:

Xml深色版本

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.31</version>
</dependency>

2.2 準備字體文件

由于PDF默認不支持中文字符,我們需要準備一個支持中文的字體文件,例如Dengl.ttf。將該字體文件放置在項目的合適位置,以便后續加載使用。

3. 代碼實現

3.1 創建PDF文檔

以下是生成包含中文內容的PDF文檔的完整代碼示例:

Java深色版本

package com.util.pdf;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;public class AstartPDFExport {public static void main(String[] args) {Document document = new Document();try {PdfWriter.getInstance(document, Files.newOutputStream(Paths.get("xxxx.pdf")));document.open();// 加載中文字體BaseFont bf = BaseFont.createFont("Font/Dengl.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);Font font = new Font(bf, 9);// 添加標題Font boldFont = new Font(bf, 12, Font.BOLD);Paragraph title = new Paragraph("一個小浪吳呀", boldFont);title.setAlignment(Element.ALIGN_CENTER);document.add(title);// 添加日期Paragraph date = new Paragraph("2025-06-18", font);date.setAlignment(Element.ALIGN_RIGHT);date.setSpacingAfter(10);document.add(date);// 創建表格PdfPTable table = new PdfPTable(2); // 表格有兩列table.setWidthPercentage(100);float[] columnWidths = {30f, 70f}; // 第一列占 30%,第二列占 70%table.setWidths(columnWidths);addCell(table, "一個小浪吳呀", "一個小浪吳呀", font);// 付款明細表格PdfPTable detailsTable = new PdfPTable(5); // 五列detailsTable.setWidthPercentage(100);float[] detailColumnWidths = getColumnWidths(5, 30f);detailsTable.setWidths(detailColumnWidths);// 表頭String[] headers = {" 明細", " 商品", " 價格", " 數量", " 備注"};int minimumHeight = 20;for (String header : headers) {PdfPCell headerCell = new PdfPCell(new Paragraph(header, font));headerCell.setMinimumHeight(minimumHeight);headerCell.setHorizontalAlignment(Element.ALIGN_LEFT);detailsTable.addCell(headerCell);}// 數據行PdfPCell cell;cell = new PdfPCell(new Paragraph(" 一個小浪吳呀", font));cell.setHorizontalAlignment(Element.ALIGN_LEFT);cell.setMinimumHeight(minimumHeight);detailsTable.addCell(cell);document.add(detailsTable);// 收款賬戶信息Paragraph accountInfo = new Paragraph("AAAA 一個小浪吳呀\n" +"BBBB 一個小浪吳呀\n" +"CCCC 一個小浪吳呀\n" +"DDDD 一個小浪吳呀\n" +"EEEE 一個小浪吳呀\n" +"FFFF 一個小浪吳呀", font);document.add(accountInfo);document.close();} catch (Exception e) {e.printStackTrace();}}private static void addCell(PdfPTable table, String label, String value, Font font) {PdfPCell cell = new PdfPCell(new Paragraph(label, font));cell.setPadding(5);table.addCell(cell);cell = new PdfPCell(new Paragraph(value, font));cell.setPadding(5);table.addCell(cell);}public static float[] getColumnWidths(int totalColumns, float firstColumnWidthPercent) {if (totalColumns < 1) throw new IllegalArgumentException("至少需要一列");float[] widths = new float[totalColumns];widths[0] = firstColumnWidthPercent;float remainingWidth = 100 - firstColumnWidthPercent;float otherColumnWidth = remainingWidth / (totalColumns - 1);for (int i = 1; i < totalColumns; i++) {widths[i] = otherColumnWidth;}return widths;}
}

3.2 運行結果

運行上述代碼后,將會生成一個名為xxxx.pdf的PDF文件。以下是生成的PDF文件的效果圖:

image-20250618154121338

4. 總結

本文介紹了如何使用Java和iText庫生成包含中文內容的PDF文檔。通過加載合適的中文字體文件,我們可以確保中文字符在PDF中正確顯示。希望本文對你有所幫助,如果你有任何問題或建議,請隨時留言交流。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85919.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用VBA將Word文檔修改為符合EPUB3標準規范的HTML文件

Word本身具有將docx文件轉換為HTML文件的功能&#xff0c;但是轉換出來的HTML文檔源代碼令人不忍卒讀&#xff0c;占用空間大&#xff0c;可維護性極差&#xff0c;如果想給HTML文檔加上點自定義交互行為&#xff0c;也不是一般的麻煩。如果文檔中包含注釋&#xff0c;對于Word…

開發語言本身只是提供了一種解決問題的工具

前言 你是否曾經注意到&#xff0c;在中國的軟件工程師日常工作中&#xff0c;他們使用的工具界面大多為英文&#xff1f;從代碼編輯器到開發框架文檔&#xff0c;再到錯誤信息提示框&#xff0c;英語似乎已經成為了計算機領域事實上的標準語言。那么為什么在全球化日益加深的…

2024計算機二級Python真題精講|第一套(易錯點分析)

一、選擇題 1.計算機完成一條指令所花費的時間稱為一個( )。 A.執行時序 B.執行速度 C.執行速度 D.指令周期 答案 D 一般把計算機完成一條指令所花費發時間稱為一個指令周期。指令周期越短&#xff0c;指令執行就越快。 2.順序程序不具有&#xff08; &#xf…

BGP路由反射器(RR)實驗詳解,結尾有詳細腳本

目錄 路由反射器基礎概念 實驗拓撲與設計 實驗配置步驟 配置驗證與排錯 實驗總結 完整配置命令集 路由反射器基礎概念 在傳統的IBGP網絡中&#xff0c;為了防止路由環路&#xff0c;BGP規定通過IBGP學到的路由不能再傳遞給其他IBGP對等體&#xff0c;這導致所有IBGP路由…

(aaai2025) SparseViT: 用于圖像篡改檢測的Spare-Coding Transformer

論文&#xff1a;(aaai2025) SparseViT: Nonsemantics-Centered, Parameter-Efficient Image Manipulation Localization through Spare-Coding Transformer 代碼&#xff1a;https://github.com/scu-zjz/SparseViT 這個論文研究的是圖像篡改檢測&#xff08;Image Manipulatio…

C#測試調用Markdig解析Markdown的基本用法

Markdig是.NET平臺的高性能開源Markdown處理器&#xff0c;嚴格遵循 CommonMark 標準&#xff0c;確保解析一致性&#xff0c;其核心優勢在于擴展性強&#xff1a;通過模塊化管道模型&#xff0c;可輕松添加自定義語法或修改現有邏輯。Markdig內置支持表格、任務列表、數學公式…

MySQL 主從同步完整配置示例

以下是 MySQL 主從同步完整配置示例&#xff08;基于 Linux 系統&#xff09;&#xff0c;包含主庫和從庫的配置步驟&#xff1a; 一、主庫&#xff08;Master&#xff09;配置 1. 安裝 MySQL&#xff08;以 CentOS 為例&#xff09; yum install -y mysql-server systemctl …

可信啟動與fTPM的交互驗證(概念驗證)

安全之安全(security)博客目錄導讀 目錄 一、組件構成 二、Arm FVP平臺PoC構建 三、在Armv8-A Foundation FVP上運行PoC 四、微調fTPM TA 可信啟動&#xff08;Measured Boot&#xff09;是通過密碼學方式度量啟動階段代碼及關鍵數據&#xff08;例如使用TPM芯片&#xff…

SQL Server基礎語句4:數據定義

文章目錄 一、數據庫與架構1.1 創建與刪除數據庫1.1.1 使用CREATE DATABASE語句創建數據庫1.1.2 使用DROP DATABASE語句刪除數據庫1.1.3 使用SSMS創建數據庫1.1.4 使用SSMS刪除數據庫 1.2 CREATE SCHEMA&#xff1a;創建新架構1.2.1 Schema簡介1.2.2 使用CREATE SCHEMA語句創建…

上門按摩app會員系統框架搭建

一、邏輯分析 用戶注冊與登錄&#xff1a; 新用戶需要提供基本信息&#xff0c;如姓名、手機號、郵箱等進行注冊。手機號用于接收驗證碼進行身份驗證&#xff0c;郵箱可用于密碼找回等功能。注冊成功后&#xff0c;用戶可以使用手機號 / 郵箱和密碼進行登錄。登錄時需要驗證用戶…

java項目打包成jar包,并給jmeter使用

1.新建項目 編寫代碼&#xff0c;導入必要的jar包&#xff0c; 右鍵點擊項目&#xff0c;然后export&#xff0c;選擇main函數&#xff0c; package utils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Random; …

【Qt開發】Qt音頻

Qt中&#xff0c;視頻播放的功能主要是通過 QMediaPlayer類和 QVideoWidget類來實現。在使用這兩個類時&#xff0c;需要在 .pro項目配置文件中添加對應的模塊——multimedia 和 multimediawidgets。 核心的API如下&#xff1a; 下面來模擬實現音頻文件的播放。 Widget::Widget…

橢球面上梯形面積的通用公式和圖幅公式

import numpy as np def ellipsoidal_trapezoid_area(a, b, phi1_deg, phi2_deg, delta_L_deg, is_map_sheetFalse): """ 計算橢球面上梯形面積的通用公式和圖幅公式 參數: a: 橢球長半軸&#xff08;米&#xff09; b: 橢球…

Pytest 入門:測試函數與測試類詳解

概述 在編寫自動化測試時,了解如何組織和管理測試用例是至關重要的。Pytest 提供了靈活的方式來定義測試函數和測試類,并支持多層次的設置(setup)和清理(teardown)機制,幫助你更高效地進行代碼驗證。本文將詳細介紹 測試函數 和 測試類 的概念、定義、注意點以及實際操…

大模型的部署簡單搭建

大模型的部署搭建 真的好久沒有進行博客的寫作了,原因,最近的自己生活有點小波動, 最近想想還是有空寫一篇文章,這篇文章的描述是學習的當下熱門AI 本期,介紹的也是AI相關的LLM(大語言模型) 這個好多人應該都是模糊的,包括我一開始沒有學習,就感覺牛逼的不行,今天我們親自部署實…

基于ssm英語學習交流平臺微信小程序源碼數據庫文檔

摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了英語學習交流平臺小程序的開發全過程。通過分析英語學習交流平臺小程序管理的不足&#xff0c;創建了一個計算機管理英語學習交流平臺小程序的方案。文章介紹了英…

華為云Flexus+DeepSeek征文|在Dify-LLM平臺中開發童話故事精靈工作流AI Agent

華為云FlexusDeepSeek征文&#xff5c;在Dify-LLM平臺中開發童話故事精靈工作流AI Agent &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 總有人間一兩風&#xff0c;填我十萬八千夢。 &#x1f680; 路漫漫其修遠兮&#xff0c;吾將上下而求索。 目錄…

從實踐出發談如何開發一款好用的RTMP播放器

近幾年&#xff0c;RTMP 播放器市場涌現出大量“宣傳型”產品。各種“低延遲”“不卡頓”“跨平臺”幾乎成為標配口號&#xff0c;宣傳文案看起來精彩紛呈&#xff0c;實際項目落地時卻屢屢暴露問題&#xff1a;啟動緩慢、黑屏、音畫不同步&#xff0c;甚至連基本的穩定播放都無…

STM32F1\F4\H7 CubeMx 定時器配置

目錄 1 定時器使用 1.1 CubeMX 配置 1.1.1 創建工程 1.1.2 時鐘配置 1.1.3 定時器配置 1.1.4 GPIO 配置 1.1.5 工程管理 1.2 keil5 配置 1.2.1 添加代碼 1.2.2 修改配置 1.2.3 下載程序 2 PWM使用 2.1 CubeMX 配置 2.1.1 PWM 配置 2.1.2 周期\頻率計算方法 2.2…

2025中科院2區SCI-狀態優化算法Status-based Optimization-附Matlab免費代碼

近年來&#xff0c;現實世界的優化問題變得越來越復雜&#xff0c;挑戰了傳統確定性方法的有效性。本文介紹了基于狀態的優化&#xff08;SBO&#xff09;&#xff0c;這是一種受人類對地位提升的渴望啟發的高效算法。通過模擬個人如何接近、學習或從高地位人物那里獲得資源&am…