Java 生成 PDF 文档 如此简单
嘿,朋友!在 Java 里实现 PDF 文档生成那可真是个挺有意思的事儿,今儿个就来好好唠唠这个。咱有不少好用的库可以选择,下面就给你详细讲讲其中两个超实用的库,一个是 iText,另一个是 Apache PDFBox。
用 iText 库生成 PDF
思路
-
先把 iText 库给引入进来,这就好比给咱的 Java 项目装上了一个生成 PDF 的“神器”。
-
创建一个
Document对象,这个对象就像是一张白纸,咱要在上面绘制 PDF 的内容。 -
把这张“白纸”打开,同时设置好字体啥的,就像准备好画笔和颜料。
-
往
Document里添加各种内容,比如段落、表格这些,就像在白纸上画画。 -
最后把“白纸”合上,PDF 就生成啦。
代码示例
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;public class ITextPdfGenerator {public static void main(String[] args) {// 创建 Document 对象,就像准备好一张白纸Document document = new Document();try {// 把这张“白纸”和一个文件输出流关联起来,指定生成的 PDF 文件路径PdfWriter.getInstance(document, new FileOutputStream("itext_example.pdf"));// 打开这张“白纸”,准备画画document.open();// 在“白纸”上添加一个段落内容document.add(new Paragraph("嘿,这是用 iText 生成的 PDF 文档哦,是不是很神奇!"));} catch (DocumentException | FileNotFoundException e) {e.printStackTrace();} finally {// 合上“白纸”,完成 PDF 生成if (document.isOpen()) {document.close();}}}
}
代码解释及使用说明
-
首先咱创建了一个
Document对象,它就代表了整个 PDF 文档,就像一张白纸。 -
用
PdfWriter.getInstance方法把Document和一个文件输出流关联起来,这里指定生成的 PDF 文件叫itext_example.pdf。 -
调用
document.open()把“白纸”打开,这样就能往里面添加内容啦。 -
用
document.add(new Paragraph("..."))往文档里添加一个段落,就像在白纸上写了一句话。 -
最后在
finally块里调用document.close()把“白纸”合上,确保资源都正确释放。
Maven 依赖
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version>
</dependency>
用 Apache PDFBox 库生成 PDF
思路
-
先把 Apache PDFBox 库引入进来,这也是一个生成 PDF 的厉害工具。
-
创建一个
PDDocument对象,这个对象就像是一个 PDF 的容器。 -
创建一个
PDPage表示页面,然后把它添加到PDDocument里,就像给容器里放了一张纸。 -
获取
PDPageContentStream来绘制内容,就像拿起笔在纸上画画。 -
最后关闭
PDPageContentStream和PDDocument,PDF 就生成好啦。
代码示例
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;import java.io.IOException;public class PdfBoxPdfGenerator {public static void main(String[] args) {// 创建 PDDocument 对象,就像准备一个 PDF 容器PDDocument document = new PDDocument();try {// 创建一个页面,就像准备一张纸PDPage page = new PDPage();// 把这张纸放到 PDF 容器里document.addPage(page);// 获取页面内容流,就像拿起笔准备画画PDPageContentStream contentStream = new PDPageContentStream(document, page);// 设置字体和字号,就像选择画笔的粗细和样式contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);// 开始新的一行,准备写字contentStream.beginText();// 设置文本位置,就像确定在纸上的写字位置contentStream.newLineAtOffset(100, 700);// 写入文本,在纸上写下内容contentStream.showText("嘿,这是用 Apache PDFBox 生成的 PDF 文档,很酷吧!");// 结束文本操作,写完了contentStream.endText();// 把笔放下,关闭内容流contentStream.close();// 保存这个 PDF 文档document.save("pdfbox_example.pdf");} catch (IOException e) {e.printStackTrace();} finally {// 把 PDF 容器关上,完成操作try {if (document != null) {document.close();}} catch (IOException e) {e.printStackTrace();}}}
}
代码解释及使用说明
-
创建
PDDocument对象,它代表整个 PDF 文档,就像一个容器。 -
创建
PDPage表示一个页面,用document.addPage(page)把页面添加到文档里,就像把纸放到容器里。 -
用
PDPageContentStream来向页面里绘制内容,通过setFont方法设置字体和字号,beginText开始文本操作,newLineAtOffset设置文本位置,showText写入文本,endText结束文本操作。 -
调用
contentStream.close()关闭内容流,就像把笔放下。 -
最后调用
document.save("pdfbox_example.pdf")保存文档,在finally块里关闭PDDocument,把容器关上。
Maven 依赖
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version>
</dependency>
嘿,朋友,这下你知道怎么用 Java 生成 PDF 文档了吧!这两个库都挺好用的,你可以根据自己的需求选择哦。赶紧动手试试吧!
相关文章:
Java 生成 PDF 文档 如此简单
嘿,朋友!在 Java 里实现 PDF 文档生成那可真是个挺有意思的事儿,今儿个就来好好唠唠这个。咱有不少好用的库可以选择,下面就给你详细讲讲其中两个超实用的库,一个是 iText,另一个是 Apache PDFBox。 用 iTe…...
深入探究 YOLOv5:从优势到模型导出全方位解析
一、引言 在计算机视觉领域,目标检测是一项至关重要的任务,它在自动驾驶、安防监控、工业检测等众多领域都有着广泛的应用。而 YOLO(You Only Look Once)系列作为目标检测算法中的佼佼者,一直备受关注。其中ÿ…...
【PoCL】运行 LLVM 中 pass 优化过程详解
PoCL 项目中调用 LLVM 的 Pass 对编译过程的优化至关重要。本博文以PoCL 开源项目源码为例,详细说明【PoCL】运行 LLVM 中 pass 优化过程 目录 0. 个人简介 && 授权须知1. pocl_llvm_run_pocl_passes 函数作用2. 禁止 “小网格 small grid” 工作组(workGroup)特化的…...
如何将使用unsloth微调的模型部署到ollama?
目录 一、将模型保存为gguf格式 二、下载llama.cpp 三、生成 llama-quantize 可执行文件 四、使用llama-quantize 五、训练模型 六、将模型部署到ollama 一、将模型保存为gguf格式 在你的训练代码 trainer.train() 之后添加: model.save_pretrained_gguf(&q…...
【测试】UI自动化测试
长期更新,建议关注收藏点赞! 目录 概论WEB环境搭建Selenium APPAppium 概论 使用工具和代码执行用例。 什么样的项目需要自动化? 需要回归测试、自动化的功能模块需求变更不频繁、项目周期长(功能测试时长:UI自动化测…...
SSM开发(二) MyBatis两种SQL配置方式及其对比
目录 一、MyBatis两种SQL配置方式 二、使用XML映射文件配置SQL语句 三、使用注解配置SQL语句 四、两种方式对比 总结 1、注解 2、XML配置 五、MyBatis多数据源的两种配置方式 参考 一、MyBatis两种SQL配置方式 MyBatis 提供了两种方式来配置SQL语句:注解&a…...
【Redis】在ubuntu上安装Redis
文章目录 提权搜索软件包安装修改配置文件ip保护模式配置密码 重新启动服务器使用 redis 自带的客户端来连接服务器 提权 先切换到 root 用户,su 命令切换到 root. 搜索软件包 使用 apt 命令来搜索 redis 相关的软件包 apt search redis 安装 使用 apt 命令安装 redisapt …...
JS-Web API -day06
一、正则表达式 正则表达式测试工具: http://tool.oschina.net/regex 1.1 正则表达式介绍与语法 正则表达式: 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。通常用来查…...
JS-Web API -day03
一、事件流 1.1 事件流与两个阶段说明 事件流 指的是事件完整执行过程中的流动路径 假设页面有个div标签,当触发事件时,会经历两个阶段,分别是捕获阶段、冒泡阶段 捕获阶段:Document - Element html - Elementbody - Element div…...
进程优先级
基本概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤,可以改善系统性能;还可以把进程运⾏到指定的CPU上,这样⼀来&…...
c语言(转义字符)
前言: 内容: 然后记一下转义字符 \? 在书写连续多个问号时使用,防止他们被解析成三字母词 \ 用于表示字符常量 \\ 用于表示一个反斜杠,防止他被解析为一个转义序列符 \n 换行 \r …...
easyexcel读取写入excel easyexceldemo
1.新建springboot项目 2.添加pom依赖 <name>excel</name> <description>excelspringboot例子</description><parent> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&…...
【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用
目录 1. 引言 2. 矩阵分解概述 2.1 矩阵分解的意义 3. 奇异值分解(SVD) 3.1 定义与数学基础 3.2 SVD 的性质 3.3 SVD 在数据降维中的应用 3.4 示例代码:使用 SVD 进行图像压缩 3.5 结果分析 4. 主成分分析(PCA࿰…...
ThreeJS示例教程200+【目录】
Three.js 是一个强大的 JavaScript 库,旨在简化在网页上创建和展示3D图形的过程。它基于 WebGL 技术,但提供了比直接使用 WebGL 更易于使用的API,使得开发者无需深入了解 WebGL 的复杂细节就能创建出高质量的3D内容。 由于目前内容还不多,下面的内容暂时做一个占位。 文章目…...
DC-DC稳压电源——实战(基于Ti5450芯片)基础知识篇(1)
一:基础知识-耦合 1)去耦电容 (1)耦合与去耦 耦合:系统内部的各个部分之间存在相互依赖、相互影响、相互制约的情况。用人话说就是不同部分之间的相互影响。 去耦:自然就是消除不同部分之间的影响了。 &…...
pyrender 渲染mesh
目录 render_meshes函数 调用函数 render_meshes函数 def overlay_human_meshes(humans, K, model, img_pil, unique_colorFalse):# Color of humans seen in the image._color [color[0] for _ in range(len(humans))] if unique_color else color# Get focal and princpt …...
防火墙安全策略
目录 一.拓扑信息 二.需求分析 三.命令行详细配置信息 1.配置IP 2.交换机配置 3.修改安全区域 4.安全策略 四.web界面详细配置 1.配置IP和设置安全区域 2.交换机配置 3.安全策略 五.测试 一.拓扑信息 二.需求分析 1.VLAN 2属于办公区域;VLAN 3属于生…...
selenium clear()方法清除文本框内容
在使用Selenium进行Web自动化测试时,清除文本框内容是一个常见的需求。这可以通过多种方式实现,取决于你使用的是哪种编程语言(如Python、Java等)以及你的具体需求。以下是一些常见的方法: 1. 使用clear()方法 clear…...
(回溯分割)leetcode93 复原IP地址
#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是:n个字符,递推n1后(叶子节点ÿ…...
高性能队列 Disruptor 在 IM 系统中的实战
高性能队列 Disruptor 在 IM 系统中的实战 前三期我们介绍了Disruptor的典型使用场景和相关高性能原理,本期我介绍一下Disruptor在IM系统用的应用实战,IM系统即社交聊天系统,对实时性的要求非常高,非常符合Disruptor的使用场景。 …...
UE5 BaseEditorSettings.ini加载原理与配置生效机制
1. 为什么你改了BaseEditorSettings.ini却没生效?——从UE5编辑器启动流程讲起很多人在UE5项目里折腾半天,把BaseEditorSettings.ini文件翻来覆去改了十几遍,重启编辑器后发现:缩放比例还是不对、网格间距没变、甚至“启用实时预览…...
如何用deberta-v3-base-zeroshot-v2.0构建企业级NLP应用?完整教程来了
如何用deberta-v3-base-zeroshot-v2.0构建企业级NLP应用?完整教程来了 【免费下载链接】deberta-v3-base-zeroshot-v2.0 项目地址: https://ai.gitcode.com/hf_mirrors/NingBo_Ascend/deberta-v3-base-zeroshot-v2.0 deberta-v3-base-zeroshot-v2.0是一款基…...
51单片机驱动ST7735S彩屏避坑指南:从5秒刷屏到流畅贪吃蛇的优化实战
51单片机驱动ST7735S彩屏性能优化实战:从卡顿到流畅游戏的蜕变之路当一块128x160分辨率的ST7735S彩屏遇上传统的51单片机,这种组合看似矛盾却又充满挑战。许多开发者初次尝试时会发现,原本在STM32等平台上运行流畅的显示驱动,移植…...
终极鼠标连点器使用指南:3分钟掌握高效自动化技巧
终极鼠标连点器使用指南:3分钟掌握高效自动化技巧 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,操作…...
配置OpenClaw Agent使用Taotoken作为后端模型提供商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 配置OpenClaw Agent使用Taotoken作为后端模型提供商 基础教程类,指导希望使用OpenClaw等Agent工具的开发者,…...
AI圈内火热的Agent、MCP、Skill、CLI是啥?用装修房子讲透,看完秒懂
本文用装修房子的比喻,详细解释了AI领域的四个核心概念:Agent如同会自主规划任务的私人助理;MCP是AI与外部工具数据的统一接口,类似USB-C;Skill是指导AI按标准操作执行的手册;CLI则是不依赖图形界面的命令行…...
sngan_projection论文解读:ICLR2018两大GAN技术的完美结合
sngan_projection论文解读:ICLR2018两大GAN技术的完美结合 【免费下载链接】sngan_projection GANs with spectral normalization and projection discriminator 项目地址: https://gitcode.com/gh_mirrors/sn/sngan_projection sngan_projection是一个实现了…...
OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权
OpenIPC开源固件:5分钟解锁网络摄像头的终极控制权 【免费下载链接】firmware Alternative IP Camera firmware from an open community 项目地址: https://gitcode.com/gh_mirrors/fir/firmware 还在为网络摄像头的封闭系统而烦恼吗?想要完全掌控…...
Elden Ring帧率解锁终极指南:从60帧到144+的完整教程
Elden Ring帧率解锁终极指南:从60帧到144的完整教程 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/Elden…...
三步让小爱音箱秒变AI语音助手:MiGPT深度配置指南
三步让小爱音箱秒变AI语音助手:MiGPT深度配置指南 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障&q…...
