Java实现web在线预览office⽂档与pdf⽂档实例
yq.aliyun/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX
摘要:本⽂讲的是Java实现web在线预览office⽂档与pdf⽂档实例, 1、⾸先我们需要到可以把office转换成pdf的⽅法,查资料发现有openoffice这⼀软件可以把office转换成pdf,这⼀软件先下载下来,然后记住⾃⼰安装的在那个位置。然后在cmd环境下进⼊安装⽬录的program⽬
1、⾸先我们需要到可以把office转换成pdf的⽅法,查资料发现有openoffice这⼀软件可以把office转换成pdf,这⼀软件先下载下来,然后记住⾃⼰安装的在那个位置。然后在cmd环境下进⼊安装⽬录的program⽬录,输⼊打开openoffice的命令:
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
输⼊完成之后在任务管理器可以看见soffice.bin的进程在任务管理器,这⼀服务就启动成功。当然在代码中转换office2pdf我们还需要⼀些架包。下载jodconverter-2.2.2架包,然后复制到lib⽬录下,引⼊架包就可以了。这个架包有如下包:
⽂档与pdf⽂档实例-office⽂档在线预览">
有⼀些项⽬重复的可以删除,根据实际情况⾃⼰处理。
2、我们需要到转换pdf2swf的⽅法。查资料发现swftools这个软件可以把pdf转换成swf⽂件。把它下下来安装好就可以了。
3、我们需要⼀个展⽰swf⽂件的容器,发现有flexpaper这个插件。⽽且展⽰效果还不错。所以我们需要下载这个插件。使⽤这个插件需要有三个js⽂件。分别是:jquery.js、flexpaper_flash.js、flexpaper_flash_debug.js。插件的名字是FlexPaperViewer.swf。
整个项⽬结如下:
准备⼯作完成下⾯开始编码.
转换类为DocConverter 的代码:
sims.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.tion.OpenOfficeConnection; import com.artofsolving.tion.SocketOpenOfficeConnection; import com.artofsolving.verter.OpenOfficeDocumentConverter; /**
* doc docx格式转换
*/
public class DocConverter {
private static final int environment = 1;// 环境 1:Windows 2:Linux
private String fileString;// (只涉及PDF2swf路径问题)
private String outputPath = "";// 输⼊路径,如果不设置就输出在默认的位置
private String fileName;
private File pdfFile;
ioc的实例private File swfFile;
private File docFile;
public DocConverter(String fileString) {
ini(fileString);
System.out.println("⽂件路径"+fileString);
}
/**
* * 重新设置file
*
* @param fileString
*            32.
*/
public void setFile(String fileString) {
ini(fileString);
}
/
**
*  * 初始化
*
* @param fileString
*
*/
private void ini(String fileString) {
this.fileString = fileString;
fileName = fileString.substring(0, fileString.lastIndexOf("."));
docFile = new File(fileString);
pdfFile = new File(fileName+ ".pdf");
swfFile = new File(fileName+ ".swf");
}
/**
*  转为PDF
*
* @param file
*
*/
private void doc2pdf() throws Exception {
if (ists()) {
if (!ists()) {
数组公式匹配
OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
try {
DocumentConverter converter = new OpenOfficeDocumentConverter(
connection);
多线程并发编程
// close the connection
connection.disconnect();
System.out.println("****pdf转换成功,PDF输出: "+ Path() + "****");
} catch (java.ConnectException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,openoffice 服务未启动!****");
throw e;
} catch (com.artofsolving.tion.OpenOfficeException e) {
e.printStackTrace();
System.out.println("****swf转换器异常,读取转换⽂件失败****");
throw e;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
} else {
System.out.println("****已经转换为pdf,不需要再进⾏转化 ****");
}
} else {
System.out.println("****swf转换器异常,需要转换的⽂档不存在,⽆法转换****");
}
}
/** * 转换成 swf */
@SuppressWarnings("unused")
private void pdf2swf() throws Exception {
Runtime r = Runtime();
if (!ists()) {
if (ists()) {
if (environment == 1) {// windows环境处理
try {
Process p = r.exec("D:/Program/ "+ Path() + " -o "+ Path() + " -T 9");                        System.out.print(InputStream()));
System.out.print(InputStream()));
if (ists()){
pdfFile.delete();
}
} catch (IOException e) {
e.printStackTrace();
throw e;
}
} else if (environment == 2) {// linux环境处理
try {
Process p = r.exec("pdf2swf" + Path()+ " -o " + Path() + " -T 9");                        System.out.print(InputStream()));
if (ists()) {
pdfFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
} else {
System.out.println("****pdf不存在,⽆法转换****");
}
} else {
System.out.println("****swf已经存在不需要转换****");
}
}
static String loadStream(InputStream in) throws IOException {
int ptr = 0;
in = new BufferedInputStream(in);
StringBuffer buffer = new StringBuffer();jquery下载文件请求
while ((ptr = in.read()) != -1) {
buffer.append((char) ptr);
}
String();
}
/**
* * 转换主⽅法
*/
@SuppressWarnings("unused")
public boolean conver() {
if (ists()) {
System.out.println("****swf转换器开始⼯作,该⽂件已经转换为 swf****");
return true;
}
if (environment == 1) {
System.out.println("****swf转换器开始⼯作,当前设置运⾏环境 windows****");
} else {
System.out.println("****swf转换器开始⼯作,当前设置运⾏环境 linux****");
}
try {
doc2pdf();
pdf2swf();
} catch (Exception e) {
e.printStackTrace();
return false;
}
System.out.println("⽂件存在吗?"+swfFile);
if (ists()) {
System.out.println("存在");
return true;
} else {
System.out.println("不存在");bootstrap方法spss步骤
return false;
}
}
/**
*返回⽂件路径
* @param
*/
public String getswfPath(){
if (ists()){
String tempString = Path();
tempString = placeAll("\\\\", "/");
System.out.println("最后⽂件路径为"+tempString);
return tempString;
} else {
return "⽂件不存在";
}
}
/**
* 设置输出路径
*
* @param outputPath
*/
public void setOutputPath(String outputPath){
this.outputPath = outputPath;
if (!outputPath.equals("")) {
String realName = fileName.substring(fileName.lastIndexOf("/"),
fileName.lastIndexOf("."));
if (outputPath.charAt(outputPath.length()) == '/') {
swfFile = new File(outputPath + realName + ".swf");
} else {
swfFile = new File(outputPath + realName + ".swf");
}
}
}
}
调⽤转换类只需要传word、ptt、excel、pdf⽂件所在的路径参数就可以了。
展⽰在线预览的jsp代码如下:
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String Attribute("swfpath").toString();
System.out.println("展⽰路径"+swfFilePath);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/flexpaper_flash.js"></script>
<script type="text/javascript" src="js/flexpaper_flash_debug.js"></script>
<!--  <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="js/flexpaper.js"></script>
<script type="text/javascript" src="js/flexpaper_handlers.js"></script>-->
<style type="text/css" media="screen">
html,body{
height: 100%;
}
body{
margin: 0;
padding: 0;
overflow: auto;
laravel文档下载}
#flashContent{
display: none;
}
</style>
<title>在线⽂档预览</title>
</head>
<body>
<div >
<a id="viewerPlaceHolder" ></a>
<script type="text/javascript">
var fp=new FlexPaperViewer('FlexPaperViewer','viewerPlaceHolder',{config:{SwfFile:escape('<%=swfFilePath%>'),Scale:1.2,
ZoomTransition:'easeOut',ZoomTime:0.5,ZoomInterval:0.2,FitPageOnLoad:false,FitWidthOnload:false,
FullScreenAsMaxWindow:false,ProgressiveLoading:false,MinZoomSize:0.2,MaxZoomSize:5,SearchMatchAll:false,
InitViewMode:'SinglePage',RenderingOrder : 'flash',ViewModeToolsVisible:true,ZoomToolsVisible:true,NavToolsVisible:true,CursorToolsVisible:true,
SearchToolsVisible:true,localeChain:'en_US'}});
</script>
</div>
</body>
</html>
其中可能会出现在线预览只能实现10页的情况,需要把RenderingOrder : 'flash',设置为flash才可以实现超过10页的在线预览。swfFilePat为转换后的⽂件所在路径。
注意问题:
1、发现错误⼀般是openoffice服务没有开启。
2、Linux环境下会存在中⽂乱码的问题,是linux下不像windows⽀持那么多字体,需要安装多的字体,并且把字体所在位置链接到flexpaper 所在位置。在使⽤pdf2swf加上参数-s languagedir=/usr/local/xpdf-chinese-simplified/。具体的⼀些参数请百度。
java将office⽂档pdf⽂档转换成swf⽂件在线预览
第⼀步,安装

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。