代码 - 多张图片合并成PDF(每页宽高即是当前页面图片的宽高)- easypdf

easy-pdf

1. 概述

代码仓库: https://gitee.com/dromara/x-easypdf

官网: https://www.x-easypdf.cn

2. 代码

2.1 多张图片转成PDF(每页PDF的宽高是当前页面图片的宽高)

图片构建: https://www.x-easypdf.cn/#/md/pdfbox/%E5%8A%A9%E6%89%8B%E8%AF%B4%E6%98%8E?id=%e5%9b%be%e7%89%87%e6%9e%84%e5%bb%ba

页面构建: https://www.x-easypdf.cn/#/md/pdfbox/%E5%8A%A9%E6%89%8B%E8%AF%B4%E6%98%8E?id=%e9%a1%b5%e9%9d%a2%e6%9e%84%e5%bb%ba

元素保存到某页面: https://www.x-easypdf.cn/#/md/pdfbox/%E5%8F%82%E8%80%83%E7%A4%BA%E4%BE%8B?id=%e5%88%86%e6%ae%b5%e4%bf%9d%e5%ad%98


依赖

        <!-- https://mvnrepository.com/artifact/wiki.xsx/x-easypdf -->
        <dependency>
            <groupId>wiki.xsx</groupId>
            <artifactId>x-easypdf</artifactId>
            <version>2.10.1</version>
        </dependency>


基于上述官方Demo进行代码合并-从而支持多张图片合并PDF

package work.linruchang;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.img.ImgUtil;
import cn.hutool.core.io.FileUtil;
import lombok.SneakyThrows;
import wiki.xsx.core.pdf.component.XEasyPdfComponent;
import wiki.xsx.core.pdf.doc.XEasyPdfDocument;
import wiki.xsx.core.pdf.doc.XEasyPdfPage;
import wiki.xsx.core.pdf.doc.XEasyPdfPageRectangle;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

/**
 * @author LinRuChang
 * @version 1.0
 * @date 2022/09/03
 * @since 1.8
 **/
public class OtherEasyPdfTest3 {

    /**
     * 本地文件转成Itex的图片对象  【转换失败不抛出异常直接返回null】
     *
     * @param imageFile    图片文件
     * @return
     */
    public static XEasyPdfComponent toEasyPdfImage(File imageFile) {
        return XEasyPdfHandler.Image.build(imageFile);
    }

    public static XEasyPdfPage customNewPageByImage(File image) {
        BufferedImage bufferedImage = ImgUtil.toBufferedImage(ImgUtil.toImage(FileUtil.readBytes(image)));
        return XEasyPdfHandler.Page.build(XEasyPdfPageRectangle.create(Convert.toFloat(bufferedImage.getWidth()), Convert.toFloat(bufferedImage.getHeight())));
    }


    /**
     * 图片转PDF(每张图就是每页的PDF(每张根据图片的宽高进行调整))
     * 文档:https://www.x-easypdf.cn/#/md/pdfbox/%E5%8A%A9%E6%89%8B%E8%AF%B4%E6%98%8E?id=%e5%9b%be%e7%89%87%e6%9e%84%e5%bb%ba
     *
     * @param imageFiles        一系列图片文件
     * @param targetPdfFilePath 合并后的pdf路径
     */
    @SneakyThrows
    public static File imagesToPdf(List<File> imageFiles, File targetPdfFilePath) {


        if (CollUtil.isNotEmpty(imageFiles) && targetPdfFilePath != null) {


            XEasyPdfDocument document = XEasyPdfHandler.Document.build();

            imageFiles.stream().forEachOrdered(imageFile -> {
                XEasyPdfComponent xEasyPdfImage = toEasyPdfImage(imageFile);
                XEasyPdfPage newPage = customNewPageByImage(imageFile);
                newPage.addComponent(xEasyPdfImage);
                document.addPage(newPage);
            });

            document.save(new FileOutputStream(targetPdfFilePath)).close();

            return targetPdfFilePath;
        }

        return null;
    }

    public static void main(String[] args) {
        List<File> imagesFiles = CollUtil.list(false, FileUtil.file("D:\\截图3\\合并截图0-版权信息.jpg"), FileUtil.file("D:\\截图3\\合并截图1-小桥老树致微信读书朋友的一封信+独家视频.jpg"));
        File resultPdf = FileUtil.file("D:\\截图3\\test2.pdf");
        imagesToPdf(imagesFiles, resultPdf);
    }

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pusjmS5q-1662196633574)(en-resource://database/61536:0)]



[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UufNbeGV-1662196633575)(en-resource://database/61538:0)]

x-easypdf基于pdfbox构建而来,极大降低使用门槛,以组件化的形式进行pdf的构建。简单易用,仅需一行代码,便可完pdf的操作。 x-easypdf特性: 1、轻量级 仅添加pdfbox相关依赖,无其他任何依赖 2、简单易用 仅需一行代码,便可完pdf的操作 3、自动换行分页 文本超出单行显示时,即可自动换行;内容超出单页显示时,即可自动分页 4、模板填充 提供内置方法,可轻松实现模板填充 5、组件化 页面所有内容均采用组件化形式进行构建,使用不同的组件组合方式,即可构造出理想的文档 6、扩展灵活 只需实现系统提供的接口,即可完自定义的组件扩展 x-easypdf软件架构: 1、document(文档):PDF文档 2、page(页面):若干个页面PDF文档 3、watermark(水印):每个页面可设置页面级别的独立水印,也可设置文档级别的全局水印,优先级为:页面级别>文档级别 4、header(页眉):每个页面可设置页面级别的独立页眉,也可设置文档级别的全局页眉,优先级为:页面级别>文档级别 5、footer(页脚):每个页面可设置页面级别的独立页脚,也可设置文档级别的全局页脚,优先级为:页面级别>文档级别 6、component(组件):核心,每个页面由若干个组件构 text(文本组件):已提供,文本写入组件 line(线条组件):已提供,线条写入组件 image(图片组件):已提供,图片写入组件 table(表格组件):已提供,表格写入组件,cell(单元格)->row(行)->table(表格) rect(方形组件):已提供,方形写入组件 后续将添加更多其他方便实用的组件。。。 x-easypdf安装教程: mvn clean install   x-easypdf 更新日志: v2.2.0 新特性: 1、新增文档改变页面尺寸方法 2、新增文档提取器简单表格的文本内容提取(单行单列) 3、表格组件功能增强,已支持添加图片与文本,更灵活的表格定义 原有变更: 1、移除XEasyPdfUtil工具类 2、文档XEasyPdfDocument#image方法变更为imager,返回值变为XEasyPdfDocumentImager(文档图像器) 3、文档操作完毕,需手动关闭文档(调用close方法关闭) 问题修复: 1、修复字体错误问题(issue#I2BGJ1,issue#I2BGM3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值