功能需求要求实现文档上传、下载、查看、删除,查看没弄过,别的就不提了,以下是我记录的实现文档在线查看的方法以及效果图
实现思路
首先把word文件转为pdf,然后在用js查看pdf文件实现在线查看功能。
主要用到的知识点:
1.word转pdf:
导入包 com.aspose.words.Document;
使用其中的
//pathFile是doc路径
Document document = new Document(pathFile.toString());
//pathDirs+File.separator+wordDate+"_"+netWork+".pdf"是pdf路径
File outputFile = new File(pathDirs+File.separator+wordDate+"_"+netWork+".pdf");
//操作文档保存
document.save(outputFile.getAbsolutePath(), com.aspose.words.SaveFormat.PDF);
2.把pdf通过response传给前台请求:(filePath是pdf的路径)
public void wrightWord(HttpServletRequest request, HttpServletResponse response,String filePath)
throws ServletException, IOException {
try {
//获取所要下载的文件名称
String fileName=filePath.substring(filePath.lastIndexOf(File.separator)+1,filePath.length());
String fileNameOld=fileName;
//根据文件名获取 MIME 类型
response.setCharacterEncoding("UTF-8");
//设置ContentType字段值
response.setContentType("application/pdf");
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); // firefox浏览器
} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器
}else if (request.getHeader("User-Agent").toUpperCase().indexOf("CHROME") > 0) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// 谷歌
}
//下载文件所在目录
String folder=filePath.replace(fileName,"");
response.addHeader("Content-type", "application/pdf");
response.addHeader("Content-Disposition", "attachment;filename="+fileName);
//通知文件流读取文件
InputStream in = new FileInputStream(filePath);
// InputStream in = getServletContext().getResourceAsStream(folder+filename);
//获取response对象的输出流
OutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int len;
//循环取出流中的数据
while((len = in.read(buffer)) != -1){
out.write(buffer,0,len);
}
out.flush();
in.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
3.前台显示pdf文件,实现在线查看功能:
其中showPDF是pdf容器,前边那个url是对应的请求获取pdf文件。外层那个div是用来展示pdf的,给用户感觉就是点击打开,返回页面关闭,没有放对应的css,主要就是js实现,这个自己灵活写。
关键使用打开pdf文件的代码: PDFObject.embed("/spdbnb/file/showJys?netWork="+netWork+"&wordDate="+wordDate,"#showPDF");