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…