pdf、pfd、img互转工具类

这篇具有很好参考价值的文章主要介绍了pdf、pfd、img互转工具类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.ofdrw</groupId>
            <artifactId>ofdrw-full</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>com.pansoft.xbrl</groupId>
            <artifactId>xbrl-json</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.27</version>
        </dependency>

/**
 * @author : maqingbo
 * @email : qingbo.my@gmail.com
 * @date : 2023/8/8:13:04  周二
 */
public class OfdUtils {

    /**
     * ofd->img
     * @param ofdInputFile
     * @param imgOutputFile
     * @throws FileNotFoundException
     */
    public static void ofd2Img(String ofdInputFile, String imgOutputFile) throws FileNotFoundException {
        String tempPdfPath = System.getProperty("java.io.tmpdir") + File.separator + "temp.pdf";
        ofd2Pdf(ofdInputFile, tempPdfPath);
        pdf2Img(tempPdfPath, imgOutputFile,false);
        File file = new File(tempPdfPath);
        FileUtil.del(file);
    }

    /**
     * pdf->img
     * @param pfdInputFile
     * @param imgOutputFile
     * @param outLongImage 是否输出长图
     */
    public static void pdf2Img(String pfdInputFile, String imgOutputFile,boolean outLongImage) {
        if (imgOutputFile.lastIndexOf(".") == -1) {
            throw new RuntimeException("PDF转图片失败");
        }
        String suffix = imgOutputFile.substring(imgOutputFile.lastIndexOf(".") + 1);
        String imgFileName = imgOutputFile.substring(0, imgOutputFile.lastIndexOf("."));
        List<String> imagePath = new ArrayList<>();
        PDDocument document = null;
        try {
            document = PDDocument.load(new File(pfdInputFile));
            PDFRenderer renderer = new PDFRenderer(document);
            for (int pageIndex = 0; pageIndex < document.getNumberOfPages(); pageIndex++) {
                BufferedImage image = renderer.renderImageWithDPI(pageIndex, 300);
                String index = String.format("%03d", pageIndex + 1);
                String newFileName = imgFileName.concat("-").concat(index);
                File imgFile = new File(newFileName.concat(".").concat(suffix));
                ImageIO.write(image, suffix,imgFile);
                imagePath.add(imgFile.getAbsolutePath());
            }
            if (outLongImage){
                concatenateImages(imagePath,imgOutputFile);
            }
            System.out.println("OFD文件已成功转换为图片!");
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("PDF转图片失败");
        } finally {
            if (document != null) {
                try {
                    document.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 多张图片拼接成一张长图
     *
     * @param imagePaths
     */
    public static void concatenateImages(List<String> imagePaths, String outputImagePath) throws IOException {
        // 加载所有图片并获取宽度和高度
        BufferedImage[] images = new BufferedImage[imagePaths.size()];
        int totalHeight = 0;
        int maxWidth = 0;

        for (int i = 0; i < imagePaths.size(); i++) {
            try {
                images[i] = ImageIO.read(new File(imagePaths.get(i)));
            } catch (IOException e) {
                e.printStackTrace();
                throw new IOException();
            }
            totalHeight += images[i].getHeight();
            maxWidth = Math.max(maxWidth, images[i].getWidth());
        }

        // 创建空白长图
        BufferedImage concatImage = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = concatImage.createGraphics();
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, maxWidth, totalHeight);

        // 拼接图片
        int currentHeight = 0;
        for (BufferedImage image : images) {
            g2d.drawImage(image, 0, currentHeight, null);
            currentHeight += image.getHeight();
        }

        g2d.dispose();

        // 保存拼接后的长图
        ImageIO.write(concatImage, "PNG", new File(outputImagePath));

        //删除零散图片
        for (String imagePath : imagePaths) {
            FileUtil.del(new File(imagePath));
        }
    }

    /**
     * ofd->pdf
     * @param ofdInputStream
     * @param pdfOutputStream
     */
    public static void ofd2Pdf(InputStream ofdInputStream, OutputStream pdfOutputStream) {
        ConvertHelper.toPdf(ofdInputStream, pdfOutputStream);
    }

    public static void ofd2Pdf(String ofdPath, String pdfPath) {
        FileInputStream ofdInputStream = null;
        FileOutputStream pdfOutputStream = null;
        try {
            ofdInputStream = new FileInputStream(ofdPath);
            pdfOutputStream = new FileOutputStream(pdfPath);
            ConvertHelper.toPdf(ofdInputStream, pdfOutputStream);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("OFD转PDF异常");
        } finally {
            if (ofdInputStream != null) {
                try {
                    ofdInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (pdfOutputStream != null) {
                try {
                    pdfOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

文章来源地址https://www.toymoban.com/news/detail-644547.html

到了这里,关于pdf、pfd、img互转工具类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android OTA 相关工具(七) 使用 lpunpack 解包 super.img

    从 Android 10(Q) 开始,引入了动态分区,伴随的就是一组动态分区内容数据增删改查相关的操作,以及这些操作所需要的工具,包括 lpdump, lpmake, lpunpack, lpadd, lpflash。 工具名称前缀 lp 表示是 logic partition,即逻辑分区。 所谓逻辑分区,是相对于物理分区而言,因为动态分区内部

    2024年02月02日
    浏览(88)
  • 本地AI text2img生成工具【类似midjourney】

    大家好,今天我要向大家推荐一款无需翻墙即可在本地生成图片的软件。这个软件可以在GitHub上找到。 我们可以点击code下载zip或者通过desktop进行下载。 下载完成后,它会生成一个目录 我们需要在电脑上配置两个环境才能运行这个脚本。 首先,我们需要下载Python 3.10.6,并配

    2024年02月16日
    浏览(51)
  • vue 页面内容生成图片\PFD方法

    1.下载插件 2.引入 3.使用方法 在需要生成的内容绑定类名或id,在下面获取元素 js  less样式   效果  点击生成图片或pdf 图片没有宽高大小限制 pdf宽度大概800px,长度也有限制,不建议使用pdf

    2024年01月17日
    浏览(31)
  • Android super.img解包和打包指南(含工具下载lpunpack、lpmake、lpdump)

    本文所有命令均需要在linux 上执行 1、将Android sparse image格式的super.img转成二进制文件 $ sudo apt install android-sdk-libsparse-utils $ simg2img super.img  super.img.bin 2、下载工具lpunpack 和lpmake、lpdump 以及其依赖库 下载地址:https://download.csdn.net/download/ab6326795/88800347 linux 下可用。 解压密码

    2024年02月19日
    浏览(126)
  • 如何自己实现一个丝滑的流程图绘制工具(五)bpmn的xml和json互转

    背景 因为服务端给的数据并不是xml,而且服务端要拿的数据是json,所以我们只能xml和json互转,来完成和服务端的对接 xml转json jsonxml.js json 转为xml

    2024年02月11日
    浏览(45)
  • (JAVA)hutool工具类-Date<——>String类型互转,加日期操作加一年、一月、一星期、一天、一分、一秒操作

    之前小编去搜索,把时间格式转为String类型,搜索好几篇文章都还用 【 new SimpleDateFormat () 】 去转换,现在小编用hutool里的DateUtil里的方法,简单方便一行代码搞定!! 结果如下:  效果图如下 附加如下时间加减操作:  这些都是格式,看哪种满足需求 英文格式转中文格式

    2024年02月13日
    浏览(47)
  • 从 PDF 删除PDF 页面的 10 大工具

    PDF 文件是全世界几乎每个人最常用的页面之一。借助 PDF 文件,您可以通过任何在线或离线媒体轻松共享信息。但是,如果您想编辑这些 PDF 文件,那么这个过程就很难改变,因为保持文件的原始形式和质量很重要。应该注意的是,PDF 文件通常由其创建者保护,有些文件对其

    2024年01月16日
    浏览(57)
  • 工具分享 | PDF文档解析工具PyMuPDF

    1 需求描述 最近工作需要 从PDF文档中按照章节解析出对应的文本和图片(后续可能还会有表格) ,经过调研,找到了一个功能强大的解析工具MuPDF,对应的Python包是 PyMuPDF 。本篇博客记录使用它来实现具体功能。 官方文档:https://pymupdf.readthedocs.io/en/latest/index.html 2 利用书签中标

    2024年02月11日
    浏览(106)
  • 电脑如何pdf转图片?pdf转图片工具介绍

    无论是为了共享、展示、编辑、安全保护、印刷出版、学术研究还是教育目的,使用电脑pdf转图片都是一种非常实用的工具和技术,它提供了更多的灵活性、可视化效果和安全性,适用于各种日常使用场景,那么有没有好用的pdf转图片工具推荐呢?当然有啦,小编今天分享的

    2024年01月23日
    浏览(39)
  • PDF Guru 通用型PDF文件处理工具

    ## 项目简介 PDF Guru是一个通用型PDF文件处理工具,包含PDF合并、拆分、旋转、水印、加密、转换等20多项常用功能,完全开源,个人免费使用,界面简洁,简单易用。 虽然目前网上关于PDF处理的工具有很多,但是都有一些缺点: 1. 专业的PDF编辑软件对于高级一点的功能(添加

    2024年04月16日
    浏览(84)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包