利用iText将多张图处转为一个pdf

2023-11-06

项目需要将多张JPG格式的图片转为一个PDF再进行后续处理,百度查资源看博客发现用iText比较简单,也没想到会这么简单,刷新了我的彩虹心,话不多说,直接上code。

项目用的是maven进行管理的,所以最开始需要引入依赖,如下:

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.10</version>
</dependency>
另外需要引入一个包,用来输出中文
<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
</dependency>

如果需要用到密码设置之类,还需要再引入一个
<dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.54</version>
</dependency>

准备工作做完后就可以开始上手了,直接上一个最终版
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;



/**
 * Created by Administrator on 2017/12/22.
 */
public class JPGTPDF {
    public  static void main(String[] args)throws FileNotFoundException,DocumentException,IOException{
        Document document=new Document(PageSize.A5,50,50,50,50);
        PdfWriter pdfWriter=PdfWriter.getInstance(document,new FileOutputStream("E:/work/test.pdf"));
        document.open();
        //document.setPageSize(PageSize.A4);        //设置页面大小
//        document.add(new Paragraph("Hello World"));
        document.addTitle("this is a title D");
        document.addAuthor("mld");
        document.addSubject("this is a subject D");
        document.addKeywords("Keywords D");
        document.addCreationDate();
        Image image=null;
//        image=Image.getInstance("E:/picSource/20170905100453_3245.jpg");
        File file=new File("E:/picSource");
        File[] fileList=file.listFiles();
        for(int i=0;i<fileList.length;i++){
           image=Image.getInstance("E:/picSource/"+fileList[i].getName());
           Map<String,Float> param=new HashMap<String,Float>();
            param=getHeighWidth(image);
            image.scaleAbsolute(param.get("imageWidth"),param.get("imageHeight"));
            image.setAlignment(Element.ALIGN_CENTER);                      //设置元素居中
            //image.setAlignment(1);                      //设置元素居中
            document.add(image);
        }
        document.close();
    }
    public static Map<String,Float> getHeighWidth(Image image){
        Float imageHeight=image.getScaledHeight();
        Float imageWidth=image.getScaledWidth();
        Map<String,Float> resultParam=new HashMap<String, Float>();
        int i=0;
        while(imageHeight>500||imageWidth>500){
            image.scalePercent(100-i);
            i++;
            imageHeight=image.getScaledHeight();
            imageWidth=image.getScaledWidth();
        }
        resultParam.put("imageWidth",imageWidth);
        resultParam.put("imageHeight",imageHeight);
        return resultParam;
    }

貌似上面丢了个大括号,反正即使是小白也能根据这个过程实现自己的需求。另外,不管什么需求,千万要动手做,光是想是想不出来了。满满的IT自豪感,哈哈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用iText将多张图处转为一个pdf 的相关文章

随机推荐

  • 【论文阅读】GETNext: Trajectory Flow Map Enhanced Transformer for Next POI Recommendation

    论文阅读 GETNext Trajectory Flow Map Enhanced Transformer for Next POI Recommendation 前言 Next POI 推荐是根据用户的当前状态和历史信息 预测用户近期的动
  • LCD液晶屏接口和显示器接口介绍

    LCD液晶屏主流显示接口介绍 屏的接口类型种类以及接口定义分析 绝对收藏 I2C SPI UART RGB LVDS MIPI EDP和DP等显示屏接口简要总结 LCD主流显示接口介绍 这个ID洒家要了的博客 CSDN博客 lcd接口定义
  • 服务器异常断电导致文件损坏,clickhouse启动报错:filesystem error Structure needs cleaning

    文章目录 ClickHouse介绍 问题介绍 解决办法 ClickHouse介绍 ClickHouse是由俄罗斯的Yandex公司开发的一款快速 可扩展的列式数据库管理系统 它专门针对OLAP场景设计 在海量数据分析和查询方面具有出色的性能
  • elasticsearch的type、text和keyword

    elasticsearch的type text和keyword 前几天在使用elasticsearch的时候发现一个问题就是 elasticsearch6 0之后的版本和6 0之前的版本有一个不一样的地方 就是type 其次还有一个稍微有点
  • Flink standalone配置(血汗注意事项,哭唧唧)

    虚拟机请使用VMware15 win10不支持VMware14 会在导入文件时卡死 JDK flink环境都要配 环境变量如何修改请自行搜索 记得最后source etc profile standalone模式只需要配置flink yam
  • Ratslam信息ROSBAG TOPIC汇总1

    ROSBAG中TOPIC汇总 rostopic list clock irat red camera image compressed irat red odom irat red proximity range0 irat red pro
  • 【Spring Security】UserDetailsService 接口介绍

    文章目录 UserDetailsService 介绍 UserDetailsService 具体操作 UserDetailsService 方法介绍 UserDetailsService 介绍 UserDetailsService 在 Sp
  • C++库函数——map与set

    目录 1 关联式容器是什么 2 键值对 3 set set的介绍 set的模板参数列表 set的构造 set的迭代器 set的容量 set的修改与操作 set的使用举例 4 multiset multiset的介绍 multiset的使用举
  • 内核current宏解析

    内核 current宏解析 Technorati 标签 current thread info 在内核中 可以通过current宏来获得当前执行进程的task struct指针 现在来简要分析以下 最原始的定义如下 define curre
  • sql必知必会一图总结梳理

    关注公众号 JustGoForIt 免费领取sql必知必会电子书
  • 环境准备与小程序首页的运行逻辑

    环境准备 上传云函数 getCustomerOpenid 上传云函数到云环境 xiongyuqingcloud 调用云函数 Promise Cloud callFunction Object object 返回一个 Promise 对象 所
  • Eclipse:The selection cannot be launched,and there are no recent launches

    报错 Eclipse工具启动提示the selection cannot be launched and there are no recent 经网上查找了解 缺少String args 好久没学java了暴露了 修改后run 错误代码
  • 工具篇——1、TMUX

    目录 工具篇 一 TMUX 1 安装 2 概念 3 具体操作 3 1 会话 3 2 窗口 3 3 窗格 4 TMUX 配置 5 结对编程 工具篇 本系列专门用于记录一些软件或者小工具的使用 工欲善其事必先利其器 拥有称心如意的工具 可以大大
  • 来!一起捋一捋机器学习分类算法

    大数据文摘出品 来源 builtin 编译 邢畅 刘兆娜 李雷 钱天培 说起分类算法 相信学过机器学习的同学都能侃上一二 可是 你能够如数家珍地说出所有常用的分类算法 以及他们的特征 优缺点吗 比如说 你可以快速地回答下面的问题么 KNN算
  • 获取PancakeSwap Price

    导入 ethers js 接口文档 ethers js 中文文档 深入浅出区块链
  • 网络层(IP)和数据链路层(以太网)的关系

    目录 一 路由选择 二 IP协议中的路由选择 三 数据链路层协议 以太网 1 负责的工作 2 核心的协议 3 举例说明传输层 网络层 数据链路层之间的关系 4 描述数据使用的不同术语 很少区分 5 以太网帧格式 四 mac地址 数据链路层的
  • 2024王道408数据结构 P144 T11

    2024王道408数据结构 P144 T11 思考过程 题目说要我们找到元素值为x的结点 删除以它为根的子树 并释放相应的空间 这里要注意题目让我们删除的是根的子树包括根 那读明白了题目的意思我们就开始构思 先是要遍历二叉树 找到元素值为x
  • 『Android Studio』用Fragment实现一个简易新闻浏览界面

    Fragment意思为碎片 片段 在Android中有些Activity在手机上看起来很美观 但放在屏幕更大的平板类的设备上 可能就不一样了 而Fragment能在一个Activity中内嵌多个独立的小Activity 有效的解决了app在
  • 海盗分金币问题 编程+思路 C++

    来自招银网络科技笔试测试岗位的一道题目 海滩上有一堆金币 n个海盗来分 第一个海盗把这堆金币平均分成3份 如果不够就从自己口袋拿出来补齐 并拿走了一份 第二个海盗把剩下的金币又平均分成3份 如果不够再从自己口袋补齐 并拿走了一份 第三个 第
  • 利用iText将多张图处转为一个pdf

    项目需要将多张JPG格式的图片转为一个PDF再进行后续处理 百度查资源看博客发现用iText比较简单 也没想到会这么简单 刷新了我的彩虹心 话不多说 直接上code 项目用的是maven进行管理的 所以最开始需要引入依赖 如下