【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 容器中查找键对应的值ÿ…...
基于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算法:经过图中所有节点的最短路径
题目链接:53. 寻宝(第七期模拟笔试) #include<bits/stdc.h> using namespace std;// v为节点数量,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); 功能:设置某个信号的捕捉行为 参数: -signum:要捕捉的信号 handler:对捕捉到的信号怎么处理…...
StarRocks操作笔记
最近在使用starRocks,记录一些临时的操作技巧,防止遗忘。 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日,周日上午 目录 ls -ld列出的目录或文件的信息含义文件硬链接什么是文件硬链接为什么新建目录的文件硬链接为2举例说明例一例二例三 ls -ld列出的目录或文件的信息含义 第一个字符表示文件类型: d: 目录 -: 普通文件 l: 软链接 b: 块设备文件 c:…...
Linux- 内存映射文件(Memory-Mapped File)
内存映射文件(Memory-Mapped File)是⼀种将文件内容映射到内存中的机制,允许程序直接访问文件数据,就好像这些数据已经被加载到了内存⼀样。这个机制允许文件的内容被映射到⼀个进程的地址空间,从而允许程序以⼀种更高…...
李航老师《统计学习方法》第五章阅读笔记
决策树(decision tree)是一种基本的分类与回归方法。本章主要讨论用于分类的决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。 以下是关于分类决策树的一些基本概念和特点: 树形结构&am…...
iOS16新特性:实时活动-在锁屏界面实时更新APP消息 | 京东云技术团队
简介 之前在 《iOS16新特性:灵动岛适配开发与到家业务场景结合的探索实践》 里介绍了iOS16新的特性:实时更新(Live Activity)中灵动岛的适配流程,但其实除了灵动岛的展示样式,Live Activity还有一种非常实用的应用场景…...
国内网站 SEO 推广需要多长时间见效
国内网站 SEO 推广需要多长时间见效 在当今互联网时代,搜索引擎优化(SEO)已经成为提升国内网站流量和品牌知名度的关键手段。很多人都会问,国内网站 SEO 推广需要多长时间才能见效?答案并不简单,因为这涉及…...
智能开门柜自动售货机哪里生产
当你考虑引入一台智能开门柜自动售货机时,脑海中浮现的第一个问题往往是:“这东西,哪里生产的靠谱?”这背后,是对设备质量、技术稳定性和长期服务的深度关切。今天,我们就来深入剖析智能开门柜的生产格局&a…...
MySQL常用命令速查手册,用户权限控制功能实现说明。
MySQL常用命令全攻略 连接与退出MySQL 通过命令行连接到MySQL服务器: mysql -u username -p系统会提示输入密码。 退出MySQL命令行界面: exit;或使用快捷键 Ctrl D。 数据库操作 创建新数据库: CREATE DATABASE database_name;查看所有数据库…...
Qwen2.5-VL-7B-Instruct效果对比:不同prompt工程对图文推理影响分析
Qwen2.5-VL-7B-Instruct效果对比:不同prompt工程对图文推理影响分析 你有没有遇到过这种情况?给一个多模态模型看一张图,问它一个问题,结果它要么答非所问,要么干脆说“我不知道”。很多时候,问题可能不在…...
GHelper合盖模式终极指南:华硕笔记本外接显示器合盖不休眠完整教程
GHelper合盖模式终极指南:华硕笔记本外接显示器合盖不休眠完整教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TU…...
Zotero Duplicates Merger:5分钟实现文献库高效整理的终极指南
Zotero Duplicates Merger:5分钟实现文献库高效整理的终极指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为学术文献库中…...
UE5 GAS框架下,如何用C++代码优雅地创建你的第一个RPG角色蓝图?
UE5 GAS框架下C与蓝图的协同开发:构建可扩展的RPG角色系统 在虚幻引擎5的游戏开发中,Gameplay Ability System(GAS)为构建复杂的角色能力体系提供了强大支持。本文将带你深入探索如何通过C代码设计可扩展的角色基类,并…...
避开Trace API的坑:Android方法耗时统计的正确姿势与实战技巧
避开Trace API的坑:Android方法耗时统计的正确姿势与实战技巧 在移动应用开发中,性能优化始终是开发者面临的核心挑战之一。特别是对于音视频、游戏等对帧率敏感的应用场景,毫秒级的性能差异都可能直接影响用户体验。而精准的方法耗时统计&am…...
为什么国内还没有出现网络安全巨头公司
国内坐拥广阔市场、政策持续加码,却始终没能诞生一家具备全球话语权、真正统领行业的龙头企业。看似热闹的产业图景背后,并非技术实力缺位,而是从需求逻辑、商业模式到市场生态,全链条深陷结构性困局,从根源上锁死了网…...
3步掌握Fooocus核心架构:从零构建专业级AI图像生成工作流
3步掌握Fooocus核心架构:从零构建专业级AI图像生成工作流 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus Fooocus作为基于Stable Diffusion XL架构的开源AI图像生成软件,…...
