项目上有个需求,要实现上传word,预览的时候用word每一页的图片进行预览。
一共有两种方法。第一种想到的方法是将word先转换为pdf,然后将pdf的每一页都保存为图片;第二种方法是将word直接转换为图片。
在第一种方式实现的过程中发现在文档页数变大时,转pdf时间较长,所以直接使用word转图片方法。
主要使用 aspose-words-*-jdk16.jar。破解版的jar是来自于这个大哥
[Java] 纯文本查看 复制代码 /**
* 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;
}
/**
* 文档转图片
* [url=home.php?mod=space&uid=952169]@Param[/url] 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();
}
}
在spring boot项目配置文件中配置文件存储目录为resource地址
[Asm] 纯文本查看 复制代码 spring:
resources:
static-locations: file:/D:/img_path/
在预览时只需要到对应的图片文件夹下找到相应的文档图片,按图片序号即可实现根据page size 分页预览的功能了,返回如下:
[Asm] 纯文本查看 复制代码 {
"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。 |