精华内容
下载资源
问答
  • java实现office文件预览

    2018-06-12 17:31:26
    不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的office文件预览功能。 相信大家在平常项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事。大家请擦亮眼睛下面...

    喜欢的朋友可以关注下,粉丝也缺。

        

        不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能。

        相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事。大家请擦亮眼睛下面直接上代码了。

        步骤:

        1.需要下载openoffice插件,这是一款免费的工具,所以我们选择他。

        2.需要pdf.js文件

        这两个工具文件我下面会给地址需要的可以去下载

        这是下载地址https://download.csdn.net/download/dsn727455218/10474679

        不多说废话了,直接上代码了。

        java预览工具类:

        

    package com.file.utils;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Properties;
    
    import org.apache.log4j.Logger;
    
    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;
    import com.lowagie.text.Document;
    import com.lowagie.text.Image;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.pdf.PdfWriter;
    
    /**
     * doc docx格式转换
     */
    public class DocConverter {
        private static final Logger logger = Logger.getLogger(DocConverter.class);
        private static final int environment = 1;// 环境 1:windows 2:linux
        private String fileString;// (只涉及pdf2swf路径问题)
        private String outputPath = "";// 输入路径 ,如果不设置就输出在默认的位置
        private String fileName;
        private static String[] docFileLayouts = { ".txt", ".doc", ".docx", ".wps", ".xls", ".xlsx", ".et", ".ppt", ".pptx",
                ".dps" };//office办公软件格式
        private static String[] imgFileLayouts = { ".jpg", ".gif", ".jpeg", ".png", ".bmp" };//图片格式
        private static String[] pdfFileLayouts = { ".pdf" };//pdf格式
        private File imgFile;
        private File oldFile;//原文件
        private File pdfFile;
        private File swfFile;
        private File docFile;
    
        private String pdf2swfPath;
    
        /**
         * 可预览的文件格式
         * 
         * @param baseAddition
         */
        public static String getPreviewFileExt() {
            List list = new ArrayList(Arrays.asList(docFileLayouts));
            list.addAll(Arrays.asList(imgFileLayouts));
            list.addAll(Arrays.asList(pdfFileLayouts));
            Object[] c = list.toArray();
            //System.out.println(Arrays.toString(c));
            return Arrays.toString(c);
        }
    
        public DocConverter(String fileurl) {
            ini(fileurl);
        }
    
        /**
         * 重新设置file
         * 
         * @param fileString
         */
        public void setFile(String fileurl) {
            ini(fileurl);
        }
    
        /**
         * 初始化
         * 
         * @param fileString
         */
        private void ini(String fileurl) {
            this.fileString = fileurl;
            fileName = fileString.substring(0, fileString.lastIndexOf("."));
            int type = fileString.lastIndexOf(".");
            String typeStr = fileString.substring(type);
            if (Arrays.toString(docFileLayouts).contains(typeStr)) {
                docFile = new File(fileString);
            } else if (Arrays.toString(imgFileLayouts).contains(typeStr)) {
                imgFile = new File(fileString);
            } else if (Arrays.toString(pdfFileLayouts).contains(typeStr)) {
                oldFile = new File(fileString);
            }
            pdfFile = new File(fileName + ".pdf");
        }
    
        /**
         * 转为PDF
         * 
         * @param file
         */
        private void doc2pdf() throws Exception {
            if (docFile != null && docFile.exists()) {
                if (!pdfFile.exists()) {
                    OpenOfficeConnection connection = new SocketOpenOfficeConnection("localhost", 8100);
                    try {
                        connection.connect();
                        DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
                        converter.convert(docFile, pdfFile);
                        // close the connection
                        connection.disconnect();
                        logger.info("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");
                    } catch (java.net.ConnectException e) {
                        e.printStackTrace();
                        logger.info("****swf转换器异常,openoffice服务未启动!****");
                        throw e;
                    } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
                        e.printStackTrace();
                        logger.info("****swf转换器异常,读取转换文件失败****");
                        throw e;
                    } catch (Exception e) {
                        e.printStackTrace();
                        throw e;
                    }
                } else {
                    logger.info("****已经转换为pdf,不需要再进行转化****");
                }
            } else {
                logger.info("****swf转换器异常,需要转换的文档不存在,无法转换****");
            }
        }
    
        /**
         * 将图片转换成pdf文件 imgFilePath 需要被转换的img所存放的位置。
         * 例如imgFilePath="D:\\projectPath\\55555.jpg"; pdfFilePath 转换后的pdf所存放的位置
         * 例如pdfFilePath="D:\\projectPath\\test.pdf";
         * 
         * @param image
         * @return
         * @throws IOException
         * @throws Exception
         */
    
        private void imgToPdf() throws Exception {
            if (imgFile != null && imgFile.exists()) {
                if (!pdfFile.exists()) {
                    Document document = new Document();
                    FileOutputStream fos = null;
                    try {
                        fos = new FileOutputStream(pdfFile.getPath());
                        PdfWriter.getInstance(document, fos);
    
                        // 添加PDF文档的某些信息,比如作者,主题等等
                        //document.addAuthor("arui");
                        //document.addSubject("test pdf.");
                        // 设置文档的大小
                        document.setPageSize(PageSize.A4);
                        // 打开文档
                        document.open();
                        // 写入一段文字
                        // document.add(new Paragraph("JUST TEST ..."));
                        // 读取一个图片
                        Image image = Image.getInstance(imgFile.getPath());
                        float imageHeight = image.getScaledHeight();
                        float imageWidth = image.getScaledWidth();
                        int i = 0;
                        while (imageHeight > 500 || imageWidth > 500) {
                            image.scalePercent(100 - i);
                            i++;
                            imageHeight = image.getScaledHeight();
                            imageWidth = image.getScaledWidth();
                            System.out.println("imageHeight->" + imageHeight);
                            System.out.println("imageWidth->" + imageWidth);
                        }
    
                        image.setAlignment(Image.ALIGN_CENTER);
                        // //设置图片的绝对位置
                        // image.setAbsolutePosition(0, 0);
                        // image.scaleAbsolute(500, 400);
                        // 插入一个图片
                        document.add(image);
                    } catch (Exception de) {
                        System.out.println(de.getMessage());
                    }
                    document.close();
                    fos.flush();
                    fos.close();
                }
            }
        }
    
        /**
         * 转换成 pdf
         */
        @SuppressWarnings("unused")
        private void pdfTopdf() throws Exception {
            Runtime r = Runtime.getRuntime();
            if (!pdfFile.exists() && oldFile.exists()) {
                if (environment == 1) {// windows环境处理
                    try {
                        int bytesum = 0;
                        int byteread = 0;
                        File oldfile = new File(oldFile.getPath());
                        if (oldfile.exists()) { // 文件存在时
                            InputStream inStream = new FileInputStream(oldFile.getPath()); // 读入原文件
                            FileOutputStream fs = new FileOutputStream(pdfFile.getPath());
                            byte[] buffer = new byte[1444];
                            int length;
                            while ((byteread = inStream.read(buffer)) != -1) {
                                bytesum += byteread; // 字节数 文件大小
                                System.out.println(bytesum);
                                fs.write(buffer, 0, byteread);
                            }
                            inStream.close();
                        }
                    } catch (Exception e) {
                        logger.info("复制单个文件操作出错");
                        e.printStackTrace();
    
                    }
                } else if (environment == 2) {// linux环境处理
    
                }
            } else {
                logger.info("****pdf不存在,无法转换****");
            }
        }
    
        /**
         * 转换成 swf
         */
        @SuppressWarnings("unused")
        private void pdf2swf() throws Exception {
            Runtime r = Runtime.getRuntime();
            if (!swfFile.exists()) {
                if (pdfFile.exists()) {
                    if (environment == 1) {// windows环境处理
                        try {
                            // 从配置文件获取swfFile.exe 安装路径
                            InputStream in = DocConverter.class.getClassLoader()
                                    .getResourceAsStream("parameters/flow/pdf2swfPath.properties");
                            Properties config = new Properties();
                            try {
                                config.load(in);
                                in.close();
                            } catch (IOException e) {
                                System.err.println("No AreaPhone.properties defined error");
                            }
    
                            if (config != null && config.getProperty("pdf2swfPath") != null) {
                                pdf2swfPath = config.getProperty("pdf2swfPath").toString();
                            }
    
                            Process p = r
                                    .exec(pdf2swfPath + " " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");
                            swfFile = new File(swfFile.getPath());
                            //System.out.print(loadStream(p.getInputStream()));
                            //System.err.print(loadStream(p.getErrorStream()));
                            //System.out.print(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 (pdfFile.exists()) {
                logger.info("****swf转换器开始工作,该文件已经转换为swf****");
                return true;
            }
    
            if (environment == 1) {
                logger.info("****swf转换器开始工作,当前设置运行环境windows****");
            } else {
                logger.info("****swf转换器开始工作,当前设置运行环境linux****");
            }
            try {
                doc2pdf();
                imgToPdf();
                pdfTopdf();
                //pdf2swf();
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
    
            if (pdfFile.exists()) {
                return true;
            } else {
                return false;
            }
        }
    
        public static void main(String[] args) {
            // 调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法
            /*
             * DocConverter d = new
             * DocConverter("C:/Users/Administrator/Desktop/工作动态第19期.pdf"); //
             * 调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf;
             * d.conver(); // 调用getswfPath()方法,打印转换后的swf文件路径
             * System.out.println(d.getswfPath());
             */
        }
    
        /**
         * 返回文件路径
         * 
         * @param s
         */
        public String getPdfName() {
            //if (swfFile.exists()) {
            String tempString = pdfFile.getName();
            //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");
                }
            }
        }
    
    }

    是不是觉得很简单,这里需要说明的一个问题是,连接openoffice服务如果用:

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
    OpenOfficeConnection connection = new SocketOpenOfficeConnection("localhost", 8100);

    第一种会报错,连接失败,具体错误代码我就不贴,不信可以试试看,所以我们选择第二种连接方式。

    aciton中调用:

    @ResponseBody
        @RequestMapping(value = "/onlinefile")
        public void onlinefile(Logonlog logonlog, FileList user, HttpServletRequest request, HttpServletResponse response,
                HttpSession session, String msg) throws Exception {
            response.setHeader("Access-Control-Allow-Origin", "*");
            String fileurl = request.getParameter("fileurl");
            if ("".equals(Tools.RmNull(fileurl))) {
                msg = StatusCode.PARAMETER_NULL;
            } else {
                String filePath = request.getSession().getServletContext().getRealPath("/") + "\\upload\\";
                DocConverter d = new DocConverter(filePath + fileurl);//调用的方法同样需要传文件的绝对路径
                d.conver();//d.getPdfName()是返回的文件名 需要加上项目绝对路径 不然会以相对路径访问资源
                session.setAttribute("fileurl", "/filemanagement/upload/" + d.getPdfName());//设置文件路径
                response.sendRedirect("/filemanagement/file/showinfo.jsp");//跳转到展示页面
            }
        }

    jsp页面:

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page language="java" import="javax.servlet.http.HttpSession"%>    
    <%
       String fileurl=session.getAttribute("fileurl").toString();
     %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>预览</title>
    </head>
    <body>
        <!--内容-->  
    <div class="mim_content">  
    <iframe width="100%"height="700px" src="/filemanagement/online/viewer.html?file=${fileurl}"></iframe>  
    </div>
    </body>
    </html>

    这里我们是需要的文件传到pdf.js文件里面才能展示的:

    viewer.html 是一个官方文件 下载来用就可以

    我就不贴代码,需要文件的可以去我的下载地址下载文件以及工具包

    https://download.csdn.net/download/dsn727455218/10474679 这是下载地址

    实现文件的预览其实就是这么的简单,这里需要给大家说明一点,需要先启动openoffice服务,不然会报错的。

    当然还有一些其他的方式 比如 poi,以及使用office web 365第三方服务 但是这是收费的有钱任性的可以试试。;

    到这里已经完成了对文件的预览功能,如有需要可以加我Q群【308742428】大家一起讨论技术。

    后面会不定时为大家更新文章,敬请期待。

    喜欢的朋友可以关注下,粉丝也缺。


    展开全文
  • 不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的office文件预览功能。相信大家在平常项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事。大家请擦亮眼睛下面直接...

    不知觉就过了这个久了,继上篇java实现文件上传下载后,今天给大家分享一篇java实现的对office文件预览功能。

    相信大家在平常的项目中会遇到需要对文件实现预览功能,这里不用下载节省很多事。大家请擦亮眼睛下面直接上代码了。

    步骤:

    1.需要下载openoffice插件,这是一款免费的工具,所以我们选择他。

    2.需要pdf.js文件

    这两个工具文件我下面会给地址需要的可以去下载

    https://download.csdn.net/download/dsn727455218/10474679 这是下载地址

    不多说废话了,直接上代码了。

    java预览工具类:

    packagecom.file.utils;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.Properties;importorg.apache.log4j.Logger;importcom.artofsolving.jodconverter.DocumentConverter;importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;importcom.lowagie.text.Document;importcom.lowagie.text.Image;importcom.lowagie.text.PageSize;importcom.lowagie.text.pdf.PdfWriter;/*** doc docx格式转换*/

    public classDocConverter {private static final Logger logger = Logger.getLogger(DocConverter.class);private static final int environment = 1;//环境 1:windows 2:linux

    private String fileString;//(只涉及pdf2swf路径问题)

    private String outputPath = "";//输入路径 ,如果不设置就输出在默认的位置

    privateString fileName;private static String[] docFileLayouts = { ".txt", ".doc", ".docx", ".wps", ".xls", ".xlsx", ".et", ".ppt", ".pptx",".dps" };//office办公软件格式

    private static String[] imgFileLayouts = { ".jpg", ".gif", ".jpeg", ".png", ".bmp" };//图片格式

    private static String[] pdfFileLayouts = { ".pdf" };//pdf格式

    privateFile imgFile;private File oldFile;//原文件

    privateFile pdfFile;privateFile swfFile;privateFile docFile;privateString pdf2swfPath;/*** 可预览的文件格式

    *

    *@parambaseAddition*/

    public staticString getPreviewFileExt() {

    List list= newArrayList(Arrays.asList(docFileLayouts));

    list.addAll(Arrays.asList(imgFileLayouts));

    list.addAll(Arrays.asList(pdfFileLayouts));

    Object[] c=list.toArray();//System.out.println(Arrays.toString(c));

    returnArrays.toString(c);

    }publicDocConverter(String fileurl) {

    ini(fileurl);

    }/*** 重新设置file

    *

    *@paramfileString*/

    public voidsetFile(String fileurl) {

    ini(fileurl);

    }/*** 初始化

    *

    *@paramfileString*/

    private voidini(String fileurl) {this.fileString =fileurl;

    fileName= fileString.substring(0, fileString.lastIndexOf("."));int type = fileString.lastIndexOf(".");

    String typeStr=fileString.substring(type);if(Arrays.toString(docFileLayouts).contains(typeStr)) {

    docFile= newFile(fileString);

    }else if(Arrays.toString(imgFileLayouts).contains(typeStr)) {

    imgFile= newFile(fileString);

    }else if(Arrays.toString(pdfFileLayouts).contains(typeStr)) {

    oldFile= newFile(fileString);

    }

    pdfFile= new File(fileName + ".pdf");

    }/*** 转为PDF

    *

    *@paramfile*/

    private void doc2pdf() throwsException {if (docFile != null &&docFile.exists()) {if (!pdfFile.exists()) {

    OpenOfficeConnection connection= new SocketOpenOfficeConnection("localhost", 8100);try{

    connection.connect();

    DocumentConverter converter= newOpenOfficeDocumentConverter(connection);

    converter.convert(docFile, pdfFile);//close the connection

    connection.disconnect();

    logger.info("****pdf转换成功,PDF输出:" + pdfFile.getPath() + "****");

    }catch(java.net.ConnectException e) {

    e.printStackTrace();

    logger.info("****swf转换器异常,openoffice服务未启动!****");throwe;

    }catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {

    e.printStackTrace();

    logger.info("****swf转换器异常,读取转换文件失败****");throwe;

    }catch(Exception e) {

    e.printStackTrace();throwe;

    }

    }else{

    logger.info("****已经转换为pdf,不需要再进行转化****");

    }

    }else{

    logger.info("****swf转换器异常,需要转换的文档不存在,无法转换****");

    }

    }/*** 将图片转换成pdf文件 imgFilePath 需要被转换的img所存放的位置。

    * 例如imgFilePath="D:\\projectPath\\55555.jpg"; pdfFilePath 转换后的pdf所存放的位置

    * 例如pdfFilePath="D:\\projectPath\\test.pdf";

    *

    *@paramimage

    *@return*@throwsIOException

    *@throwsException*/

    private void imgToPdf() throwsException {if (imgFile != null &&imgFile.exists()) {if (!pdfFile.exists()) {

    Document document= newDocument();

    FileOutputStream fos= null;try{

    fos= newFileOutputStream(pdfFile.getPath());

    PdfWriter.getInstance(document, fos);//添加PDF文档的某些信息,比如作者,主题等等//document.addAuthor("arui");//document.addSubject("test pdf.");//设置文档的大小

    document.setPageSize(PageSize.A4);//打开文档

    document.open();//写入一段文字//document.add(new Paragraph("JUST TEST ..."));//读取一个图片

    Image image =Image.getInstance(imgFile.getPath());float imageHeight =image.getScaledHeight();float imageWidth =image.getScaledWidth();int i = 0;while (imageHeight > 500 || imageWidth > 500) {

    image.scalePercent(100 -i);

    i++;

    imageHeight=image.getScaledHeight();

    imageWidth=image.getScaledWidth();

    System.out.println("imageHeight->" +imageHeight);

    System.out.println("imageWidth->" +imageWidth);

    }

    image.setAlignment(Image.ALIGN_CENTER);// //设置图片的绝对位置//image.setAbsolutePosition(0, 0);//image.scaleAbsolute(500, 400);//插入一个图片

    document.add(image);

    }catch(Exception de) {

    System.out.println(de.getMessage());

    }

    document.close();

    fos.flush();

    fos.close();

    }

    }

    }/*** 转换成 pdf*/@SuppressWarnings("unused")private void pdfTopdf() throwsException {

    Runtime r=Runtime.getRuntime();if (!pdfFile.exists() &&oldFile.exists()) {if (environment == 1) {//windows环境处理

    try{int bytesum = 0;int byteread = 0;

    File oldfile= newFile(oldFile.getPath());if (oldfile.exists()) { //文件存在时

    InputStream inStream = new FileInputStream(oldFile.getPath()); //读入原文件

    FileOutputStream fs = newFileOutputStream(pdfFile.getPath());byte[] buffer = new byte[1444];intlength;while ((byteread = inStream.read(buffer)) != -1) {

    bytesum+= byteread; //字节数 文件大小

    System.out.println(bytesum);

    fs.write(buffer,0, byteread);

    }

    inStream.close();

    }

    }catch(Exception e) {

    logger.info("复制单个文件操作出错");

    e.printStackTrace();

    }

    }else if (environment == 2) {//linux环境处理

    }

    }else{

    logger.info("****pdf不存在,无法转换****");

    }

    }/*** 转换成 swf*/@SuppressWarnings("unused")private void pdf2swf() throwsException {

    Runtime r=Runtime.getRuntime();if (!swfFile.exists()) {if(pdfFile.exists()) {if (environment == 1) {//windows环境处理

    try{//从配置文件获取swfFile.exe 安装路径

    InputStream in = DocConverter.class.getClassLoader()

    .getResourceAsStream("parameters/flow/pdf2swfPath.properties");

    Properties config= newProperties();try{

    config.load(in);

    in.close();

    }catch(IOException e) {

    System.err.println("No AreaPhone.properties defined error");

    }if (config != null && config.getProperty("pdf2swfPath") != null) {

    pdf2swfPath= config.getProperty("pdf2swfPath").toString();

    }

    Process p=r

    .exec(pdf2swfPath+ " " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9");

    swfFile= newFile(swfFile.getPath());//System.out.print(loadStream(p.getInputStream()));//System.err.print(loadStream(p.getErrorStream()));//System.out.print(loadStream(p.getInputStream()));

    System.err.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****");/** if (pdfFile.exists()) { pdfFile.delete(); }*/}catch(IOException e) {

    e.printStackTrace();throwe;

    }

    }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();throwe;

    }

    }

    }else{

    System.out.println("****pdf不存在,无法转换****");

    }

    }else{

    System.out.println("****swf已经存在不需要转换****");

    }

    }static String loadStream(InputStream in) throwsIOException {int ptr = 0;

    in= newBufferedInputStream(in);

    StringBuffer buffer= newStringBuffer();while ((ptr = in.read()) != -1) {

    buffer.append((char) ptr);

    }returnbuffer.toString();

    }/*** 转换主方法*/@SuppressWarnings("unused")public booleanconver() {if(pdfFile.exists()) {

    logger.info("****swf转换器开始工作,该文件已经转换为swf****");return true;

    }if (environment == 1) {

    logger.info("****swf转换器开始工作,当前设置运行环境windows****");

    }else{

    logger.info("****swf转换器开始工作,当前设置运行环境linux****");

    }try{

    doc2pdf();

    imgToPdf();

    pdfTopdf();//pdf2swf();

    } catch(Exception e) {

    e.printStackTrace();return false;

    }if(pdfFile.exists()) {return true;

    }else{return false;

    }

    }public static voidmain(String[] args) {//调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法

    /** DocConverter d = new

    * DocConverter("C:/Users/Administrator/Desktop/工作动态第19期.pdf"); //

    * 调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf;

    * d.conver(); // 调用getswfPath()方法,打印转换后的swf文件路径

    * System.out.println(d.getswfPath());*/}/*** 返回文件路径

    *

    *@params*/

    publicString getPdfName() {//if (swfFile.exists()) {

    String tempString =pdfFile.getName();//tempString = tempString.replaceAll("\\\\", "/");

    returntempString;/** } else { return ""; }*/}/*** 设置输出路径*/

    public voidsetOutputPath(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");

    }

    }

    }

    }

    是不是觉得很简单,这里需要说明的一个问题是,连接openoffice服务如果用:

    OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);

    OpenOfficeConnection connection = new SocketOpenOfficeConnection("localhost", 8100);

    第一种会报错,连接失败,具体错误代码我就不贴,不信可以试试看,所以我们选择第二种连接方式。

    aciton中调用:

    @ResponseBody

    @RequestMapping(value = "/onlinefile")

    public void onlinefile(Logonlog logonlog, FileList user, HttpServletRequest request, HttpServletResponse response,

    HttpSession session, String msg) throws Exception {

    response.setHeader("Access-Control-Allow-Origin", "*");

    String fileurl = request.getParameter("fileurl");

    if ("".equals(Tools.RmNull(fileurl))) {

    msg = StatusCode.PARAMETER_NULL;

    } else {

    String filePath = request.getSession().getServletContext().getRealPath("/") + "\\upload\\";

    DocConverter d = new DocConverter(filePath + fileurl);//调用的方法同样需要传文件的绝对路径

    d.conver();//d.getPdfName()是返回的文件名 需要加上项目绝对路径 不然会以相对路径访问资源

    session.setAttribute("fileurl", "/filemanagement/upload/" + d.getPdfName());//设置文件路径

    response.sendRedirect("/filemanagement/file/showinfo.jsp");//跳转到展示页面

    }

    }

    jsp页面:

    pageEncoding="UTF-8"%>

    String fileurl=session.getAttribute("fileurl").toString();

    %>

    预览

    这里我们是需要的文件传到pdf.js文件里面才能展示的:

    viewer.html 是一个官方文件 下载来用就可以

    我就不贴代码,需要文件的可以去我的下载地址下载文件以及工具包

    https://download.csdn.net/download/dsn727455218/10474679 这是下载地址

    实现文件的预览其实就是这么的简单,这里需要给大家说明一点,需要先启动openoffice服务,不然会报错的。

    当然还有一些其他的方式 比如 poi,以及使用office web 365第三方服务 但是这是收费的有钱任性的可以试试。;

    到这里已经完成了对文件的预览功能,如有需要可以加我Q群【308742428】大家一起讨论技术。

    后面会不定时为大家更新文章,敬请期待。

    如果对你有帮助,请打赏一下!!!

    展开全文
  • Java实现Office在线预览

    千次阅读 2017-04-26 14:00:29
    调试错误就是编程给你最好东西,因为在每个错误上面都标志着前进一步。

    上传文件是我们在开发中经常遇到的需求,而某些情况下,我们需要实现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。

    展开全文
  • 参考文章:PDF技术(一)-Java实现Office系列文件转PDF文件 利用aspose.jar来实现将文件转pdf,再传前台,实现预览。 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; ...

    参考文章:PDF技术(一)-Java实现Office系列文件转PDF文件

    利用aspose.jar来实现将文件转pdf,再传前台,实现预览。

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    
    import org.apache.log4j.Logger;
    
    import com.aspose.cells.CellsHelper;
    import com.aspose.cells.Workbook;
    import com.aspose.cells.Worksheet;
    
    import com.aspose.words.FontSettings;
    import com.itextpdf.text.DocumentException;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfWriter;
    
    import wt.log4j.LogR;
    
    /**
    * @功能描述 aspose Excel转pdf
    */
    public class OfficeToPdf {
    	
    	private static final String FONT = File.separator + "util" + File.separator
    			+ "fonts" + File.separator ;//字体文件夹
    	private static final Logger LOGGER = LogR.getLogger(DocController.class.getName());
    	 public static void main(String[] args) throws IOException, DocumentException{
        	 excel2pdf("D:/logs/SpringBoot.xls");
    //    	 doc2pdf("d:/logs/SpringBoot.docx");
    //    	 text2pdf("d://logs//123.txt","d://logs//SpringBoot.pdf");
        	}
    	 /**
    	 * 签名验证
    	 * @return
    	 * @throws IOException 
    	 * @throws Exception 
    	 */
        public static boolean getWordLicense() throws IOException {
            boolean result = false;
            InputStream is = null;
            try {
                is = OfficeToPdf.class.getResourceAsStream("license.xml"); //  license.xml应放在..\WebRoot\WEB-INF\classes路径下
                com.aspose.words.License aposeLic = new com.aspose.words.License();
                aposeLic.setLicense(is);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
            	if (is != null) {
            		is.close();
            	}
            }
            return result;
        }
    	 
    	 
    	/**
    	 * Excel签名验证
    	 * @return
    	 * @throws IOException 
    	 * @throws Exception 
    	 */
        public static boolean getExcelLicense() throws IOException {
            boolean result = false;
            InputStream is = null;
            try {
                is = OfficeToPdf.class.getResourceAsStream("license.xml"); //  license.xml应放在..\WebRoot\WEB-INF\classes路径下
                com.aspose.cells.License aposeLic = new com.aspose.cells.License();
                aposeLic.setLicense(is);
                result = true;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
            	if (is != null) {
            		is.close();
            	}
            }
            return result;
        }
    	/**
    	 * excel转PDF
    	 * @return
    	 * @throws IOException 
    	 * @throws Exception 
    	 */
        public static void excel2pdf(String fileName) throws IOException {
            if (!getExcelLicense()) {          // 验证License 若不验证则转化出的pdf文档会有水印产生
                return;
            }
            FileOutputStream fileOS = null;
            try { 	
                long old = System.currentTimeMillis();          
                Workbook wb = new Workbook(fileName);// 原始excel路径
                fileName = fileName.substring(0,fileName.lastIndexOf(".")+1) + "pdf";
                File file = new File(fileName);// 输出路径
                for (int i = 0;i<wb.getWorksheets().getCount();i++){
                	Worksheet worksheet = wb.getWorksheets().get(i);
                	worksheet.getPageSetup().setZoom(50);//设置缩放比例       
                }   
                
                CellsHelper.setFontDir(FONT);  //这里应该是字体路径
                
                fileOS = new FileOutputStream(file);            
                wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
                fileOS.close();
                long now = System.currentTimeMillis();
                LOGGER.info("共耗时:" + ((now - old) / 1000.0) + "秒\n\n");//转化过程耗时
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
            	if (fileOS!=null){
            		fileOS.close();
            	}
            }
        }
    	
        /**
    	 * doc转PDF
    	 * @param filename
    	 * @return
    	 * @throws IOException 
    	 * @throws Exception 
    	 */
        public static void doc2pdf(String filename) throws IOException {
            if (!getWordLicense()) {          // 验证License 若不验证则转化出的pdf文档会有水印产生
                return;
            }
            FileOutputStream os = null;
            try {
                long old = System.currentTimeMillis();
                com.aspose.words.Document doc = new com.aspose.words.Document(filename);     //Address是将要被转化的word文档          
                filename = filename.substring(0,filename.lastIndexOf(".")+1) + "pdf";
                File file = new File(filename);  //新建一个空白pdf文档
                os = new FileOutputStream(file);
                //设置字体来源
                FontSettings.setFontsFolder(FONT, true);
    //          doc.save("d:/logs/机构案例库入口配置文件.html", SaveFormat.HTML);//转html格式
                
                doc.save(os, com.aspose.words.SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
                long now = System.currentTimeMillis();
                LOGGER.info("共耗时:" + ((now - old) / 1000.0) + "秒\n\n");//转化过程耗时
                os.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
            	if (os != null){
            		os.close();
            	}
            }
      
        }
        /**
    	 * txt转pdf
    	 * @param doc
    	 * @return
    	 * @throws Exception 
    	 */
    	public static void text2pdf(String text, String pdf) throws DocumentException, IOException {
    		com.itextpdf.text.Document document = new com.itextpdf.text.Document();
    		OutputStream os = new FileOutputStream(new File(pdf));
    		PdfWriter.getInstance(document, os);
    		document.open();
    		BaseFont baseFont = BaseFont.createFont(FONT +"simsun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    		Font font = new Font(baseFont);
    		InputStreamReader isr = new InputStreamReader(new FileInputStream(new File(text)), "GBK");
    		BufferedReader bufferedReader = new BufferedReader(isr);
    		String str = "";
    		while ((str = bufferedReader.readLine()) != null) {
    			document.add(new Paragraph(str, font));
    		}
    		document.close();
    		bufferedReader.close();
    		isr.close();
    		os.close();
    	}
    	
    }

     

    展开全文
  • 主要做就是实现一个office在线预览功能。第一步:装office第二步:下载jacob打开网址下载,目前最新是1.19版本。第三步:配置jdk解压下载完jacob压缩包,根据jdk版本选择dll中一个,放入/jdk/jre/bin中。...
  • java 实现的文档在线预览: 需要下载工具有:OpenOffice+flexpaper+swftools+jodcconverter * .启动OpenOffice服务 * 1 win+R开启dos窗口 * 2 执行:cd C:\Program Files (x86)\OpenOffice 4\program * 3 ...
  • 主要为大家详细介绍了java通过jacob实现office在线预览功能,具有一定参考价值,感兴趣小伙伴们可以参考一下
  • java实现office文件在线预览

    千次阅读 2017-12-29 14:58:15
    需要下载软件: ...通过jodconverte在java代码中调用OpenOffice把Office文件转换为html文件来实现在线预览。 demo代码: package com.pds.framework.utils; import com.artofsolving.jodconverte
  • 最近项目有个需求要java实现office文档与pdf文档在线预览功能,刚刚接到时候就觉得有点难,以自己水平难以在三四天做完。压力略大。后面查找百度资料、以及在同事与网友帮助下,四天多把它做完。查找资料...
  • 主要做就是实现一个office在线预览功能。第一步:装office第二步:下载jacob打开网址下载,目前最新是1.19版本。第三步:配置jdk解压下载完jacob压缩包,根据jdk版本选择dll中一个,放入/jdk/jre/bin中。...
  • Java实现office文档与pdf文档在线预览功能  最近项目有个需求要java实现office文档与pdf文档在线预览功能,刚刚接到时候就觉得有点难,以自己水平难以在三四天做完。压力略大。后面查找百度资料、以及...
  • 已经用过flexpaper+openoffice实现了PC端的预览功能,可flexpaper不支持手机浏览器上的播放 大家有好的建议吗
  • Java实现在线预览office

    千次阅读 2014-08-26 16:22:50
    貌似不难实现java的poi可以实现、然后。。。发现事不如愿、针对office的格式多样化。poi显的力不从心、遂放弃折腾、由于服务器为linux!故有关使用 jacob-1.15-M4-x86.dll 来转换的方法也得淘汰。发现QQ邮箱、...
  • 遇到了一个需要在线预览的问题,在网上搜了搜,五花八门,选择最简单把所有浏览器不能直接打开全转成pdf格式,最后选择了aspose,以下是实现的过程和jar包下载地址: 1前端js,没什么说,就一个打开 window.open(Feng....
  • 最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种:直接使用别人提供的服务 例如:office web 365使用openoffice+swfTools...
  • 最近项目有个需求要java实现office文档与pdf文档在线预览功能,刚刚接到时候就觉得有点难,以自己水平难以在三四天做完。压力略大。后面查找百度资料、以及在同事与网友帮助下,四天多把它做完。查找资料...
  • 标签:最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种:直接使用别人提供的服务 例如:office web 365使用openoffice+...
  • 实现web在线预览office文档,是基于jacob,jacob包需要放在Tomcatbin下面,否则在某些情况下会报异常
  • Java实现文件的预览

    千次阅读 2017-08-31 10:12:51
    最近项目需要用到文件的预览功能,就开始在网上收集资料,学习了几种文件预览的方法。我集成到我项目内测试的有以下三种,最后使用的是第三种: 直接使用别人提供的服务 例如:office web 365使用openoffice+...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 151
精华内容 60
关键字:

java实现office的预览

java 订阅