当前位置: 首页 > news >正文

【Java】Java生成PDF工具类

Java生成PDF工具类

一、介绍

Java生成PDF工具类是一个非常实用的工具类,可以帮助我们以程序化的方式生成PDF文件。通过该工具类,我们可以向PDF文件中添加文字、图片、表格等多种内容,并且可以进行格式化和样式设置。Java生成PDF工具类常用于生成报表、发票、合同等文档。

二、PDF生成的基本原理

在Java生成PDF文件时,我们通常是通过Apache PDFBox或iText等相应的开源库来实现的。在使用这些库生成PDF文件时,实际上是在Java代码中定义PDF文档的各种元素,如文字、图片、表格等,然后把这些元素组装成PDF页面,并最终输出为PDF文件。所以,生成PDF文件的过程可以归纳为以下几个步骤:

1、定义一个空白的PDF文档

PDDocument document = new PDDocument();
在代码中创建一个空白的PDF文档。

2、定义样式和格式

PDPageContentStream contentStream = new PDPageContentStream(document, page);
PDFont font = PDType1Font.HELVETICA_BOLD;
contentStream.beginText();
contentStream.setFont(font, fontSize);
contentStream.setLeading(textLeading);
contentStream.newLineAtOffset(x, y);
在代码中定义文本样式和格式,如字体、字号、颜色等。

3、添加页面元素

contentStream.showText(“Hello World”);
contentStream.close();
在代码中添加文本、图片、表格等页面元素。

4、保存PDF文件

document.save(“output.pdf”);
document.close();
在代码中保存PDF文档并关闭资源。

三、Java生成PDF工具类的应用

1、添加文本

PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
contentStream.newLineAtOffset(100, 700);
contentStream.showText(“Hello World”);
contentStream.endText();
contentStream.close();
通过定义文本样式和格式,然后在页面上添加文字。

2、添加图片

PDImageXObject image = PDImageXObject.createFromFile(“image.jpg”, document);
contentStream.drawImage(image, 100, 500);
在代码中添加图片元素到PDF文档中。

3、添加表格

float margin = 50;
float yStartNewPage = page.getMediaBox().getHeight() - (2 * margin);
float tableWidth = page.getMediaBox().getWidth() - (2 * margin);
boolean drawContent = true;
float yStart = yStartNewPage;
float bottomMargin = 70;
BaseTable table = new BaseTable(yStart, yStartNewPage, bottomMargin, tableWidth, margin, document, page, true, drawContent);
Row headerRow = table.createRow(15f);
Cell cell = headerRow.createCell(100, “Header Text”);
cell.setFontSize(12);
table.addHeaderRow(headerRow);
table.draw();
在代码中添加表格元素到PDF文档中,首先通过定义表格的宽度、边距等属性,然后创建表格的头部并设置样式和格式,最后在页面上绘制表格。

4、设置样式和格式

PDPageContentStream contentStream = new PDPageContentStream(document, page);
PDFont font = PDType1Font.HELVETICA_BOLD;
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.setLeading(14.5f);
contentStream.newLineAtOffset(100, 700);
contentStream.showText(“Sample Text”);
contentStream.endText();
contentStream.close();
在代码中根据需求设置文本、图片、表格等元素的样式和格式。

5、保存PDF文件

document.save(“output.pdf”);
document.close();
在代码中保存PDF生成结果。

总结
Java生成PDF工具类是一个非常实用的工具类,可以方便地生成各种类型的PDF文件。通过本文的介绍,我们可以了解到Java生成PDF文件的基本原理和应用场景,并且学会了如何通过Apache PDFBox或iText等开源库来实现Java生成PDF的方法。

相关文章:

【Java】Java生成PDF工具类

Java生成PDF工具类 一、介绍 Java生成PDF工具类是一个非常实用的工具类,可以帮助我们以程序化的方式生成PDF文件。通过该工具类,我们可以向PDF文件中添加文字、图片、表格等多种内容,并且可以进行格式化和样式设置。Java生成PDF工具类常用于…...

STL map,插入和查找的一些注意事项

01、前言(废话) C 的 std::map 容器中插入键值对主要有myMap(std::make_pair(key value)) ,它们的区别你了解吗? auto it myMap,find(key) 和 auto value myMap[key] 都可以用于在 C 的 std::map 容器中查找键对应的值&#xff…...

基于springboot+vue的客户关系管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

【Java 基础篇】Java Stream 流详解

Java Stream(流)是Java 8引入的一个强大的新特性,用于处理集合数据。它提供了一种更简洁、更灵活的方式来操作数据,可以大大提高代码的可读性和可维护性。本文将详细介绍Java Stream流的概念、用法和一些常见操作。 什么是Stream…...

题解:ABC321A - 321-like Checker

题解:ABC321A - 321-like Checker 题目 链接:Atcoder。 链接:洛谷。 难度 算法难度:C。 思维难度:C。 调码难度:C。 综合评价:见洛谷链接。 算法 模拟。 思路 输入n后从后往前依次抽…...

Zig实现Hello World

1. 什么是zig 先列出一段官方的介绍: Zig is a general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software. 大概意思就是说: Zig是一种通用编程语言和工具链,用于维护健壮、最佳和可重用的软件。 官…...

Vue3+element-plus切换标签页时数据保留问题

记录一次切换标签页缓存失效问题,注册路由时name不一致可能会导致缓存失效...

前端教程-TypeScript

官网 TypeScript官网 TypeScript中文官网 视频教程 尚硅谷TypeScript教程(李立超老师TS新课)...

代码随想录算法训练营 动态规划part06

一、完全背包 卡哥的总结,还挺全代码随想录 (programmercarl.com) 二、零钱兑换 II 518. 零钱兑换 II - 力扣(LeetCode) 被选物品之间不需要满足特定关系,只需要选择物品,以达到「全局最优」或者「特定状态」即可。 …...

能跑通的mmdet3d版本

能跑通的mmdet3d版本 1.0版本 2.0版本 注意:mmdet和mmdet3d简单地运行 pip install -v -e . 将会安装最低运行要求的版本。不要pip install -r requirements.txt安装依赖项,否则依赖库版本不对。 运行mmdet3d时,注释掉以上代码。...

SD-MTSP:萤火虫算法(FA)求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、萤火虫算法(FA)简介 萤火虫算法(Firefly Algorithm,FA)是Yang等人于2009年提出的一种仿生优化算法。 参考文献:田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97. 二、单仓…...

bootstrapv4轮播图去除两侧阴影及线框的方法

文章目录 前言一、前提条件:二、bootstrap文档组件展示与实际应用1.官方文档展示如下:没有阴影2.实际应用情况如下: 三、解决方案 前言 这篇文章主要介绍了bootstrapv4轮播图去除两侧阴影及线框的方法,本文通过示例代码给大家介绍的非常详细…...

python 自建kafka消息生成和消费小工具

要将 Kafka 的消息生产和消费转换为 API 接口,我们可以使用 Python 的 Web 框架。其中 Flask 是一个轻量级且易于使用的选择。下面是一个简单的例子,使用 Flask 创建 API 来生成和消费 Kafka 消息。 1. 安装所需的库: pip install kafka-py…...

Prim算法:经过图中所有节点的最短路径

题目链接&#xff1a;53. 寻宝&#xff08;第七期模拟笔试&#xff09; #include<bits/stdc.h> using namespace std;// v为节点数量&#xff0c;e为边数量 int v, e;// 最小生成树 void prim(vector<vector<int>>& adj) {vector<int> dist(v1, I…...

Linux 信号捕捉函数 signal sigaction

signal函数 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a;设置某个信号的捕捉行为 参数&#xff1a; -signum&#xff1a;要捕捉的信号 handler&#xff1a;对捕捉到的信号怎么处理…...

StarRocks操作笔记

最近在使用starRocks&#xff0c;记录一些临时的操作技巧&#xff0c;防止遗忘。 1. 创建表 CREATE TABLE IF NOT EXISTS ODS.T_TEST( pk_day date, pool_address string, code string comment 唯一主键, test1 string, test2 string, test3 string, pk_year varchar(4), pk_m…...

Linux的ls -ld命令产生的信息怎么看

2023年9月24日&#xff0c;周日上午 目录 ls -ld列出的目录或文件的信息含义文件硬链接什么是文件硬链接为什么新建目录的文件硬链接为2举例说明例一例二例三 ls -ld列出的目录或文件的信息含义 第一个字符表示文件类型: d: 目录 -: 普通文件 l: 软链接 b: 块设备文件 c:…...

Linux- 内存映射文件(Memory-Mapped File)

内存映射文件&#xff08;Memory-Mapped File&#xff09;是⼀种将文件内容映射到内存中的机制&#xff0c;允许程序直接访问文件数据&#xff0c;就好像这些数据已经被加载到了内存⼀样。这个机制允许文件的内容被映射到⼀个进程的地址空间&#xff0c;从而允许程序以⼀种更高…...

李航老师《统计学习方法》第五章阅读笔记

决策树&#xff08;decision tree&#xff09;是一种基本的分类与回归方法。本章主要讨论用于分类的决策树。决策树模型呈树形结构&#xff0c;在分类问题中&#xff0c;表示基于特征对实例进行分类的过程。 以下是关于分类决策树的一些基本概念和特点&#xff1a; 树形结构&am…...

iOS16新特性:实时活动-在锁屏界面实时更新APP消息 | 京东云技术团队

简介 之前在 《iOS16新特性:灵动岛适配开发与到家业务场景结合的探索实践》 里介绍了iOS16新的特性&#xff1a;实时更新&#xff08;Live Activity&#xff09;中灵动岛的适配流程&#xff0c;但其实除了灵动岛的展示样式&#xff0c;Live Activity还有一种非常实用的应用场景…...

嵌入式串口通信效率优化实战

1. 串口通信效率优化背景在嵌入式系统开发中&#xff0c;串口通信是最基础也最常用的外设接口之一。我从事嵌入式开发十多年来&#xff0c;处理过各种串口通信场景&#xff0c;从简单的调试信息输出到复杂的工业控制协议传输。传统串口通信方式在简单场景下工作良好&#xff0c…...

AITINKR_JSON_FIELDS:面向MCU的零碎片JSON字段管理库

1. AITINKR_JSON_FIELDS 库深度解析&#xff1a;面向资源受限 IoT 设备的动态 JSON 字段管理方案在嵌入式物联网设备开发中&#xff0c;JSON 已成为事实上的数据交换标准。从传感器数据上报、OTA 配置下发&#xff0c;到设备状态同步与远程控制指令解析&#xff0c;JSON 的轻量…...

安卓开发者必看:解决Google Play服务报错的5种实战方法(附工具推荐)

安卓开发者必看&#xff1a;解决Google Play服务报错的5种实战方法&#xff08;附工具推荐&#xff09; 在安卓应用开发过程中&#xff0c;Google Play服务&#xff08;Google Play Services&#xff09;的集成几乎是不可避免的——无论是地图服务、支付功能&#xff0c;还是推…...

seo中文网站如何应对算法更新

SEO中文网站如何应对算法更新 在互联网的迅速发展中&#xff0c;搜索引擎的算法更新频繁&#xff0c;这对SEO中文网站提出了更高的要求。面对这一挑战&#xff0c;我们需要深入分析问题&#xff0c;理解原因&#xff0c;并采取有效的应对策略。本文将详细探讨如何应对搜索引擎…...

Android音视频开发实战:MediaCodec同步解码避坑指南(附PTS矫正技巧)

Android音视频开发实战&#xff1a;MediaCodec同步解码中的PTS时间戳矫正与性能优化 在移动端音视频应用开发中&#xff0c;视频播放速度异常是个常见但令人头疼的问题。许多Android开发者都遇到过这样的场景&#xff1a;当你使用MediaCodec成功解码视频后&#xff0c;播放画面…...

算法双杀:Trie(前缀树)实现 + 全排列(回溯经典)| 面试必刷模板题

目录 一、Trie&#xff08;前缀树&#xff09;&#xff1a;字符串查询的效率神器 什么是前缀树&#xff1f; 核心设计 完整实现代码 关键解析 二、全排列&#xff1a;回溯算法入门经典 题目描述 核心思路&#xff08;回溯法&#xff09; 完整实现代码 关键解析 三、…...

Android OTA包极速提取:payload-dumper-go完整实战指南 [特殊字符]

Android OTA包极速提取&#xff1a;payload-dumper-go完整实战指南 &#x1f680; 【免费下载链接】payload-dumper-go an android OTA payload dumper written in Go 项目地址: https://gitcode.com/gh_mirrors/pa/payload-dumper-go payload-dumper-go是一款专为Andro…...

家庭物联网中枢:OpenClaw+Phi-3-vision实现智能家居视觉控制

家庭物联网中枢&#xff1a;OpenClawPhi-3-vision实现智能家居视觉控制 1. 为什么需要本地化的智能家居方案 去年装修新房时&#xff0c;我面临一个两难选择&#xff1a;要么使用成熟的云端智能家居平台&#xff0c;牺牲部分隐私&#xff1b;要么完全手动控制&#xff0c;失去…...

OpenClaw+Phi-3-mini-128k-instruct:技术博客自动生成与Hexo部署

OpenClawPhi-3-mini-128k-instruct&#xff1a;技术博客自动生成与Hexo部署 1. 为什么需要自动化技术博客写作 作为一名技术博主&#xff0c;我长期面临一个困境&#xff1a;代码写得多&#xff0c;文章写得少。每次完成一个项目后&#xff0c;明明有很多值得分享的技术细节&…...

告别模型臃肿:手把手教你用vLLM部署NVFP4量化的DeepSeek模型(附完整配置)

实战指南&#xff1a;NVFP4量化DeepSeek模型在vLLM中的高效部署 当你在深夜调试一个70B参数的模型时&#xff0c;服务器内存占用突然从480GB骤降到120GB——这不是魔法&#xff0c;而是NVFP4量化带来的真实效果。作为Blackwell架构引入的革命性4-bit格式&#xff0c;NVFP4正在…...