1、aspose的集成
看文章oss获取word文件通过aspose转pdf预览的实现记录
2、依赖
集成aspose所需要的部分依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
<!-- POI-word文件处理需要 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>args4j</groupId>
<artifactId>args4j</artifactId>
<version>2.32</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>3.2.1</version>
</dependency>
3、以流的形式将图片插入文件的实现
具体实现代码如下
代码块:
public RetResult previewInsertImg(String fileName, HttpServletResponse response) {
OSS ossClient = getOssClient();
String[] str = StringUtils.split(fileName, "\\.");
try {
OSSObject ossObject = ossClient.getObject(bucketName, "oss存储的位置/"+fileName);
//操作文档的类
XWPFDocument doc = new XWPFDocument(ossObject.getObjectContent());
XWPFParagraph interfaceNamePara = doc.createParagraph(); //创建一个新段落
XWPFRun run = interfaceNamePara.createRun(); //一个XWPFRun代表具有相同属性的一个区域
//获取图片(通过appuserid和tradid去拿签名图片),我的业务流中获取图片的方式。可以换成直接拿本地图片
BusOrderFilesSign busOrderFilesSign = new BusOrderFilesSign();
busOrderFilesSign.setFileAddress(fileName);
List<BusOrderFilesSign> select = busOrderFilesSignMapper.select(busOrderFilesSign);
for (BusOrderFilesSign orderFilesSign : select) {
BusOrderAppuserSignStatus busOrderAppuserSignStatus = new BusOrderAppuserSignStatus();
busOrderAppuserSignStatus.setTradId(orderFilesSign.getTradId());
busOrderAppuserSignStatus.setAppUserId(orderFilesSign.getUserId());
BusOrderAppuserSignStatus busOrderAppuserSignStatusget = busOrderAppuserSignStatusMapper.selectOne(busOrderAppuserSignStatus);
OSSObject imgobj = null;
try {
imgobj = ossClient.getObject(bucketName, "oss存储的位置/" + busOrderAppuserSignStatusget.getSignImg());
}catch (OSSException e){
System.out.println(e.getStackTrace());
return RetResponse.makeErrRsp("当前文件还未被签名");
}
//设置图片属性
String[] strimg = StringUtils.split(busOrderAppuserSignStatusget.getSignImg(), "\\.");
run.addPicture(imgobj.getObjectContent(),
XWPFDocument.PICTURE_TYPE_JPEG,
"img",
Units.toEMU(300),
Units.toEMU(150));
}
//OutputStream os = response.getOutputStream();//把doc输出到输出流
//doc.write(os);
ByteArrayOutputStream baos = new ByteArrayOutputStream();//二进制OutputStream
doc.write(baos);//文档写入流
ByteArrayInputStream in = new ByteArrayInputStream(baos.toByteArray());
previewAsposeWithInputStream(fileName,in,response);
doc.close();
//os.close();
baos.close();
return RetResponse.makeOkRsp("预览成功");
} catch (Exception e) {
e.printStackTrace();
}
return RetResponse.makeOkRsp("预览成功");
}
转换方法
public void previewAsposeWithInputStream(String fileName,InputStream inputStream, HttpServletResponse response) throws IOException {
String[] str = StringUtils.split(fileName, "\\.");
String prefix=".pdf";
BufferedInputStream fileInputStream =null;
try {
fileInputStream = new BufferedInputStream(inputStream);
// 获取文件后缀
String type =str[1];
if(type.equalsIgnoreCase("xlsx") || type.equalsIgnoreCase("xls") ){
//excel文档
//调用工具类将excel转换pdf
PdfUtilold.excel2pdfNew(fileInputStream,response.getOutputStream());
prefix=".pdf";
}else if(type.equalsIgnoreCase("docx") || type.equalsIgnoreCase("doc")){
//word文档
//调用工具类将word转换pdf
PdfUtilold.doc2pdfNew(fileInputStream,response.getOutputStream());
prefix=".pdf";
}
//request.setCharacterEncoding("UTF-8");
//response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=" + fileName+prefix);
response.setHeader("filename",fileName);
} catch (Exception e) {
e.printStackTrace();
}finally {
//hutool工具类的方法
IoUtil.close(fileInputStream);
IoUtil.close(response.getOutputStream());
inputStream.close();
}
}