java将图片转为pdf

效果图

直接上代码

1.引入jar

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

2.测试类

package pers.wwz.study.img2pdf20240507;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 Test {public static void main(String[] args) {downloadPdf("6.jpg","1.pdf");}/*** 下载** @param imgFilePath img文件路径* @param filePath    文件路径* @throws IOException ioexception*/private static void downloadPdf( String imgFilePath,String filePath) {PDDocument document = new PDDocument();try {// 1.将本地的图片转成流形式File imgFile = new File("6.jpg");byte[] imageBytes = readBytesFromFile(imgFile);File imgFile2 = new File("7.jpg");byte[] imageBytes2 = readBytesFromFile(imgFile2);File imgFile3 = new File("10.jpg");byte[] imageBytes3 = readBytesFromFile(imgFile3);// 2. 生成PDFgenPdf(document, imageBytes);genPdf(document, imageBytes2);genPdf(document, imageBytes3);// 4. 保存PDFFile outputFile = new File(filePath);File parentFolder = outputFile.getParentFile();if (parentFolder != null && !parentFolder.exists()) {parentFolder.mkdirs();}document.save(outputFile);document.close();}catch (Exception e){}}private static void genPdf(PDDocument document, byte[] imageBytes) throws IOException {//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;// 这里是将你的图片填充入pdf页contentStream.drawImage(image, x, y, scaledWidth, scaledHeight);contentStream.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;}}

参考链接:java实现图片转PDF_java 图片转pdf-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scitb5函数2.1版本(交互效应函数P for interaction)发布----用于一键生成交互效应表、森林图

写在前面的话&#xff0c;此函数不适用于NHANES数据&#xff0c;也不能用于COX回归,请注意甄别。 在SCI文章中&#xff0c;交互效应表格&#xff08;通常是表五&#xff09;几乎是高分SCI必有。因为增加了亚组人群分析&#xff0c;增加了文章的可信度&#xff0c;能为文章锦上添…

电脑文件批量重命名不求人:快速操作,高效技巧让你轻松搞定

在数字化时代&#xff0c;电脑文件的管理与整理显得尤为重要。当面对大量需要重命名的文件时&#xff0c;一个个手动修改不仅耗时&#xff0c;还容易出错。那么&#xff0c;有没有一种方法可以快速、高效地完成这一任务呢&#xff1f;答案是肯定的&#xff0c;下面就来介绍几种…

盘点一下近年来常用的电脑监控软件

企业电脑监控软件通常用于监视员工在工作时间内的电脑使用情况&#xff0c;以确保他们的工作效率和安全性。以下是几种常见的企业电脑监控软件&#xff1a; 1、Ping32 Ping32是一款集成多功能的企业级电脑监控软件&#xff0c;包括员工上网行为管理、文件外发审计、屏幕活动监…

(41)5.6-5.7数据结构(栈和队列的应用)

1.栈在括号匹配中的应用 #define _CRT_SECURE_NO_WARNINGS #define MaxSize 10 typedef struct { char data[MaxSize];//静态数组存放栈中元素 int top; //栈顶指针 }SqStack;//初始化栈 void InitStack(SqStack& S);//判断栈是否为空 bool StackEmpty(SqStack S…

MFC DLL注入失败一些错误总结

使用cheat Engine为MFC窗口程序注入DLL时一定要注意&#xff0c;被注入的exe程序和注入的DLL 的绝对路径中一定不要带有中文字符&#xff0c;否则会遇到各种各样的奇怪错误&#xff0c;如下所示&#xff1a; 以下是dll绝对路径中均含有中文字符&#xff0c;会报错误&#xff…

C++ | Leetcode C++题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; class Solution { public:unordered_map <char, int> ori, cnt;bool check() {for (const auto &p: ori) {if (cnt[p.first] < p.second) {return false;}}return true;}string minWindow(string s, string t) {for (const au…

翔云优配正规炒股美股市场秒速涨停!主力疯狂加仓,板块掀涨停潮

查查配今日,A股整体微幅震荡,主要股指涨跌互现,上证指数小幅飘红再创年内新高,创业板指和科创50则小幅调整,两市成交跌破万亿元。盘面上,国防军工、化工、低空经济、房地产等板块涨幅居前,ST、电力、酒店餐饮、家用电器等板块跌幅居前。 翔云优配以其专业的服务和较低的管理费…

社交媒体数据恢复:度小视

度小视&#xff0c;原名全民小视频&#xff0c;现已更名为百家号&#xff0c;是百度在线网络技术(北京)有限公司旗下的一款手机短视频类应用软件。在使用过程中&#xff0c;如果遇到社交软件数据丢失的问题&#xff0c;可以通过以下步骤尝试恢复。 首先&#xff0c;在备份数据…

证券基金信创联盟研讨会:YashanDB分享金融核心数据库技术实践

4月26日&#xff0c;由证券基金行业信息技术应用创新联盟主办、WG3稽核风控系统工作组承办、国信证券股份有限公司协办的信创联盟2024年度系列研讨会第三期-稽核风控系统信创实践成功举办。国内头部企业国信证券、申万宏源证券、信达证券、国金证券、广发证券等单位共计300余人…

前端 | 自定义电子木鱼

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析&#x1f407;html&#x1f407;css&#x1f407;javascript &#x1f4da;实现效果 &#x1f4da;模块实现解析 &#x1f407;html 搭个框架<!DOCTYPE html> <html lang"en"> <head>&l…

AI无人自动实景直播系统,挑战高效 实时 智能 全新的直播方式

随着科技的不断发展&#xff0c;人工智能&#xff08;AI&#xff09;已经涉足并改变了各个行业&#xff0c;直播领域也不例外。传统的直播方式依赖于真人主持和人工操作&#xff0c;而现在&#xff0c;AI无人自动实景直播系统的出现&#xff0c;正在挑战着传统直播的方式&#…

35道必懂的 Linux 运维面试题

1、现在给你三百台服务器&#xff0c;你怎么对他们进行管理&#xff1f; 管理3百台服务器的方式&#xff1a; 1&#xff09;设定跳板机&#xff0c;使用统一账号登录&#xff0c;便于安全与登录的考量。 2&#xff09;使用 salt、ansiable、puppet 进行系统的统一调度与配置的…

高扬程水泵:专业设备,高效输送水源/恒峰智慧科技

在广袤无垠的森林中&#xff0c;每一棵树木都承载着生命的希望与自然的恩赐。然而&#xff0c;当森林遭遇火灾的威胁时&#xff0c;这些生机勃勃的生命便岌岌可危。此时&#xff0c;森林消防高扬程水泵便成为了守护森林安全的重要武器&#xff0c;以其专业性与高效性&#xff0…

图书管理系统调整——修改注解(引入IoC、DI思想)

这里修改的还是比较简单&#xff0c;我们知道&#xff0c;五大注解通常情况下是可以混用的&#xff0c;而这里的BookController和UserController的注解不变 &#xff0c;也不能改变&#xff0c;因为Controller除了交给Spring管理外&#xff0c;还具备一定的路由功能&#xff0c…

20232810 2023-2024-2 《网络攻防实践》实验八

一、实践内容 1.1 恶意代码 1.1.1 简介 定义&#xff1a;恶意代码&#xff08;Malware,或Malicious Code&#xff09;指的是使计算机按照攻击者的意图执行以达到恶意目标的指令集。 指令集合&#xff1a;二进制执行文件、脚本语言代码、宏代码、寄生在文件或者启动扇区的指令…

【计算机网络】因特网概述

一.发展的三个阶段 二.ISP介绍 因特网服务提供者&#xff08;Internet Service Provider&#xff09;&#xff0c;简称ISP&#xff0c;普通用户是通过 ISP 接入到因特网的&#xff0c;ISP 可以从因特网管理机构申请到成块的 IP 地址&#xff0c;同时拥有通信线路以及路由器等连…

面试集中营—Redis面试题

一、Redis的线程模型 Redis是基于非阻塞的IO复用模型&#xff0c;内部使用文件事件处理器&#xff08;file event handler&#xff09;&#xff0c;这个文件事件处理器是单线程的&#xff0c;所以Redis才叫做单线程的模型&#xff0c;它采用IO多路复用机制同时监听多个socket&a…

开发中的一些专业术语,POJO、PO...

在 Java 开发中&#xff0c;以下是常见的设计模式和概念&#xff1a; PO&#xff08;Persistent Object&#xff09;&#xff1a;持久化对象&#xff0c;也称为实体类或数据对象。它是与数据库表结构对应的类&#xff0c;通常用于表示持久化数据的实体。PO 类的属性与数据库表的…

阿里easyExcel -- excel单元格自定义下拉选择(升级版)

背景 很久很久以前写了一篇类似的文章 阿里easyExcel – excel下载/导出/读取 (单元格自定义下拉选择、不支持图片) &#xff0c;用了没多久就发现不好用&#xff0c;限制太多&#xff08;以后遇到你就知道了&#xff09;&#xff0c;然后就有了现在迟到很久的文章&#xff0c…

python abs函数怎么用

abs()函数是Python的数字函数&#xff0c;用以返回数字的绝对值。 语法 以下是 abs() 方法的语法&#xff1a; abs( x ) 参数 x -- 数值表达式&#xff0c;可以是整数&#xff0c;浮点数&#xff0c;复数。 返回值 函数返回 x&#xff08;数字&#xff09;的绝对值&#x…