Java实现将图片转换成PDF

news/2024/9/11 3:48:21/ 标签: java, pdf

1.引入依赖

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version>
</dependency>

2.工具方法

java">package com.prescription.transfer.system.utils;import org.apache.pdfbox.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class ImgToPdf {/*** 图片转Pdf** @param imgFile* @return* @throws IOException*/public static File getPdfFile(File imgFile, String filePath) throws IOException {File outputFile = new File(filePath);genPdf(readBytesFromFile(imgFile), outputFile);return outputFile;}private static void genPdf(byte[] imageBytes, File outputFile) throws IOException {PDDocument document = new PDDocument();//2. 生成一页 PDF documentPDImageXObject image = PDImageXObject.createFromByteArray(document, imageBytes, "image");// 这里是你生成PDF自适应图片大小,不设置会默认为A4PDRectangle pageSize = new PDRectangle(image.getWidth(), image.getHeight());PDPage page = new PDPage(pageSize);document.addPage(page);// 3.将 图片 添加进PDF documentPDPageContentStream contentStream = new PDPageContentStream(document, page);float pageWidth = pageSize.getWidth();float pageHeight = pageSize.getHeight();float imageWidth = image.getWidth();float imageHeight = image.getHeight();float scale = Math.min(pageWidth / imageWidth, pageHeight / imageHeight);float scaledWidth = imageWidth * scale;float scaledHeight = imageHeight * scale;float x = (pageWidth - scaledWidth) / 2;float y = (pageHeight - scaledHeight) / 2;// 这里是将你的图片填充入pdfcontentStream.drawImage(image, x, y, scaledWidth, scaledHeight);contentStream.close();document.save(outputFile);document.close();}/*** 从文件读取字节** @param file 文件* @return {@link byte[]}* @throws IOException ioexception*/private static byte[] readBytesFromFile(File file) throws IOException {FileInputStream inputStream = new FileInputStream(file);byte[] bytes = IOUtils.toByteArray(inputStream);inputStream.close();return bytes;}}

http://www.ppmy.cn/news/1475387.html

相关文章

flutter 列表下拉框加搜索

1.使用控件搜索加下拉框dropdown_search: ^0.4.9和获取中文拼音lpinyin: ^1.1.1 2.加入中文查询和首字查询 在当中找到相应的packages&#xff0c;再在SelectDialog.dart当中加入引入拼音搜索 import package:lpinyin/lpinyin.dart; 更改匹配方法manageItemsByFilter使其可…

R包: phyloseq扩增子统计分析利器

介绍 phyloseq包对多类型数据的综合软件&#xff0c;并其对这些数据提供统计分析和可视化方法。 微生物数据分析的主要挑战之一是如何整合不同类型的数据&#xff0c;从而对其进行生态学、遗传学、系统发育学、多元统计、可视化和检验等分析。同时&#xff0c;由于同行之间需要…

期货量化交易客户端开源教学第九节——新用户注册

一、新用户注册界面设计&#xff1a; 注册时采用手机号注册&#xff0c;客户端发送新号注册申请由后台做审核&#xff0c;后台审核通过后向注册的手机号发送注册成功的消息。注册过的手机号不能再二次注册。 界面验证代码 private{ Private declarations }FVerf: AnsiString; …

【QT】布局管理器

布局管理器 布局管理器1. 垂直布局2. 水平布局3. 网格布局4. 表单布局5. Spacer 布局管理器 之前使⽤ Qt 在界⾯上创建的控件, 都是通过 “绝对定位” 的⽅式来设定的&#xff1b;也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去。 …

java 前端上传文件后端解析并转发到第三方存储,Hutool 工具

单个文件上传 PostMapping("/upload")public MyResponse<?> upload(MultipartFile file) {if (multipartFiles null || multipartFiles.length 0) {throw new MessageException("未选择文件");}InputStreamResource inputStreamResource new Inp…

实用教程:用 Go 的 net/textproto 包优化文本协议处理

实用教程&#xff1a;用 Go 的 net/textproto 包优化文本协议处理 介绍准备工作环境设置Go 基础回顾 基础使用创建连接发送请求接收响应 高级特性处理 MIME 头多行响应的管理错误处理与调试 实战案例实现一个简单的邮件客户端实现一个基于 net/textproto 的命令行工具 最佳实践…

从零开始开发视频美颜SDK:实现直播美颜效果

因此&#xff0c;开发一款从零开始的视频美颜SDK&#xff0c;不仅可以节省成本&#xff0c;还能根据具体需求进行个性化调整。本文将介绍从零开始开发视频美颜SDK的关键步骤和实现思路。 一、需求分析与技术选型 在开发一款视频美颜SDK之前&#xff0c;首先需要进行详细的需求…

WPF界面设计-更改按钮样式 自定义字体图标

一、下载图标文件 iconfont-阿里巴巴矢量图标库 二、xaml界面代码编辑 文件结构 &#xe653; 对应的图标代码 Fonts/#iconfont 对应文件位置 <Window.Resources><ControlTemplate TargetType"Button" x:Key"CloseButtonTemplate"…

数据结构与算法基础-学习-37-平衡二叉树(Avl树)之删除节点

目录 一、知识点回顾 1、二叉搜索树&#xff08;BST&#xff09; 2、平衡二叉树&#xff08;Avl树&#xff09;之查找 二、环境信息 三、实现思路 1、示例图 2、查询 3、删除 &#xff08;1&#xff09;叶子节点&#xff08;无子树节点&#xff09; &#xff08;2&am…

如何为IP申请SSL证书

目录 以下是如何轻松为IP地址申请SSL证书的详细步骤&#xff1a; 申请IP证书的基本条件&#xff1a; 申请IP SSL证书的方式&#xff1a; 确保网络通信安全的核心要素之一&#xff0c;是有效利用SSL证书来加密数据传输&#xff0c;特别是对于那些直接通过IP地址访问的资源。I…

同步的艺术:Conda包依赖的自动同步策略

同步的艺术&#xff1a;Conda包依赖的自动同步策略 引言 在复杂的软件开发项目中&#xff0c;依赖管理是确保项目顺利进行的关键环节。Conda作为Python和其他科学计算语言的强大包管理器&#xff0c;提供了依赖同步功能&#xff0c;帮助用户自动化和简化依赖项的同步过程。本…

Oracle数据文件扩容

1、增加数据文件扩容 ALTER TABLESPACE app_data ADD DATAFILE D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF SIZE 30G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED; ALTER database datafile /ora/oradata/radius/undo.dbf resize 32G; alter tablespace sysaux add …

WEB安全-文件上传漏洞

1 需求 2 接口 move_uploaded_file basename pathinfo strtolower htmlspecialchars move_uploaded_file() 是 PHP 中的一个函数&#xff0c;它用于将临时文件移动到新位置。这个函数特别在文件上传处理中非常有用&#xff0c;因为它允许你将用户上传的文件从 PHP 的临时存…

AIGC学习笔记—LLM(前言)

大语言模型本身我不是很了解&#xff0c;但是掌握一些基础的知识点&#xff0c;由于要准备某个公司的二面&#xff0c;所以浅学一下这个技术&#xff0c;也是边摸索边学习...... 首先&#xff0c;我先简单的解释一下大模型&#xff0c;大模型是指具有大规模参数和复杂计算结构…

【新书速递】使用MATLAB进行雷达系统分析和设计(第四版)(2022)

来源&#xff1a;公众号高山防务 一、目录 目录 1雷达定义和术语 1.1雷达系统分类和波段 1.1.1高频&#xff08;HF&#xff09;和甚高频&#xff08;VHF&#xff09;雷达&#xff08;A和B波段&#xff09; 1.1.2超高频&#xff08;UHF&#xff09;雷达&#xff08;C波段&am…

sqlserver 自动编号初始化

在SQL Server中&#xff0c;可以使用IDENTITY属性来创建一个自动增长的序列&#xff0c;这通常用于主键。在创建表时&#xff0c;可以指定某一列为IDENTITY列&#xff0c;并给出起始值和增量。 以下是一个创建表并使用IDENTITY属性初始化自动编号的示例&#xff1a; CREATE T…

Three.js机器人与星系动态场景(四):封装Threejs业务组件

实际在写业务的时候不会在每个组件里都写几十行的threejs的初始化工作。我们可以 将通用的threejs的场景、相机、render、轨道控制器等进行统一初始化。同时将非主体的函数提到组件外部&#xff0c;通过import导入进组件。将业务逻辑主体更清晰一些。下面的代码是基于reactthre…

[计网初识1] TCP/UDP

学习内容 1.TCP建立链接的3次握手&#xff0c;断开连接的4次挥手 2.TCP报文段组成 内容 1.TCP 建立连接的3次握手? 假设主动方是客户端&#xff0c;被动方是服务端。 第一次 客户端给服务端发送 “hello,我是客户端” (TCP段中 SYN1) 第二次 服务端给客户端发送"我接…

C# 建造者模式(Builder Pattern)

建造者模式&#xff08;Builder Pattern&#xff09;&#xff0c;也被称为生成器模式&#xff0c;是一种对象构建模式&#xff0c;旨在将复杂对象的构建过程与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。这种模式特别适用于构建具有多个组成部分的复杂对象&am…

centos单机配置多个内网IP地址

centos单机配置多个内网IP地址 引配置1. 查看当前网络IP配置2. 打开网络配置目录3. 设置静态IP4. 编辑ifcfg-eno1:15. 重启网络配置 引 同一个局域网&#xff0c;但是对接的多个子系统使用了不同的网段&#xff0c;如一个系统主机IP地址是192.168.10.1&#xff0c;另一个系统主…