使用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。 tzwhyqq 发表于 2019-7-8 17:56
有代码就更好了。主要那个aspose这个不好找,而且你这种转换,不知道有没有看格式有没有失不对,有些字体会 ...
这个包是我从csdn上找到,转换我试了很多文档,暂时没发现问题 phubing 发表于 2019-7-9 09:29
但如果是不知道word文档有多少页呢?请问楼主是如何处理的,谢谢
word文档的页数是在代码里获取的,文档的页数没有影响 点个赞!!!!! 学习了,很棒 求代码。
很不错,学习了 感谢分享,学习啦 有代码就更好了。主要那个aspose这个不好找,而且你这种转换,不知道有没有看格式有没有失不对,有些字体会有问题。 666,不错哦 学习一下,也不错 学习一下,也不错。