Java实现在线预览附件 office转换PDF

Java-基于Aspose方式将office文件转换pdf格式 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import 阅读详情

Java实现在线预览附件 office转换PDF

因为项目是做OA这一块,有很多附件需要实现在线预览附件,在网上也看了很多相关的资料。主要实现方式就是 (openoffice+swftools+flexpaper)和(aspose+pdfjs预览)。

主要步骤:
1.需要先将文档转换为PDF文件。
2.用pdfjs预览PDF文件

转换步骤:
* 使用OpenOffice/Aspose 将ppt、word、excel、txt类型的文件转换为pdf

预览步骤:
* 高版本浏览器上,使用pdf.js直接预览PDF文件
* 低版本浏览器上,使用swftools将PDF文件转换为swf文件,再使用flexpaper预览swf(没有做这个步骤)

组件安装:
Aspose
由于OpenOffice的转换效果并不太佳,这里选择了Aspose
在Aspose官网下载Aspose的Java版本,主要选择
* Aspose.words
* Aspose.cells(Excel)
* Aspose.slides(PPT)
* Aspose.pdf
下载完成后,在工程中引用jar包即可。

功能实现:
这里采用的所有组件版本为:
名称 版本
Aspose.words 16.8.0
Aspose.cells 9.0.0
Aspose.slides 116.7.0
Aspose.pdf 11.8.0
文档转换为PDF

使用Aspose进行文档转换很简单,直接引入相应的jar包,调用save方法,转换为PDF即可。

注意:
1. 使用Aspose时,每一个模块(words,cells)都可能有相同的类,如License类,SaveOptions类,SaveFormat类。而在各自模块使用时,一定要用对应模块的类,这个坑我已爬过。
使用Aspose时,需要每次进行转换操作前调用设置License方法。

package com.ybg.pf.oamodule.work.module.convert.util;


import org.apache.log4j.Logger;

import java.io.FileInputStream;
import java.io.InputStream;

/**
 * Aspose注册工具
 *
 * @author zhumin
 * @version 1.0.0
 *          2017年05月16日 15:58
 * @since Jdk1.7
 */
public class AsposeLicenseUtil {
   
   

    private static InputStream inputStream = null;

    private static Logger logger = Logger.getLogger(AsposeLicenseUtil.class);

    /**
     * 获取License的输入流
     *
     * @return
     */
    private static InputStream getLicenseInput() {
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        try {
            String path = contextClassLoader.getResource("license.xml").toURI().getPath();
            inputStream = new FileInputStream(path);

        } catch (Exception e) {
            logger.error("license not found!", e);
        }
        return inputStream;
    }

    /**
     * 设置License
     *
     * @return true表示已成功设置License, false表示失败
     */
    public static boolean setWordsLicense() {
        InputStream licenseInput = getLicenseInput();
        if (licenseInput != null) {
            try {
                com.aspose.words.License aposeLic = new com.aspose.words.License();
                aposeLic.setLicense(licenseInput);
                return aposeLic.getIsLicensed();
            } catch (Exception e) {
                logger.error("set words license error!", e);
            }
        }
        return false;
    }

    /**
     * 设置License
     *
     * @return true表示已成功设置License, false表示失败
     */
    public static boolean setCellsLicense() {
        InputStream licenseInput = getLicenseInput();
        if (licenseInput != null) {
            try {
                com.aspose.cells.License aposeLic = new com.aspose.cells.License();
                aposeLic.setLicense(licenseInput);
                return true;
            } catch (Exception e) {
                logger.error("set cells license error!", e);
            }
        }
        return false;
    }

    /**
     * 设置License
     *
     * @return true表示已成功设置License, false表示失败
     */
    public static boolean setSlidesLicense() {
        InputStream licenseInput = getLicenseInput();
        if (licenseInput != null) {
            try {
                com.aspose.slides.License aposeLic = new com.aspose.slides.License();
                aposeLic.setLicense(licenseInput);
                return aposeLic.isLicensed();
            } catch (Exception e) {
                logger.error("set ppt license error!", e);
            }
        }
        return false;
    }

    /**
     * 设置Aspose PDF的license
     * @return true表示设置成功,false表示设置失败
     */
    public static boolean setPdfLicense() {
        InputStream licenseInput = getLicenseInput();
        if (licenseInput != null) {
            try {
                com.aspose.pdf.License aposeLic = new com.aspose.pdf.License();
                aposeLic.setLicense(licenseInput);
                return true;
            } catch (Exception e) {
                logger.error("set pdf license error!", e);
            }
        }
        return false;
    }
}

word文档转换代码实例:

package com.ybg.pf.oamodule.work.module.convert.service.impl;

import com.aspose.words.Document;
import com.aspose.words.PdfSaveOptions;
import com.aspose.words.SaveFormat;
import com.ybg.pf.oamodule.work.module.convert.domain.ConvertStatus;
import com.ybg.pf.oamodule.work.module.convert.service.File2PdfService;
import com.ybg.pf.oamodule.work.module.convert.util.AsposeLicenseUtil;
import org.apache.log4j.Logger;

import java.io.InputStream;
import java.io.OutputStream;

/**
 * 将doc文档转换为pdf文件
 *
 * @author zhumin
 * @version 1.0.0
 *          2017年05月16日 15:58
 * @since Jdk1.7
 */
public class Doc2PdfServiceImpl implements File2PdfService {

    private Logger logger = Logger.getLogger(getClass());

    @Override
    public ConvertStatus convert2Pdf(InputStream inputStream, OutputStream outputStream) {
        try {
            if (AsposeLicenseUtil.setWordsLicense()) {

                Document doc = new Document(inputStream);

//                insertWatermarkText(doc, "水印水印"); // 添加水印

                PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
                pdfSaveOptions.setSaveFormat(SaveFormat.PDF);
                pdfSaveOptions.getOutlineOptions().setHeadingsOutlineLevels(3); // 设置3级doc书签需要保存到pdf的heading中
                pdfSaveOptions.getOutlineOptions().setExpandedOutlineLevels(1); // 设置pdf中默认展开1级

                doc.save(outputStream, pdfSaveOptions);
                inputStream.close();
                outputStream.flush();
                outputStream.close();
                return ConvertStatus.SUCCESS;
            } else {
                return ConvertStatus.LICENSE_ERROR;
            }
        } catch (Exception e) {
            return ConvertStatus.CONVERT_DOC2PDF_ERROR;
        }
    }

}

其他格式就不附下面会提供代码下载。

预览流程:先在后台下载附件到项目指定临时目录,在读取下载文件转换为PDF存储到临时目录

这里写图片描述
这是目录结构:convertFile附件下载存放目录 outputFilePDF存储目录

package com.ybg.pf.oamodule.common.util;


import com.ybg.pf.framework.library.util.FileRWUtils;
import com.ybg.pf.framework.library.util.LogUtil;
import com.ybg.pf.oamodule.work.module.convert.domain.ConvertStatus;
import com.ybg.pf.oamodule.work.module.convert.service.File2PdfService;
import com.ybg.pf.oamodule.work.module.convert.service.impl.Doc2PdfServiceImpl;
import com.ybg.pf.oamodule.work.module.convert.service.impl.Excel2PdfServiceImpl;
import com.ybg.pf.oamodule.work.module.convert.service.impl.PPT2PdfServiceImpl;
import org.apache.commons.lang.StringUtils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * Created by Administrator on 2017/5/11.
 * 在线预览工具类
 * 文件下载工具
 */
public class PreviewUtils {
   
   
    //转换服务
    private static File2PdfService fileConvertService;

    /**
     * office转换PDF
     * @param fileName 需要转换的文件名
     * @return
     * @throws Exception
     */
    public static ConvertStatus officeConversionPDF(String fileName) throws Exception{
        //获取文件后缀
        String suffix = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
        String fileNames = fileName.substring(0,fileName.lastIndexOf("."));
        //根据后缀判断文件类型实例化对应服务层
        if (StringUtils.equalsIgnoreCase(suffix,"docx") || StringUtils.equalsIgnoreCase(suffix,"doc")){
            fileConvertService = new Doc2PdfServiceImpl();
        }else if (StringUtils.equalsIgnoreCase(suffix,"pptx") || StringUtils.equalsIgnoreCase(suffix,"ppt")){
            fileConvertService = new PPT2PdfServiceImpl();
        }else if (StringUtils.equalsIgnoreCase(suffix,"xlsx") || StringUtils.equalsIgnoreCase(suffix,"xls")){
            fileConvertService = new Excel2PdfServiceImpl();
        }
        ConvertStatus convertStatus = null;
        //获取需要转换文档的所在路径
        File officeFile = new File(savePath()+File.separator+fileName);
        File outputFile = new File(outPDFPath(fileNames) +File.separator+ fileNames+".pdf");//PDF保存文件路径
        //如果文件是 PDF 不用转换直接复制到指定目录
        if (StringUtils.equalsIgnoreCase(suffix,"pdf")){
            FileRWUtils.copyFile(officeFile.getPath(),outPDFPath(fileNames));
            return convertStatus;
        }
        if (!outputFile.exists()){
            InputStream inputStream = new FileInputStream(officeFile);
            OutputStream outputStream = new FileOutputStream(outputFile);
            //开始转换
            convertStatus = fileConvertService.convert2Pdf(inputStream, outputStream);
        }
        return convertStatus;
    }

    /**
     * 根据PDF文件名获取PDF存储地址
     * @param fileName PDF文件名
     * @return
     *  没有加.toURI() 有可能中文路径会乱码 加上获取会出错
     */
    public static String outPDFPath(String fileName) throws Exception{
        String pathName = PreviewUtils.class.getClassLoader().getResource("").getPath();
        //文件保存位置 如果文件夹不存在创建文件夹
        File saveDir = new File(pathName+File.separator+"outputFile");
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        return saveDir.getPath();
    }

    /**
     * 获取文件保存路径
     * @return
     */
    public static String savePath(){
        String pathName = PreviewUtils.class.getClassLoader().getResource("").getPath();
        //文件保存位置 如果文件夹不存在创建文件夹
        File saveDir = new File(pathName+File.separator+"convertFile");
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        return saveDir.getPath();
    }

    /**
     * 从网络Url中下载文件
     * @param urlStr 下载地址
     * @param fileName 文件名
     * @param savePath  保存地址
     * @throws IOException
     */
    public static boolean  downLoadFromUrl(String urlStr,String fileName,String savePath){
        File file = new File(savePath+File.separator+fileName);
        //文件是否已存在
        if(file.exists()){
            return true;
        }
        try {
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            //设置超时间为30秒
            conn.setConnectTimeout(30*1000);
            //防止屏蔽程序抓取而返回403错误
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            //得到输入流
            InputStream inputStream = conn.getInputStream();
            //获取自己数组
            byte[] getData = readInputStream(inputStream);
            FileOutputStream fos = new FileOutputStream(file);
            if (getData == null){
                return false;
            }
            fos.write(getData);
            if(fos!=null){
                fos.close();
            }
            if(inputStream!=null){
                inputStream.close();
            }
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK){
                return true;
            }
        } catch (IOException e) {
            LogUtil.error("附件下载转换PDF出错!",e);
        }
        return false;
    }

    /**
     * 从输入流中获取字节数组
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }


}

这里写图片描述

由于我们要集成到自己的工程中来,所以此处直接copy了viewer.html页面,修改为了我们工程需要的view_pdfjs.jsp ,其中做了一些修改删除了部分不需要的功能
下面是我修改过后的预览页面 效果图:
这里写图片描述

附件在线预览控件实现的市场调研 阅读详情

相关推荐

Java实现Office在线预览

调试的错误就是编程给你最好的东西,因为在每个错误上面都标志着前进的一步。

tmac937436的博客 7320

java通过url在线预览Word、excel、ppt、pdf、txt文档

java通过url在线预览Word、excel、ppt、pdf、txt文档

web使用openoffice实现在线预览office文档

最近搞web项目,使用框架struts+spring+jpa实现,做到项目里面一个在线预览功能,试过无数的方法,最后得到了一个非常使用的方法,这方法也是我看过多篇博客的出来的,仅限参考。 效果图如下: 第一步: 通过第三方软件openofficeoffice文档ppt,pptx,doc,docx,xls,xlsx转换pdf文档; openoffice下载链接:http:

tan313的专栏 2万+

java实现浏览器在线预览offic(doc、xls、ppt)和pdf文件

java实现浏览器在线预览offic(doc、xls、ppt)和pdf文件,本人将例子集成到项目中,已成功。 技术原理:将文件先转换pdf文件,再将pdf文件转换成swf文件,最后显示在浏览器上。 资源描述:本资源包括swftools安装包以及例子源码,由于openOffice太大,请大家去官网下载apache_openoffice_incubating_win_x86_install_zh-cn.zip。运行环境为windows,若需运行在linux,请去官网下载对应版本。 说明:例子运行之前,请先修改代码中swftools安装路径,以及文件存放路径。

java实现(如:WORD、EXCEL、PPT、ZIP 等)文件在线预览功能

附带有各类型附件(如:word,excel,ppt,zip等),用户希望能够有在线预览附件的功能。日常开发中常见的文件格式有pdf,word,Excel,PPT,Html,txt,图片等。pdf,Html,txt,图片这种实现在线预览非常简单,有一些前端的插件可以满足要求。word,Excel,PPT如果要实现在线预览则更难一些。...

m0_37951794的博客 1万+

文件文档在线预览转换解决方案和应用

解决文件文档在线预览转换,文件文档在线预览转换部署和应用、Word、PPT转换Pdf在线浏览、PDF关键字高亮定位与搜索

HarryChenj的专栏 2454

Java web 在线预览--参考二

http://blog.csdn.net/qq_28533563/article/details/72676425 这位博主提供2种思路, 主要实现方式就是 (openoffice+swftools+flexpaper)和(aspose+pdfjs预览)。 第一种就是上一篇文章的实现,第二种便是这位博主的主要实现   备份原文:   Java实现在线预览附件 office转换PDF ...

rainyspring4540的专栏 2910

实现在线预览office文档(word,excel,ppt)的几种方法

在日常的生活或者工作中,我们都会用到office文档,但是在大多数人们阅读文档时候,并不想将网站上的office文档下载到本地,这时候就需要文档在线预览的功能。 实现文档在线预览的方式大概有以下几种 1、转换PDF 2、转换为HTML 3、在服务器上部署office document online服务 4、开源项目提供的功能 5、使用第三方提供的付费接口 一、在后台将office文档转换pdf,然后在浏览器中或者插件中查看 1、使用apache openoffice...

qq_38830964的博客 4万+

Java Servlet实现在浏览器中打开pdf文件

NULL 博文链接:https://doujun1998.iteye.com/blog/1758708

Java实现office办公文档在线预览(word、excel、ppt、txt等)

Java实现office办公文档在线预览(word、excel、ppt、txt等)

Javaの甘乃迪的博客 1万+

Office在线预览PDF在线预览实现方式大集合

微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免费的swftools.exe工具生成swf格式的Flash文件,网页中加载flexpaper免费开源工具(有广告)实现Flash文件的预览。优点:1、有效的保护的源文件及文件的复制,不可复制也是缺点。2、源码是自己的,版权有保证。缺点:1、服务器上必须安装Office软件。

冰月霜影的博客 3541

JavaWeb实现office文件、PDF文件在线预览功能

JavaWeb实现office文件、PDF文件在线预览功能实现思想介绍使用插件(在服务器上下载并安装,紧记安装路径,后面会用到)OpenOfficeSwfTools使用的jar前端页面所需要的JSjodconverter-2.2.2.jar下载后台代码实现前端展示页面 实现思想介绍 文件上传的同时就做好文件处理。所有的文件交由服务器处理,避免客户端安装插件,数据库设计上要提供保存两个文件的存放地址...

叁金Coder 7404

php实现在线预览word等office文件,同时添加水印

最近需要在网页上实现预览上传的word文档,并能在预览中添加自己的水印,之前没有实现过相关功能,搜索了一下网上的资料,清晰完整的教程较少,因此将自己实现的步骤和遇到的问题记录下来,希望能帮到有需要的人 服务器操作系统:linux centos 整个实现步骤简要如下: 安装配置OpenOfficejava、jodconverter,实现office文件转pdf 下载fpdf、fpdi库,...

自律带来自由 1万+

java实现office文件在线预览

需要下载的软件: OpenOffice下载  jodconverter.jar下载  基本思路: 通过jodconverte在java代码中调用OpenOfficeOffice文件转换为html文件来实现在线预览。 demo代码: package com.pds.framework.utils; import com.artofsolving.jodconverte

Wewon_real的博客 5295

java实现excel、word在线预览

java实现excel、word在线预览 最近项目上有一个新的需求是实现附件预览,支持word、excel、pdf附件在线预览,刚接到任务时一脸懵逼,以为直接访问本地的附件地址就可以,结果word、excel直接下载下来了,紧接着去百度各种搜集资料,发现jacob 这个jar包可以实现word、excel转换pdf,在本地测试了半天这个jar包不支持jdk1.7,。而后咨询了一下同事,同事...

qq_38130865的博客 9052

项目中实现在线预览office文件

最近项目中需要前端页面预览office文件,word、excel、ppt,现有如下几种解决办法,包括前端后端 1.使用微软提供的office在线预览,提供下载,打印pdf等功能,无法自定义。使用方法 http://view.officeapps.live.com/op/view.aspx?src=$url(url为文件所在地址URL,需要部署在线上,可以访问的URL,IRL路径必须通过URL编码)...

zch的博客 3907

openoffice+pdf2swf实现在线转换office文档,实现在线预览

openoffice+pdf2swf实现在线转换office文档,实现在线预览

cai_chinasoft的专栏 2万+

Java通过openOffice实现word,excel,ppt转成pdf实现在线预览

Java通过openOffice实现word,excel,ppt转成pdf实现在线预览一、OpenOffice1.1 下载地址1.2 JodConverter1.3 新建实体类PDFDemo二、实践代码二三、linux环境下安装 openOffice 并启动服务 相关博文来源: 简书:java通过openOffice实现word,excel,ppt转成pdf实现在线预览 博客园:java 如何将 word,excel,ppt如何转pdf --openoffice (1) 博客园:Java使用Openoffi

爱是与世界平行 6331
上一篇: MAVEN 上传jar包到私服
下一篇: Linux 查看服务器防火墙拦截端口
朱敏_
博客等级 码龄11年 26粉丝 15原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值