java实现openoffice在线预览文档

1.openoffice需要导入的jar包

jodconverter-core-3.0-beta-4.jar
juh-3.2.1.jar
jurt-3.2.1.jar
ridl-3.2.1.jar
unoil-3.2.1.jar**加粗样式**

2.js

function windowopenfile(urlp,billid,name){
			 var url=urlp+"?billid="+billid+"&storagetype="+name;
			 window.open(url);
		}

3.后台代码

//在线打开预览文档
	@RequestMapping("/fileview")
	public String fileview(Model model,String filepath,String sourceid) throws Exception{ 
		filepath="关.doc";
		//sourceid=new Base64Util().decodeToString(sourceid);
		final String path =request.getSession().getServletContext().getRealPath("/view/word") ;
		fileExists(path);
		final String pfdpath =request.getSession().getServletContext().getRealPath("/view/filetopdf/") ;
		fileExists(pfdpath);
		String filename=request.getSession().getServletContext().getRealPath("/vod/mp4");
		FileToPdf fileToPdf=new FileToPdf();
		String	wordfilename= StringUtils.substringBeforeLast(filepath, ".");
		//String wordfilename = filepath.substring(0, filepath.lastIndexOf("."));
		File  file=new File(pfdpath+"/"+wordfilename+".pdf");
		if(!file .exists()){
		  fileToPdf.docToPdf(new File(filename+"/"+filepath),new File(pfdpath+"/"+wordfilename+".pdf"));
		}
		System.out.println("fileToPdfpath"+pfdpath+"/"+wordfilename+".pdf");
		String osName = System.getProperty("os.name");
	    if(osName.toLowerCase().indexOf("windows")>-1){
	    	model.addAttribute("pdfname","/SCMS/view/filetopdf/"+wordfilename+".pdf");
	    }else{
	    	model.addAttribute("pdfname","/view/filetopdf/"+wordfilename+".pdf");
		}
		return "/admin/manage/pdf/exportPdf.ftl";
	}
	/**
     * 判断文件是否存在
     * */
    public static void fileExists(String path){
    	File file =new File(path);  
		//如果文件夹不存在则创建    
		if  (!file .exists()  && !file .isDirectory())      
		{       
		    file .mkdir();    
		}
			
    }

FileToPdf

package com.ams.util;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.tools.Tool;

import org.apache.commons.lang.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ams.ServiceConfig;
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

public class FileToPdf {
	@Autowired
	private HttpServletRequest request;

	public void docToPdf(File inputFile, File outputFile) {
		ServiceConfig serverconfig = new Tools().getConfig();
		String IP = serverconfig.getIP();
		System.out.println(IP);
		// 启动服务
		String OpenOffice_HOME = "";
		String command = "";
		String osName = System.getProperty("os.name");

		Process pro = null;
		OpenOfficeConnection connection = null;
		// 启动OpenOffice的服务
		 /*if(osName.toLowerCase().indexOf("windows")>-1){
			 command = OpenOffice_HOME + "program/soffice.exe --headless
			 --accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
		 }else{
			 command = OpenOffice_HOME + "program/startup.sh";
			 command = OpenOffice_HOME + "program/soffice --headless
			 --accept=\"socket,host=127.0.0.1,port=8100;urp;\"
			 --nofirststartwizard &";
		 }*/
		// System.out.println("command"+command);
		// connect to an OpenOffice.org instance running on port 8100
		try {
			connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
			connection.connect();

			if (outputFile.exists()) {
			} else {
				DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
				System.out.println(inputFile + "=" + outputFile);
				converter.convert(inputFile, outputFile);
			}

		} catch (Exception ex) {
			System.out.println("程序出错了");
			ex.printStackTrace();

		} finally {
			// close the connection
			if (connection != null) {
				connection.disconnect();
				// connection = null;
			}
			// pro.destroy();
		}
		System.out.println("生成" + outputFile.getName());
	}

	// 生产pdf线程
	static class TestThread extends java.lang.Thread {
		private File inputFile;
		private File outputFile;

		public void run() {
			FileToPdf t = new FileToPdf();
			t.docToPdf(inputFile, outputFile);
			System.out.println(outputFile.getName() + "文件已生成");
		}

		public void setInputFile(File inputFile) {
			this.inputFile = inputFile;
		}

		public void setOutputFile(File outputFile) {
			this.outputFile = outputFile;
		}
	}

	// 将pdf转换为图片
	public String pdftoimage(Model model, String filepath, String pdfimage, String wordfilename) throws Exception {
		String filename = filepath;
		File file = new File(filename);
		String imghtml = "";
		try {
			PDDocument doc = PDDocument.load(file);
			PDFRenderer renderer = new PDFRenderer(doc);
			int pageCount = doc.getNumberOfPages();
			for (int i = 0; i < pageCount; i++) {
				File file1 = new File(pdfimage +"/"+ wordfilename + i + ".png");
				// 如果文件夹不存在则创建
				if (file1.exists()) {
				} else {
					BufferedImage image = renderer.renderImageWithDPI(i, 296);
					// BufferedImage image = renderer.renderImage(i, 2.5f);
					ImageIO.write(image, "PNG", new File(pdfimage +"/"+wordfilename + i + ".png"));
				}
				String osName = System.getProperty("os.name");
				if (osName.toLowerCase().indexOf("windows") > -1) {
					imghtml += "<img src=\'" + "/SCMS/view/filetopdf/pdfimage/" + wordfilename + i + ".png"
							+ "\' οndragstart=\"return false;\" style=\'width:740px;height:740px;vertical-align:text-bottom;\'><br>";
				} else {
					imghtml += "<img src=\'" + "/view/filetopdf/pdfimage/" + wordfilename + i + ".png"
							+ "\' οndragstart=\"return false;\" style=\'width:740px;height:740px;vertical-align:text-bottom;\'><br>";
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		String pdfhtml = "<html><head><META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><div style=\"height:740px;overflow:auto\">"
				+ imghtml + "</div></body></html>";
		return pdfhtml;
	}

}

4.下载openoffice软件
5.找到openoffice软件根目录
eg:C:\Program Files (x86)\OpenOffice 4\program
6.cmd进入黑窗口
执行C:\Program Files (x86)\OpenOffice 4\program回车
执行soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard回车
7.js页面预览文档(exportPdf.ftl)(第一种)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HEAD>
 <#assign ctx = request.contextPath />
<META content="IE=7.0000" http-equiv="X-UA-Compatible">
<TITLE>文档预览</TITLE>
<META content="text/html; charset=UTF-8" http-equiv=content-type>
<META content=text/css http-equiv=Content-Style-Type>
<LINK rel=stylesheet type=text/css href="${ctx}/assets-web/pdf/jq.css" media=screen>
<STYLE type=text/css>
#main {
	TEXT-ALIGN: center; MARGIN: 20px; BACKGROUND: #fff
}
A.media {
	DISPLAY: block
}
DIV.media {
	MARGIN: auto; FONT-SIZE: small
}
DIV.media DIV {
	FONT-STYLE: italic; COLOR: #888
}
#lr {
	BORDER-BOTTOM: #eee 1px solid; BORDER-LEFT: #eee 1px solid; MARGIN: auto; BORDER-TOP: #eee 1px solid; BORDER-RIGHT: #eee 1px solid
}
DIV.example {
	BORDER-BOTTOM: #ccc 1px dashed; TEXT-ALIGN: left; BORDER-LEFT: #ccc 1px dashed; PADDING-BOTTOM: 20px; MARGIN: 15px 0px; PADDING-LEFT: 20px; PADDING-RIGHT: 20px; BACKGROUND: #ffe; CLEAR: left; BORDER-TOP: #ccc 1px dashed; BORDER-RIGHT: #ccc 1px dashed; PADDING-TOP: 20px
}
</STYLE>

<SCRIPT type=text/javascript 
src="${ctx}/assets-web/pdf/jquery.min.js"></SCRIPT>

<SCRIPT type=text/javascript 
src="${ctx}/assets-web/pdf/chili-1.7.pack.js"></SCRIPT>

<SCRIPT type=text/javascript 
src="${ctx}/assets-web/pdf/jquery.media.js"></SCRIPT>

<SCRIPT type=text/javascript 
src="${ctx}/assets-web/pdf/jquery.metadata.js"></SCRIPT>

<SCRIPT type=text/javascript>
    $(function() {
        $('a.media').media({width:1200, height:850});
    });
</SCRIPT>

<META name=GENERATOR content="MSHTML 9.00.8112.16520"></HEAD>
<BODY><!--${ctx}/vod/mp4/-->
<A class=media href="${(pdfname)!}">PDF File</A> 
<SCRIPT type=text/javascript src="${ctx}/assets-web/pdf/urchin.js"></SCRIPT>

</BODY></HTML>

7.js页面预览文档(exportPdf.ftl)(第二种)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HEAD>
 <#assign ctx = request.contextPath />
    <META content="IE=7.0000" http-equiv="X-UA-Compatible">
    <TITLE>文档预览</TITLE>
    <META content="text/html; charset=UTF-8" http-equiv=content-type>
    <META content=text/css http-equiv=Content-Style-Type>
    <LINK rel=stylesheet type=text/css href="${ctx}/assets/pdf/jq.css" media=screen>
<BODY>
   <script type="text/javascript">
       window.onload=function (ev) {
           PDFObject.embed("${(pdfname)!}","body");
       }
   </script>
    <script type="text/javascript" src="${ctx!}/assets/pdf/pdfobject.min.js" ></script>
</BODY></HTML>


pdfobject.min.js

/*
    PDFObject v2.0.201604172
    https://github.com/pipwerks/PDFObject
    Copyright (c) 2008-2016 Philip Hutchison
    MIT-style license: http://pipwerks.mit-license.org/
    UMD module pattern from https://github.com/umdjs/umd/blob/master/templates/returnExports.js
*/
(function(root,factory){if(typeof define==="function"&&define.amd){define([],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory()}else{root.PDFObject=factory()}})(this,function(){"use strict";if(typeof window==="undefined"||typeof navigator==="undefined"){return false}var pdfobjectversion="2.0.201604172",supportsPDFs,createAXO,isIE,supportsPdfMimeType=typeof navigator.mimeTypes["application/pdf"]!=="undefined",supportsPdfActiveX,buildFragmentString,log,embedError,embed,getTargetElement,generatePDFJSiframe,isIOS=function(){return/iphone|ipad|ipod/i.test(navigator.userAgent.toLowerCase())}(),generateEmbedElement;createAXO=function(type){var ax;try{ax=new ActiveXObject(type)}catch(e){ax=null}return ax};isIE=function(){return!!(window.ActiveXObject||"ActiveXObject"in window)};supportsPdfActiveX=function(){return!!(createAXO("AcroPDF.PDF")||createAXO("PDF.PdfCtrl"))};supportsPDFs=supportsPdfMimeType||isIE()&&supportsPdfActiveX();buildFragmentString=function(pdfParams){var string="",prop;if(pdfParams){for(prop in pdfParams){if(pdfParams.hasOwnProperty(prop)){string+=encodeURIComponent(prop)+"="+encodeURIComponent(pdfParams[prop])+"&"}}if(string){string="#"+string;string=string.slice(0,string.length-1)}}return string};log=function(msg){if(typeof console!=="undefined"&&console.log){console.log("[PDFObject] "+msg)}};embedError=function(msg){log(msg);return false};getTargetElement=function(targetSelector){var targetNode=document.body;if(typeof targetSelector==="string"){targetNode=document.querySelector(targetSelector)}else if(typeof jQuery!=="undefined"&&targetSelector instanceof jQuery&&targetSelector.length){targetNode=targetSelector.get(0)}else if(typeof targetSelector.nodeType!=="undefined"&&targetSelector.nodeType===1){targetNode=targetSelector}return targetNode};generatePDFJSiframe=function(targetNode,url,pdfOpenFragment,PDFJS_URL,id){var fullURL=PDFJS_URL+"?file="+encodeURIComponent(url)+pdfOpenFragment;var scrollfix=isIOS?"-webkit-overflow-scrolling: touch; overflow-y: scroll; ":"overflow: hidden; ";var iframe="<div style='"+scrollfix+"position: absolute; top: 0; right: 0; bottom: 0; left: 0;'><iframe  "+id+" src='"+fullURL+"' style='border: none; width: 100%; height: 100%;' frameborder='0'></iframe></div>";targetNode.className+=" pdfobject-container";targetNode.style.position="relative";targetNode.style.overflow="auto";targetNode.innerHTML=iframe;return targetNode.getElementsByTagName("iframe")[0]};generateEmbedElement=function(targetNode,targetSelector,url,pdfOpenFragment,width,height,id){var style="";if(targetSelector&&targetSelector!==document.body){style="width: "+width+"; height: "+height+";"}else{style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; width: 100%; height: 100%;"}targetNode.className+=" pdfobject-container";targetNode.innerHTML="<embed "+id+" class='pdfobject' src='"+url+pdfOpenFragment+"' type='application/pdf' style='overflow: auto; "+style+"'/>";return targetNode.getElementsByTagName("embed")[0]};embed=function(url,targetSelector,options){if(typeof url!=="string"){return embedError("URL is not valid")}targetSelector=typeof targetSelector!=="undefined"?targetSelector:false;options=typeof options!=="undefined"?options:{};var id=options.id&&typeof options.id==="string"?"id='"+options.id+"'":"",page=options.page?options.page:false,pdfOpenParams=options.pdfOpenParams?options.pdfOpenParams:{},fallbackLink=typeof options.fallbackLink!=="undefined"?options.fallbackLink:true,width=options.width?options.width:"100%",height=options.height?options.height:"100%",forcePDFJS=typeof options.forcePDFJS==="boolean"?options.forcePDFJS:false,PDFJS_URL=options.PDFJS_URL?options.PDFJS_URL:false,targetNode=getTargetElement(targetSelector),fallbackHTML="",pdfOpenFragment="",fallbackHTML_default="<p>This browser does not support inline PDFs. Please download the PDF to view it: <a href='[url]'>Download PDF</a></p>";if(!targetNode){return embedError("Target element cannot be determined")}if(page){pdfOpenParams.page=page}pdfOpenFragment=buildFragmentString(pdfOpenParams);if(forcePDFJS&&PDFJS_URL){return generatePDFJSiframe(targetNode,url,pdfOpenFragment,PDFJS_URL,id)}else if(supportsPDFs){return generateEmbedElement(targetNode,targetSelector,url,pdfOpenFragment,width,height,id)}else{if(PDFJS_URL){return generatePDFJSiframe(targetNode,url,pdfOpenFragment,PDFJS_URL,id)}else if(fallbackLink){fallbackHTML=typeof fallbackLink==="string"?fallbackLink:fallbackHTML_default;targetNode.innerHTML=fallbackHTML.replace(/\[url\]/g,url)}return embedError("This browser does not support embedded PDFs")}};return{embed:function(a,b,c){return embed(a,b,c)},pdfobjectversion:function(){return pdfobjectversion}(),supportsPDFs:function(){return supportsPDFs}()}});
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值