本人技术小白一枚,前些天老大让我写一个office在线预览的一个功能,跟百度网盘类似,各种找资料,总结一下我觉得比较好用的方法。
网上大概有这几种office在线预览的方法。
# 第一种
利用office online实现在线预览,Office平台提供了通过url的指向达到预览效果。
http://view.officeapps.live.com/op/view.aspx?src=
后面的src填写文档上传到服务器的地址,地址需要通过用URLEncode进行编译。
例:
http://view.officeapps.live.com/op/view.aspx?src=http%3a%2f%2fvideo.ch9.ms%2fbuild%2f2011%2fslides%2fTOOL-532T_Sutter.pptx
参照链接:
https://blog.youkuaiyun.com/csdn_cjgu/article/details/69389474
优点:这个功能由Office提供所以只需要拼接地址。
缺点:文档的访问地址不能直接使用 ip,需要通过域名访问,并且端口必须是 80 端口,Word、ppt文档的大小不能超过10M,Excel不能超过5M
# 第二种
1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件,
2.通过swfTools将pdf文件转换成swf格式的文件;
3.通过FlexPaper文档组件在页面上进行展示。
参照链接:
https://blog.youkuaiyun.com/tmac937436/article/details/70799687?locationNum=14&fps=1
总结一下这种方法的利弊
优点:openoffice有各种版本,支持跨平台,转换速度快;
缺点:转换的样式会有缺损,Excel和openoffice完美不兼容 = . = ,转换的时候会出现折行,切分等情况,效果很不理想;
FlexPaper这个是用Flash插件显示的,展示的效果优点low。
# 第三种
利用poi实现office在线预览
public static void PoiWord07ToHtml (HttpServletRequest request) throws IOException{
String path= "C:\\Users\\Administrator\\Desktop\\";
String file = "C:\\Users\\Administrator\\Desktop\\word07.docx";
String file2 ="C:\\Users\\Administrator\\Desktop\\word07.html";
File f = new File(file);
if (!f.exists()) {
System.out.println("Sorry File does not Exists!");
} else {
if (f.getName().endsWith(".docx") || f.getName().endsWith(".DOCX")) {
//读取文档内容
InputStream in = new FileInputStream(f);
XWPFDocument document = new XWPFDocument(in);
File imageFolderFile = new File(path);
//加载html页面时图片路径
XHTMLOptions options = XHTMLOptions.create().URIResolver( new BasicURIResolver("./"));
//图片保存文件夹路径
options.setExtractor(new FileImageExtractor(imageFolderFile));
OutputStream out = new FileOutputStream(new File(file2));
XHTMLConverter.getInstance().convert(document, out, options);
out.close();
} else {
System.out.println("Enter only MS Office 2007+ files");
}
}
}
总结一下这种方法的利弊
优点:纯java代码不需要第三方软件,poi对于Excel的解析比较好,可以完美转换。
缺点:jar包真的好难找啊,各种版本不兼容问题,比如word03和word07生成的分别是.doc和docx,poi对于.doc不识别,然后各种报错,由于生成的是Html所以它会把Word中的图片单独存放在一个文件下很占空间。
# 第四种
使用jacob实现office转换pdf达到预览功能。
pom文件中引用
<dependency>
<groupId>net.sf.jacob-project</groupId>
<artifactId>jacob</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!--poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14-beta1</version>
</dependency>
网上查找jacob对应版本包把jacob-1.14.3-x64.dll复制到需要在Java\jdk1.8.0\jre\bin目录下,
经过多次测试发现jacob对于Excel的转换有些问题,所以Excel的转换我用的是poi。
自定义一个工具类Word2Pdf