精华内容
下载资源
问答
  • java结合OpenOffice和pdf2htmlEX实现word、excel、ppt、pdf转为html
  • OpenOffice SDK
  • java在线预览office

    千次下载 热门讨论 2013-12-21 16:17:52
    java使用openoffice swftools flexpaper2.1.9 实现在线预览功能
  • LibreOffice:java 预览Excel、java预览word、java预览DOCX
  • Java实现web在线预览office文档与pdf文档实例 在linux平台下转为pdf 需要安装
  • java实现文件在线预览word,将"doc", "docx", "xls", "xlsx", "ppt", "pptx",txt等转化为PDF,进行在线预览

    java实现office文件的在线预览

    要实现office文件的在线预览,需要将office文件转换为pdf文件,然后打开

    1. 首先需要安装openOfice
    2. 去官网先将openOffice 下载下来http://www.openoffice.org/download/
    3. 在java中导入依赖,导入依赖可能会导致报错,是因为本地maven仓库没有此依赖
    4.  所以需要去下载jar包,将jar放入本地maven资源仓库,在这里我提供了所需的jar包,有需要的可以去下载
    5. 链接:https://pan.baidu.com/s/1gRlN6KHlL3nMz5fB7l-EIQ        提取码:zxcv
    6. 下载号好之解压到Maven仓库的"com\artofsolving\"这个路径下( 如果没有这个路径就创建 )

    完成上面这步操作之后就可以配置Maven依赖了

            <dependency>
    			<groupId>com.artofsolving</groupId>
    			<artifactId>jodconverter</artifactId>
    			<version>2.2.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.openoffice</groupId>
    			<artifactId>jurt</artifactId>
    			<version>3.0.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.openoffice</groupId>
    			<artifactId>ridl</artifactId>
    			<version>3.0.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.openoffice</groupId>
    			<artifactId>juh</artifactId>
    			<version>3.0.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.openoffice</groupId>
    			<artifactId>unoil</artifactId>
    			<version>3.0.1</version>
    		</dependency>

    我将openoffice 的转换写成了一个工具类放在下面,有需要可以直接使用

    /**
     * Created with IntelliJ IDEA.
     *
     * @Auther: 李子叔叔
     * @Date: 2021/01/20/18:39
     * @Description:
     */
    public class OppenOffice {
        // 将word格式的文件转换为pdf格式
        //startFile为源文件地址
        //overFile为转换之后的文件地址
        public static boolean WordToPDF(String startFile, String overFile) throws IOException {
            // 源文件目录
            File inputFile = new File(startFile);
            System.out.println(startFile);
    
            //
            File outFile = new File(overFile);
            if (!inputFile.exists()) {
                System.out.println("源文件不存在!");
                return false;
            }
            // 输出文件目录
            File outputFile = new File(overFile);
            if (!outputFile.getParentFile().exists()) {
                outputFile.getParentFile().exists();
            }
    
    
            // 调用openoffice服务线程
            /** 我把openOffice下载到了 C:/Program Files (x86)/下  ,下面的写法自己修改编辑就可以**/
            String command = "C:\\Program Files (x86)\\OpenOffice 4\\program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
            Process p = Runtime.getRuntime().exec(command);
    
            // 连接openoffice服务
            OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
    
            connection.connect();
    
            // 转换
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            converter.convert(inputFile, outputFile);
    
            // 关闭连接
            connection.disconnect();
    
    //         关闭进程
            p.destroy();
            return  true;
        }
    }

    写完工具类之后在控制层拿到两个地址就可以直接调用工具类进行转换,在控制器用流的方式打开也行,也可以将转换完成之后的地址返回到前台

    使用流打开可以这样写

    //overoFile为转换之后的路径
    File file = new File(overFile);
            //判断文件是否存在
            if (file.exists()){
                byte[] data = null;
                try {
                    FileInputStream input = new FileInputStream(file);
                    data = new byte[input.available()];
                    input.read(data);
                    response.getOutputStream().write(data);
                    input.close();
                } catch (Exception e) {
                    System.out.println(e);
                }
    
            }else{
                return;
            }
    
    //js
     function openFile(fileId) {
           window.open("/openOffice?fileId="+fileId);
        }

    在前台直接打开可以这样写

     function openFile(fileId) {
            $.ajax({
                url:"/openOffice?fileId="+fileId,//控制器路径
                type:"get",
                async: false,
                success:function (data) {
                    $.modal.open("预览文件",data);
                }
            })
        }

     

    展开全文
  • Java实现web在线预览office文档与pdf文档实例,代码实现,为此提供代码共享。
  • Java实现在线预览--openOffice实现

    万次阅读 多人点赞 2019-07-31 18:39:57
    Java实现在线预览–openOffice实现

    #Java实现在线预览–openOffice实现
    ##简介
    之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。
    我的实现逻辑有两种:
    一、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为html格式。
    二、利用jodconverter(基于OpenOffice服务)将文件(.doc、.docx、.xls、.ppt)转化为pdf格式。
    转换成html格式大家都能理解,这样就可以直接在浏览器上查看了,也就实现了在线预览的功能;转换成pdf格式这点,需要用户安装了Adobe Reader XI,这样你会发现把pdf直接拖到浏览器页面可以直接打开预览,这样也就实现了在线预览的功能。
    ##将文件转化为html格式或者pdf格式
    话不多说,直接上代码。

    package com.pdfPreview.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ConnectException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    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;
    /**
     * 利用jodconverter(基于OpenOffice服务)将文件(*.doc、*.docx、*.xls、*.ppt)转化为html格式或者pdf格式,
     * 使用前请检查OpenOffice服务是否已经开启, OpenOffice进程名称:soffice.exe | soffice.bin
     * 
     * @author yjclsx
     */
    public class Doc2HtmlUtil {
    
    	private static Doc2HtmlUtil doc2HtmlUtil;
    
    	/**
    	 * 获取Doc2HtmlUtil实例
    	 */
    	public static synchronized Doc2HtmlUtil getDoc2HtmlUtilInstance() {
    		if (doc2HtmlUtil == null) {
    			doc2HtmlUtil = new Doc2HtmlUtil();
    		}
    		return doc2HtmlUtil;
    	}
    
    	/**
    	 * 转换文件成html
    	 * 
    	 * @param fromFileInputStream:
    	 * @throws IOException 
    	 */
    	public String file2Html(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {
    		Date date = new Date();
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    		String timesuffix = sdf.format(date);
    		String docFileName = null;
    		String htmFileName = null;
    		if("doc".equals(type)){
    			docFileName = "doc_" + timesuffix + ".doc";
    			htmFileName = "doc_" + timesuffix + ".html";
    		}else if("docx".equals(type)){
    			docFileName = "docx_" + timesuffix + ".docx";
    			htmFileName = "docx_" + timesuffix + ".html";
    		}else if("xls".equals(type)){
    			docFileName = "xls_" + timesuffix + ".xls";
    			htmFileName = "xls_" + timesuffix + ".html";
    		}else if("ppt".equals(type)){
    			docFileName = "ppt_" + timesuffix + ".ppt";
    			htmFileName = "ppt_" + timesuffix + ".html";
    		}else{
    			return null;
    		}
    
    		File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);
    		File docInputFile = new File(toFilePath + File.separatorChar + docFileName);
    		if (htmlOutputFile.exists())
    			htmlOutputFile.delete();
    		htmlOutputFile.createNewFile();
    		if (docInputFile.exists())
    			docInputFile.delete();
    		docInputFile.createNewFile();
    		/**
    		 * 由fromFileInputStream构建输入文件
    		 */
    		try {
    			OutputStream os = new FileOutputStream(docInputFile);
    			int bytesRead = 0;
    			byte[] buffer = new byte[1024 * 8];
    			while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
    				os.write(buffer, 0, bytesRead);
    			}
    
    			os.close();
    			fromFileInputStream.close();
    		} catch (IOException e) {
    		}
    	
    	    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    		try {
    			connection.connect();
    		} catch (ConnectException e) {
    			System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
    		}
    		// convert
    		DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    		converter.convert(docInputFile, htmlOutputFile);
    		connection.disconnect();
    		// 转换完之后删除word文件
    		docInputFile.delete();
    		return htmFileName;
    	}
    	
    	/**
    	 * 转换文件成pdf
    	 * 
    	 * @param fromFileInputStream:
    	 * @throws IOException 
    	 */
    	public String file2pdf(InputStream fromFileInputStream, String toFilePath,String type) throws IOException {
    		Date date = new Date();
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    		String timesuffix = sdf.format(date);
    		String docFileName = null;
    		String htmFileName = null;
    		if("doc".equals(type)){
    			docFileName = "doc_" + timesuffix + ".doc";
    			htmFileName = "doc_" + timesuffix + ".pdf";
    		}else if("docx".equals(type)){
    			docFileName = "docx_" + timesuffix + ".docx";
    			htmFileName = "docx_" + timesuffix + ".pdf";
    		}else if("xls".equals(type)){
    			docFileName = "xls_" + timesuffix + ".xls";
    			htmFileName = "xls_" + timesuffix + ".pdf";
    		}else if("ppt".equals(type)){
    			docFileName = "ppt_" + timesuffix + ".ppt";
    			htmFileName = "ppt_" + timesuffix + ".pdf";
    		}else{
    			return null;
    		}
    
    		File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);
    		File docInputFile = new File(toFilePath + File.separatorChar + docFileName);
    		if (htmlOutputFile.exists())
    			htmlOutputFile.delete();
    		htmlOutputFile.createNewFile();
    		if (docInputFile.exists())
    			docInputFile.delete();
    		docInputFile.createNewFile();
    		/**
    		 * 由fromFileInputStream构建输入文件
    		 */
    		try {
    			OutputStream os = new FileOutputStream(docInputFile);
    			int bytesRead = 0;
    			byte[] buffer = new byte[1024 * 8];
    			while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
    				os.write(buffer, 0, bytesRead);
    			}
    
    			os.close();
    			fromFileInputStream.close();
    		} catch (IOException e) {
    		}
    
    		OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    		try {
    			connection.connect();
    		} catch (ConnectException e) {
    			System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
    		}
    		// convert
    		DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    		converter.convert(docInputFile, htmlOutputFile);
    		connection.disconnect();
    		// 转换完之后删除word文件
    		docInputFile.delete();
    		return htmFileName;
    	}
    	
    	public static void main(String[] args) throws IOException {
    		Doc2HtmlUtil coc2HtmlUtil = getDoc2HtmlUtilInstance();
    		File file = null;
    		FileInputStream fileInputStream = null;
    		
    		file = new File("D:/poi-test/exportExcel.xls");
    		fileInputStream = new FileInputStream(file);
    //		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/xls","xls");
    		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/xls","xls");
    		
    		file = new File("D:/poi-test/test.doc");
    		fileInputStream = new FileInputStream(file);
    //		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/doc","doc");
    		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/doc","doc");
    		
    		file = new File("D:/poi-test/周报模版.ppt");
    		fileInputStream = new FileInputStream(file);
    //		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");
    		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");
    		
    		file = new File("D:/poi-test/test.docx");
    		fileInputStream = new FileInputStream(file);
    //		coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/docx","docx");
    		coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/docx","docx");
    		
    	}
    
    }
    

    转换成html和转换成pdf的过程几乎一样,只是在创建输出的File时前者命名为XXX.html,后者命名为XXX.pdf,在执行converter.convert(docInputFile, htmlOutputFile);时,jodconverter会自己根据文件类型名转换成对应的文件。
    注意,main方法里别file2Html和file2pdf都调用,会报错的,要么转html,要么转pdf,只能选一个。还有就是在执行之前,需要启动openOffice的服务:在openOffice目录下的命令窗口中执行soffice -headless -accept=“socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard即可启动。
    以上需要引入jodconverter的jar包。

    展开全文
  • 需要安装安装openofice和SWFTools 软件,实测可用。 用以下命令启动OpenOffice服务 CMD命令进入OpenOffice\program soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard ...
  • 最全JAVA实现Office在线预览调研,OpenOffice,LibreOffice,POI等已有技术归纳整理,附带链接。
  • Java实现Office在线预览

    千次阅读 2017-04-26 14:00:29
    上传文件是我们在开发中经常遇到的需求,而某些情况下,我们需要实现Office的在线预览功能。 一.下载及安装软件 1.安装OpenOffice软件 ,该软件的作用是将Office转换为Pdf 该软件是Apache旗下的一个免费的...

    上传文件是我们在开发中经常遇到的需求,而某些情况下,我们需要实现Office的在线预览功能。

    一.下载及安装软件

    1.安装OpenOffice软件 ,该软件的作用是将Office转换为Pdf

    该软件是Apache旗下的一个免费的文字处理软件,下载地址:Apache OpenOffice的链接

    2.安装Swftools软件,作用是将Pdf转换为Swf

    下载链接:Swftools官网下载

    3.安装FlexPaper,该软件的作用是解析并显示SWF格式的文件

    下载链接:FlexPaper官网链接

    4.执行完上述工作后,进入OpenOffice安装目录后启动OpenOffice服务

    执行命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard



    二.开发部分对应介绍

      准备相应开发工具jar包

      

     相关js包

      

     如果选用pdfobject.js可选择不用FlexPaper的特性,因为该脚本就是为了动态加载pdf。

     

      如果使用FlexPaper,必须将FlexPaperViewer.swf将客户端文件放在一起


     项目lib完整jar包图:

     

     辅助转换类DocConverter:

     

    package com.itmyhome.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.jodconverter.openoffice.connection.OpenOfficeConnection;
    import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
    import com.artofsolving.jodconverter.openoffice.converter.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=null;
    	private File swfFile=null;
    	private File docFile=null;
    	
    	public DocConverter(String fileString) {
    		ini(fileString);
    	}
    
    	/*
    	  *重新设置file
    	 *
    	 * @param fileString
    	 */
    	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
    	 * OpenOffice的作用是将office转换为pdf
    	 * @param
    	 */
    	private void doc2pdf() throws Exception {
    		if (docFile.exists()) {
    			if (!pdfFile.exists()) {
    				//启动OpenOffice服务        soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 
    				OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    				try {
    					connection.connect();
    					DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
    					converter.convert(docFile, pdfFile);
    					// close the connection
    					connection.disconnect();
    					System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");
    				} catch (java.net.ConnectException e) {
    					e.printStackTrace();
    					System.out.println("****swf转换器异常,openoffice服务未启动!****");
    					throw e;
    				} catch (com.artofsolving.jodconverter.openoffice.connection.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
    	 * swftools是将pdf转换为swf
    	 */
    	@SuppressWarnings("unused")
    	private void pdf2swf() throws Exception {
    		Runtime r = Runtime.getRuntime();
    		if (!swfFile.exists()) {
    			if (pdfFile.exists()) {
    				if (environment == 1) {// windows环境处理
    					try {
    						Process p = r.exec("D:/swftools/pdf2swf.exe	"+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9");
    						System.out.println(loadStream(p.getInputStream()));
    						System.err.println(loadStream(p.getErrorStream()));
    						System.out.println(loadStream(p.getInputStream()));
    						System.err.println("****swf转换成功,文件输出:"
    								+ swfFile.getPath() + "****");
    						/*if (pdfFile.exists()) {
    							pdfFile.delete();
    						}*/
    					} catch (IOException e) {
    						e.printStackTrace();
    						throw e;
    					}
    				} else if (environment == 2) {// linux环境处理
    					try {
    						Process p = r.exec("pdf2swf " + pdfFile.getPath()
    								+ " -o " + swfFile.getPath() + " -T 9");
    						System.out.print(loadStream(p.getInputStream()));
    						System.err.print(loadStream(p.getErrorStream()));
    						System.err.println("****swf转换成功,文件输出:"
    								+ swfFile.getPath() + "****");
    						if (pdfFile.exists()) {
    							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();
    
    		while ((ptr = in.read()) != -1) {
    			buffer.append((char) ptr);
    		}
    
    		return buffer.toString();
    	}
    	/**
    	 * 转换主方法
    	 */
    	@SuppressWarnings("unused")
    	public boolean conver() {
    
    		if (swfFile.exists()) {
    			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;
    		}
    
    		if (swfFile.exists()) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    
    	/**
    	 * 返回文件路径
    	 *
    	 * @param
    	 */
    	public String getswfPath() {
    		if (swfFile.exists()) {
    			String tempString = swfFile.getPath();
    			tempString = tempString.replaceAll("\\\\", "/");
    			return tempString;
    		} else {
    			return "";
    		}
    
    	}
    	/**
    	 * 设置输出路径
    	 */
    	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");
    			}
    		}
    	}
    
    }  

    文件上传和接口调用类 FileController:

     

    package com.itmyhome.web;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import com.itmyhome.util.DocConverter;
    
    public class FileController extends HttpServlet {
        
    	private static final long serialVersionUID = 1L;
    	// 保存文件的目录
    	private static String PATH_FOLDER = "/";
    	// 存放临时文件的目录
    	private static String TEMP_FOLDER = "/";
    	
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		 doPost(req, resp);
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		// 获得磁盘文件条目工厂
    				DiskFileItemFactory factory = new DiskFileItemFactory();
    
    				// 如果没以下两行设置的话,上传大的 文件 会占用 很多内存,
    				// 设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同
    				/**
    				 * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem
    				 * 格式的 然后再将其真正写到 对应目录的硬盘上
    				 */
    				factory.setRepository(new File(TEMP_FOLDER));
    				// 设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室
    				factory.setSizeThreshold(1024 * 1024);
    
    				// 高水平的API文件上传处理
    				ServletFileUpload upload = new ServletFileUpload(factory);
    
    		
    					// 提交上来的信息都在这个list里面
    					// 这意味着可以上传多个文件
    					// 请自行组织代码
    				try{
    					@SuppressWarnings("unchecked")
    					List<FileItem> list = upload.parseRequest(request);
    					// 获取上传的文件
    					FileItem item = getUploadFileItem(list);
    					// 获取文件名
    					String filename = getUploadFileName(item);
    
    
    
    					String filetype = filename.substring(filename.lastIndexOf(".") + 1,
    							filename.length());
    
    					filename = Long.toString(System.currentTimeMillis()) + "."
    							+ filetype;
    
    					System.out.println("存放目录:" + PATH_FOLDER);
    					System.out.println("文件名:" + filename);
    
    					// 真正写到磁盘上
    					item.write(new File(PATH_FOLDER, filename)); // 第三方提供的
    			
    
    				
    					
    	
    						String newDir = Long.toString(System.currentTimeMillis());
    				
    				
    						//调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法
    						DocConverter d = new DocConverter(PATH_FOLDER + "/" + filename);
    						//调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf;
    						d.conver();
    						System.out.println(d.getswfPath());
    						//生成swf相对路径,以便传递给flexpaper播放器
    						String swfpath = "upload"+d.getswfPath().substring(d.getswfPath().lastIndexOf("/"));
    						System.out.println(swfpath);
    						//将相对路径放入sessio中保存
    					
    						String pdfpath=swfpath.substring(0, swfpath.lastIndexOf(".")+1)+"pdf";
    						Map map=new HashMap();
    						map.put("swfpath", swfpath);
    						map.put("pdfpath", pdfpath);
    					    HttpSession session=request.getSession();
    					    session.setAttribute("path", map);
    					  
    					    File file = new File(PATH_FOLDER+"/"+filename);
    					    file.delete();
    				}catch (Exception e) {
    					// TODO: handle exception
    					response.sendRedirect("upload_error.jsp");
    				}finally{
    					  request.getRequestDispatcher("/upload_ok.jsp").forward(request, response);
    				}
    					
    				
    			
    	}
    
    	@Override
    	public void init(ServletConfig config) throws ServletException {
    		ServletContext servletCtx = config.getServletContext();
    		// 初始化路径
    		// 保存文件的目录
    		PATH_FOLDER = servletCtx.getRealPath("upload");
    		// 存放临时文件的目录,存放xxx.tmp文件的目录
    		TEMP_FOLDER = servletCtx.getRealPath("uploadTemp");
    	}
    	private FileItem getUploadFileItem(List<FileItem> list) {
    		for (FileItem fileItem : list) {
    			if (!fileItem.isFormField()) {
    				return fileItem;
    			}
    		}
    		return null;
    	}
    
    	private String getUploadFileName(FileItem item) {
    		// 获取路径名
    		String value = item.getName();
    		// 索引到最后一个反斜杠
    		int start = value.lastIndexOf("/");
    		// 截取 上传文件的 字符串名字,加1是 去掉反斜杠,
    		String filename = value.substring(start + 1);
    
    		return filename;
    	}
        
    }
    

    使用pdf.js方案的代码和效果图如下:

     


    使用OpenOffice方案的代码和效果图如下:

     

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%  
            Map map=(Map)session.getAttribute("path");
            
    %> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>预览文件</title>
        
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	    <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/swfobject.js"></script> -->
      <script type="text/javascript" src="js/pdfobject.js"></script> 
      <style type="text/css" media="screen">   
                html, body  { height:100%; }  
                body { margin:0; padding:0; overflow:auto; }     
                #flashContent { display:none; }  
            </style>  
    
      </head>
      
      <body>
           <div style="position:absolute;left:50px;top:10px;">  
                <a id="viewerPlaceHolder" style="width:820px;height:650px;display:block"></a>  
                  
                <script type="text/javascript">   
                   var fp = new FlexPaperViewer(     
                             'FlexPaperViewer',  
                             'viewerPlaceHolder', { config : {  
                             SwfFile : escape('<%=map.get("swfpath")%>'),
                             Scale : 0.6,   
                             ZoomTransition : 'easeOut',//变焦过渡  
                             ZoomTime : 0.5,  
                             ZoomInterval : 0.2,//缩放滑块-移动的缩放基础[工具栏]  
                             FitPageOnLoad : true,//自适应页面  
                             FitWidthOnLoad : true,//自适应宽度  
                             FullScreenAsMaxWindow : false,//全屏按钮-新页面全屏[工具栏]  
                             ProgressiveLoading : false,//分割加载  
                             MinZoomSize : 0.2,//最小缩放  
                             MaxZoomSize : 3,//最大缩放  
                             SearchMatchAll : true,  
                             InitViewMode : 'Portrait',//初始显示模式(SinglePage,TwoPage,Portrait)  
                                
                             ViewModeToolsVisible : true,//显示模式工具栏是否显示  
                             ZoomToolsVisible : true,//缩放工具栏是否显示  
                             NavToolsVisible : true,//跳页工具栏  
                             CursorToolsVisible : false,  
                             SearchToolsVisible : true,  
                                PrintPaperAsBitmap:false,  
                             localeChain: 'en_US'  
                             }});  
                </script>              
            </div>  
      </body>
    
    </html>
    

    总结:

      因为OpenOffice目前不是完全开源,一次性能够处理的Office有限,小编建议使用pdf.js。

    展开全文
  • java实现文件预览(Office转PDF)

    千次阅读 2020-02-20 22:28:12
    三、上代码,注释都很详细,应该能看懂,主要原理呢就是讲office文件转换为PDF,页面可以直接打开PDF,相当于预览 import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import ...

    一、首先下载安装openOffice软件,下载地址:http://www.openoffice.org/download/index.html

    当然,下载速度特别慢,下面是百度网盘地址。

    链接:https://pan.baidu.com/s/1FfQa14WYXuJU2CTQf34gew 
    提取码:4q08

    下载完一步一步下一步安装好,就行了。没什么特别的。

    二、引入jar包

      <dependency>
          <groupId>org.jodconverter</groupId>
          <artifactId>jodconverter-core</artifactId>
          <version>4.0.0-RELEASE</version>
      </dependency>
    

    三、上代码,注释都很详细,应该能看懂,主要原理呢就是讲office文件转换为PDF,页面可以直接打开PDF,相当于预览

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    
    import java.net.URL;
    
    import org.apache.commons.io.FileUtils;
    import org.jodconverter.OfficeDocumentConverter;
    import org.jodconverter.office.DefaultOfficeManagerBuilder;
    import org.jodconverter.office.OfficeManager;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletResponse;
    
    @RestController
    @RequestMapping("/filePreview")
    public class FilePreview {
    
        private static final Logger logger = LoggerFactory.getLogger(FilePreview.class);
    
    
        //这个是为了将uri转为File对象的一个临时路径
        private String tempPath = System.getProperty("java.io.tmpdir");
    
        /**
         * 预览文件
         *
         * @param response 响应对象
         * @throws Exception
         */
        @RequestMapping("/readFile")
        public void readFile(HttpServletResponse response) throws Exception {
            try {
    
                File file = null;
                //文件路径
                String uri = "http://xxx.xxx.xxx.xxx/group1/M00/00/02/wKgAuV5NSPyAK7-ZAAA8pSZux3M89.docx";
                String fileName = uri.substring(uri.lastIndexOf("/") + 1);
                //通过FileUtils将服务器文件下载的本地临时文件夹
                URL url = new URL(uri);
                FileUtils.copyURLToFile(url, new File(tempPath + File.separator + fileName));
                //创建文件对象
                file = new File(tempPath + File.separator + fileName);
                InputStream inputStream = null;
                OutputStream outputStream = null;
                //截取文件后缀,判断是pdf还是word还是excel,若是pdf直接读否则转pdf再读
                String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
                if (!fileSuffix.equals("pdf")) {
                    file = openOfficeToPDF(fileName, file);
                }
                //创建文件输入流
                if (file != null) {
                    inputStream = new FileInputStream(file);
                }
                response.setContentType("application/pdf");
                outputStream = response.getOutputStream();
                byte[] b = new byte[1024];
                int length = 0;
                while ((length = inputStream.read(b)) != -1) {
                    outputStream.write(b);
                }
                inputStream.close();
                outputStream.close();
    
            } catch (Exception e) {
                e.printStackTrace();
                logger.error(e.getMessage(), e);
            }
    
        }
    
        /**
         * 将office文档转换为pdf文档
         *
         * @return
         */
        public static File openOfficeToPDF(String fileName, File file) {
            try {
                //截取源文件文件名
                String sourceFileName = fileName.substring(0, fileName.lastIndexOf("."));
                //启动openOffice
                DefaultOfficeManagerBuilder builder = new DefaultOfficeManagerBuilder();
                //文件转换为pdf后会在电脑临时存储,重新预览时,清空之前之前的文件夹
                File tempfile = new File("C:/pdfFile/");
                //这个方法是我用的工具类,大家可以自己写下,jar包我就没有放了
                FileUtil.del(tempfile);
                //然后重新将创建file文件对象,用来存储转换完成的PDF文件
                String after_convert_file_path = "C:/pdfFile/" + sourceFileName + ".pdf";
                File outputFile = new File(after_convert_file_path);
                if (!outputFile.getParentFile().exists()) {
                    //如果上级目录不存在则创建一个
                    outputFile.getParentFile().mkdirs();
                }
                //指定openOffice4安装路径,并开启
                String openOffice4path = "C:/Program Files (x86)/OpenOffice 4";
                builder.setOfficeHome(openOffice4path);
                OfficeManager officeManager = builder.build();
                officeManager.start();
                OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
                //文件转换PDF
                converter.convert(file, outputFile);
                officeManager.stop();
                return outputFile;
            } catch (Exception e) {
                e.printStackTrace();
                logger.error(e.getMessage(), e);
            }
            return null;
        }
    
    
    }
    

    注意:因为我用的FastDfs文件服务器,所以我的文件路径是http格式的uri,如果是本地文件就更简单了,看下面

                File file = null;
                //文件路径
                String uri = "http://xxx.xxx.xxx.xxx/group1/M00/00/02/wKgAuV5NSPyAK7-ZAAA8pSZux3M89.docx";
                String fileName = uri.substring(uri.lastIndexOf("/") + 1);
                //通过FileUtils将服务器文件下载的本地临时文件夹
                URL url = new URL(uri);
                FileUtils.copyURLToFile(url, new File(tempPath + File.separator + fileName));
                //创建文件对象
                file = new File(tempPath + File.separator + fileName);
    
                上面这段直接改成
                File file = new File("文件路径") 就好了

     

    展开全文
  • java 实现的文档在线预览: 需要下载的工具有:OpenOffice+flexpaper+swftools+jodcconverter * .启动OpenOffice的服务 * 1 win+R开启dos窗口 * 2 执行:cd C:\Program Files (x86)\OpenOffice 4\program * 3 ...
  • 此处资源为百度云盘下载链接,请使用提取码提取资源,资源分为两部分 说明文档 及 源代码
  • Java在线预览office

    2017-06-16 10:41:24
    java给予springmvc使用openoffice swftools flexpaper 实现在线预览功能
  • java实现在线预览--poi实现word、excel、ppt转html

    万次阅读 多人点赞 2019-07-31 18:39:43
    java实现在线预览- -之poi实现word、excel、ppt转html
  • 主要为大家详细介绍了java通过jacob实现office在线预览功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • javaoffice、pdf文档在线预览解析(融合进项目中)

    千次阅读 热门讨论 2018-01-03 15:44:45
    最近在项目中要做一个文档的预览,在网上搜了好多demo,都可以实现其功能,但是放在自己的项目中有点复杂。 先说明本人的开发环境(win7+tomcat7+maven+svn+myeclipse),接下来最直观的项目需求,如下图: 当用户...
  • java实现office文件在线预览

    千次阅读 2017-12-29 14:58:15
    需要下载的软件: ...通过jodconverte在java代码中调用OpenOffice把Office文件转换为html文件来实现在线预览。 demo代码: package com.pds.framework.utils; import com.artofsolving.jodconverte
  • 实现web在线预览office文档,是基于jacob,jacob的包需要放在Tomcat的bin下面,否则在某些情况下会报异常
  • 最近项目中涉及到word在线预览的需求,由于word的在线预览对于格式的把控较为复杂,因此考虑将word转换成PDF进行在线预览,对于PDF的在线预览解决方案,网上谈到的比较多,针对于word转成PDF的后端解决方案不够清晰...
  • 看的前辈的,有的不是很完整,我给修改了一下,大家可以看看,我直接创建个java web 项目,你们直接打包运行就应该可以了。
  • Java实现office文档与pdf文档的在线预览功能  最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完。压力略大。后面查找百度资料、...
  • java实现附件预览(openoffice+PDF.js),将office文档,通过openoffice工具转换为PDF文件,使用PDF.js进行前端展示 是对openoffice+swftools+flexpaper的升级版,减少一次swf文件转换,及flexpaper只能预览十页内容...
  • java实现word转换成html实现word预览
  • Java实现在线模版预览和下载

    万次阅读 2018-09-07 11:46:17
    三、word文档转化为HTML实现在线预览 /** * 将word转换成html * 支持 .doc and .docx * * @param filePath word路径 * @param outPutFilePath html存储路径 形式如"/file/" * @param newFileName html名 ...
  • java实现浏览器在线预览offic(doc、xls、ppt)和pdf文件,本人将例子集成到项目中,已成功。 技术原理:将文件先转换成pdf文件,再将pdf文件转换成swf文件,最后显示在浏览器上。 资源描述:本资源包括swftools...
  • Java实现在线预览附件 office转换PDF

    万次阅读 2017-05-24 14:56:36
    Java实现在线预览附件 office转换PDF因为项目是做OA这一块,有很多附件需要实现在线预览附件,在网上也看了很多相关的资料。主要实现方式就是 (openoffice+swftools+flexpaper)和(aspose+pdfjs预览)。主要步骤:...
  • Java实现在线预览–openOffice实现

    千次阅读 2018-08-07 16:54:34
    Java实现在线预览–openOffice实现 简介 之前有写了poi实现在线预览的文章,里面也说到了使用openOffice也可以做到,这里就详细介绍一下。 我的实现逻辑有两种: 一、利用jodconverter(基于OpenOffice服务)将...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,218
精华内容 1,687
关键字:

java实现office的预览

java 订阅