文件在线预览功能(office文件)

由于项目的功能需要看了一下文件预览的功能实现,主要是看office的word,excel,ppt这些的在线预览。

比较常见的是以下两种:

一、通过iframe直接引用微软提供的方法(最简单)

在 https://view.officeapps.live.com/op/view.aspx?src= 后边添加需要预览的内容

问题:1、必须可以访问网络,( https://view.officeapps.live.com/op/view.aspx可以访问)

          2、预览资源是有网络资源,本地资源不可以,或者找到本地资源转换网络资源的方法

 

二:OpenOffice实现前端在线预览

思路:把需要在线预览PDF、excle、ppt、word文件转换成pdf,然后页面展示的是pdf

问题:需要安装OpenOffice(环境准备麻烦,其实也不麻烦。) http://www.openoffice.org/zh-cn/download/

大家可以根据自己的情况选择,由于我的情况是不能访问外网,所以选择了openoffice的方式。

下面简单的说下怎么实现

1、安装openoffice

windows版的不多说,就是下载之后,运行就行,还是说下启动:找到安装目录,

运行→cmd,输入:

cd C:\Program Files (x86)\OpenOffice 4\program

回车

再输入

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

回车就可以了

接下来说下,linux版的,https://www.cnblogs.com/goodcheap/p/7929986.html,这个写的具体,可以参考一下

此处需要提醒的host后面的ip,如果不是本机访问,请不要写127.0.0.1,请写机器对应的ip!!!!否则下面的请求会找不到服务

另外需要注意的是中文乱码问题,原因是linux没有那些字体,所以需要拷贝字体到liunx

(1)用vim /etc/fonts/fonts.conf,可以看到系统字体文件的目录

(2)将windows系统字体文件拷贝到此目录下

(3)重建Linux字体索引
    mkfontscale
    mkfontdir
    fc-cache

重启openoffice。。。

pom.xml

	
		
			org.artofsolving.jodconverter
			jodconverter-core
			3.0-beta-4
		
		
			com.artofsolving
			jodconverter
			2.2.2
		

jodconverter.jar一定要是2.2.2版本的,其他版本的不能解析2007版的文件,会报转换错误https://download.csdn.net/download/duanqiaocanyue2012/10849582

代码部分:

public class OfficePDFUtils {
    private static final Logger logger = LoggerFactory.getLogger(OfficePDFUtils.class);
   
    private static String[] docFile =
        {".txt", ".doc", ".docx", ".wps", ".xls", ".xlsx", ".et", ".ppt", ".pptx", ".dps"};// office办公软件格式

    public static boolean office2PDF(String ip, int port, String sourceFile, String destFile) {
        try {
            File inputFile = new File(sourceFile);
            if (!inputFile.exists()) {
                logger.info("找不到源文件");
                return false;// 找不到源文件, 则返回-1
            }
            // 如果目标路径不存在, 则新建该路径
            File outputFile = new File(destFile);
            if (!outputFile.getParentFile().exists()) {
                outputFile.getParentFile().mkdirs();

            }
            // connect to an OpenOffice.org instance running on port 8100
            OpenOfficeConnection connection = new SocketOpenOfficeConnection(ip, port);
            connection.connect();
            // convert
            DocumentConverter converter = new StreamOpenOfficeDocumentConverter(connection);
            converter.convert(inputFile, outputFile);
            // close the connection
            connection.disconnect();
            logger.info("路径:" + destFile);
            return true;
        } catch (ConnectException e) {
            logger.warn("ConnectException", e);
        }

        return true;
    }

    /**
     * 可解析的文件
     * 
     * @author tang
     * @method isConvertible
     * @param fileName
     * @return
     * @return boolean
    
     */
    public static boolean isConvertible(String fileName) {
        String after = StringUtils.extractAfter(fileName, ".");
        for (String type : docFile) {
            if (type.contains(after)) {
                return true;
            }
        }
        return false;
    }
    
  
    
}

 

 

 

你可能感兴趣的:(日常问题)