ProgramerFangL 发表于 2019-7-8 16:51

使用Java实现word文档转图片 在线预览

项目上有个需求,要实现上传word,预览的时候用word每一页的图片进行预览。
一共有两种方法。第一种想到的方法是将word先转换为pdf,然后将pdf的每一页都保存为图片;第二种方法是将word直接转换为图片。
在第一种方式实现的过程中发现在文档页数变大时,转pdf时间较长,所以直接使用word转图片方法。
主要使用 aspose-words-*-jdk16.jar。破解版的jar是来自于这个大哥

https://static.52pojie.cn/static/image/hrline/1.gif


    /**
   * licence 验证
   * @return
   * @throws Exception
   */
    public static boolean getLicense() throws Exception {
      boolean result = false;
      try {
            InputStream is = com.aspose.words.Document.class
                  .getResourceAsStream("/com.aspose.words.lic_2999.xml");
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
            is.close();
      } catch (Exception e) {
            logger.error("License 获取失败");
            e.printStackTrace();
            throw e;
      }
      return result;
    }
    /**
   *文档转图片
   * @Param inPath 传入文档地址
   * @param outDir 输出的图片文件夹地址
   */
    public static void doc2Img(String inPath, String outDir){
      try {
            if (!getLicense()) {
                throw new Exception("com.aspose.words lic ERROR!");
            }
            logger.info(inPath + " -> " + outDir);
            long old = System.currentTimeMillis();
            // word文档
            Document doc = new Document(inPath);
            // 支持RTF HTML,OpenDocument, PDF,EPUB, XPS转换
            ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);
            int pageCount = doc.getPageCount();
            for (int i = 0; i < pageCount; i++) {
                File file = new File(outDir+"/"+i+".png");
                logger.info(outDir+"/"+i+".png");
                FileOutputStream os = new FileOutputStream(file);
                options.setPageIndex(i);
                doc.save(os, options);
                os.close();
            }
            long now = System.currentTimeMillis();
            logger.info("convert OK! " + ((now - old) / 1000.0) + "秒");
      } catch (Exception e) {
            e.printStackTrace();
      }
    }

https://static.52pojie.cn/static/image/hrline/1.gif


在spring boot项目配置文件中配置文件存储目录为resource地址
spring:
resources:
    static-locations: file:/D:/img_path/

https://static.52pojie.cn/static/image/hrline/1.gif


在预览时只需要到对应的图片文件夹下找到相应的文档图片,按图片序号即可实现根据page size 分页预览的功能了,返回如下:
{
"succeed": true,
"model": {
    "list": [
      "http://192.168.250.247:8888/be62bd8c-0a1a-47f8-8abc-839c22c0072a/img/0.png",
      "http://192.168.250.247:8888/be62bd8c-0a1a-47f8-8abc-839c22c0072a/img/1.png",
      "http://192.168.250.247:8888/be62bd8c-0a1a-47f8-8abc-839c22c0072a/img/2.png"
    ],
    "page": 1,
    "size": 3,
    "totalCount": 103,
    "totalPage": 35
},
"message": ""
}
实现功能,OVER。

ProgramerFangL 发表于 2019-7-9 14:39

tzwhyqq 发表于 2019-7-8 17:56
有代码就更好了。主要那个aspose这个不好找,而且你这种转换,不知道有没有看格式有没有失不对,有些字体会 ...

这个包是我从csdn上找到,转换我试了很多文档,暂时没发现问题

ProgramerFangL 发表于 2019-7-9 14:40

phubing 发表于 2019-7-9 09:29
但如果是不知道word文档有多少页呢?请问楼主是如何处理的,谢谢

word文档的页数是在代码里获取的,文档的页数没有影响

阿斯巴德 发表于 2019-7-8 17:26

点个赞!!!!!

小飞侠1994 发表于 2019-7-8 17:29

学习了,很棒

feeling 发表于 2019-7-8 17:35

求代码。

ccyf1314 发表于 2019-7-8 17:50



很不错,学习了

luckyme019 发表于 2019-7-8 17:54

感谢分享,学习啦

tzwhyqq 发表于 2019-7-8 17:56

有代码就更好了。主要那个aspose这个不好找,而且你这种转换,不知道有没有看格式有没有失不对,有些字体会有问题。

huangyuhou 发表于 2019-7-8 18:57

666,不错哦

wxx521 发表于 2019-7-8 22:31

学习一下,也不错

挂号信坪萌 发表于 2019-7-8 23:42

学习一下,也不错。
页: [1] 2 3
查看完整版本: 使用Java实现word文档转图片 在线预览