Java中Word与PDF转换为图片的方法详解

 更新时间:2024年10月22日 10:31:06   作者:摘星喵Pro  
这篇文章主要为大家详细介绍了如何使用Java实现将Word与PDF转换为图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

Word、PDF转换为图片Java

需求要在小程序端展示文档内容,所以将文档每页转换为图片后显示

参考和其他等方案:

Java实现PDF转图片的三种方法

Java实现word文档转成图片的示例详解

Word转换为图片

<!-- word转图工具 -->
<dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.8.0</version>
</dependency>
<dependency>
    <groupId>com.luhuiguo</groupId>
    <artifactId>aspose-words</artifactId>
    <version>23.1</version>
</dependency>
import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class WordToImageUtil {

    public static void main(String[] args) {
        wordToImage("C:\\Users\\Administrator\\Documents\\录入脚本\\324\\", "xxxx.doc");
    }

    public static List<String> wordToImage(String filePath, String fileName) {
        log.info("开始word转换为图片");
        List<String> resultList = new ArrayList<String>();

        // 获取文件路径分隔符
        String separator = File.separator;

        try {
            // 填充数据完毕的test.docx,在转换成图片
            File file1 = new File(filePath + separator + fileName); // 使用系统的路径分隔符
            // 打开生成的 Word 文件
            Document doc = new Document(Files.newInputStream(file1.toPath()));

            // 逐页将 Word 文件保存为图片(PNG格式)
            for (int i = 0; i < doc.getPageCount(); i++) {
                Document extractedPage = doc.extractPages(i, 1);
                // 拼接上文件名
                String path = filePath + separator + "tmpImg" + separator + removeFileExtension(fileName) + separator +
                        "img" + System.currentTimeMillis() + "_" + i + ".png"; // 使用系统的路径分隔符

                // 创建目录(如果不存在的话)
                File tmpDir = new File(filePath + separator + "tmpImg" + separator + removeFileExtension(fileName));
                if (!tmpDir.exists()) {
                    tmpDir.mkdirs(); // 创建目录
                }

                // 将 Word 文件保存为图片PNG格式
                extractedPage.save(path, SaveFormat.PNG);
                resultList.add(path);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new ArrayList<>();
        }
        log.info("结束word转换为图片");
        return resultList;
    }


    /**
     * 去掉后缀名
     * @param fileName
     * @return
     */
    public static String removeFileExtension(String fileName) {
        int dotIndex = fileName.lastIndexOf(".");
        if (dotIndex == -1) {
            return fileName; // 如果没有找到点,则返回原始文件名
        }
        return fileName.substring(0, dotIndex); // 返回去掉后缀名的文件名
    }
}

PDF转换为图片

<!--PDF转换为图片-->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>fontbox</artifactId>
    <version>2.0.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class PdfToImage {
    /**
     * 使用pdfbox将整个pdf转换成图片
     *
     * @param fileAddress 文件地址 如:C:\\Users\\user\\Desktop\\test
     * @param filename    PDF文件名不带后缀名
     * @param type        图片类型 png 和jpg
     */
    public static void pdf2png(String fileAddress, String filename, String type) {
        long startTime = System.currentTimeMillis();
        // 将文件地址和文件名拼接成路径 注意:线上环境不能使用\\拼接
        File file = new File(fileAddress + "\\" + filename + ".pdf");
        try {
            // 写入文件
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                // dpi为144,越高越清晰,转换越慢
                BufferedImage image = renderer.renderImageWithDPI(i, 144); // Windows native DPI
                // 将图片写出到该路径下
                ImageIO.write(image, type, new File(fileAddress + "\\" + filename + "_" + (i + 1) + "." + type));
            }
            long endTime = System.currentTimeMillis();
        	System.out.println("共耗时:" + ((endTime - startTime) / 1000.0) + "秒");  //转化用时
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        pdf2png("C:\\Users\\Administrator\\Documents\\xxx\\pdf", "文件名", "png");
    }
}

乱码问题

如果在linux运行遇到中文乱码,可尝试安装字体然后重启程序运行

参考:

CentOS系统中安装中文字体

  • Windows系统下的simsun.ttc字体文件复制到CentOS系统中,并修改字体文件名为simsun.ttc,一般字体位置在:/usr/share/fonts下
  • 安装fontconfig软件包,这是处理字体配置和缓存的工具。可以使用yum命令进行安装,例如:yum -y install fontconfig(查看是否已经存在)
  • 刷新字体缓存,使得新安装的字体能够被系统识别。使用fc-cache命令完成这一步骤。
  • 使用 fc-list 命令查看系统中已安装的字体列表
  • 通过grep命令搜索“simsun”来验证simsun.ttc字体是否成功安装

1、从本地找到字体:C:\Windows\Fonts

2、复制到Linux,我这里用的centos,复制字体到 /usr/share/fonts

3、安装fontconfig工具 yum -y install fontconfig

4、刷新字体缓存 fc-cache

5、查看字体列表是否完成安装 fc-list

以上就是Java中Word与PDF转换为图片的方法详解的详细内容,更多关于Java Word PDF转图片的资料请关注脚本之家其它相关文章!

相关文章

  • Java8使用Function读取文件

    Java8使用Function读取文件

    这篇文章主要为大家详细介绍了Java8如何使用Function读取文件,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2024-12-12
  • 浅谈Java中几种常见的比较器的实现方法

    浅谈Java中几种常见的比较器的实现方法

    下面小编就为大家带来一篇浅谈Java中几种常见的比较器的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Java手写一个日志框架的示例代码

    Java手写一个日志框架的示例代码

    日志框架是一种用于记录和管理应用程序运行时信息的软件组件,它通常提供了一套API让开发人员能够在代码中插入日志语句,下面我们就来学习一下如何手写一个日志框架吧
    2023-12-12
  • java8版本base64加密解密的实例

    java8版本base64加密解密的实例

    下面小编就为大家分享一篇java8版本base64加密解密的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • java8新特性之接口的static和default的使用

    java8新特性之接口的static和default的使用

    这篇文章主要介绍了java8新特性之接口的static和default的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Spring Task定时任务的配置和使用详解

    Spring Task定时任务的配置和使用详解

    本篇文章主要介绍了Spring Task定时任务的配置和使用详解,实例分析了Spring Task定时任务的配置和使用的技巧,非常具有实用价值,需要的朋友可以参考下
    2017-04-04
  • Spring Boot中使用Spring MVC的示例解析

    Spring Boot中使用Spring MVC的示例解析

    MVC 是一种常见的软件设计模式,用于分离应用程序的不同部分以实现松散耦合和高内聚性,这篇文章主要介绍了如何在Spring Boot中使用Spring MVC,需要的朋友可以参考下
    2023-04-04
  • spring boot整合mongo查询converter异常排查记录

    spring boot整合mongo查询converter异常排查记录

    这篇文章主要为大家介绍了spring boot整合mongo查询时抛出converter异常的排查解决记录,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-03-03
  • Gradle在国内配置镜像加速的实现步骤

    Gradle在国内配置镜像加速的实现步骤

    在国内使用 Gradle 构建项目时,最大的痛点就是 依赖下载贼慢,甚至卡死,下面教你如何 配置国内镜像加速 Gradle 下载依赖,主要是通过改写 repositories 中的源地址来实现,亲测有效,需要的朋友可以参考下
    2025-05-05
  • Springboot根据配置文件动态注入接口实现类详解

    Springboot根据配置文件动态注入接口实现类详解

    这篇文章主要介绍了Springboot根据配置文件动态注入接口实现类详解,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论