Java平台下利用aspose转word为PDF实现文档在线预览

摘要:
找寻解决方式需求点主要有三个,分别是word文件的上传、预览和下载,文件的上传和下载就不多说了,主要的难点在于预览。使用ApacheOpenOffice的将word转换为PDFApacheOpenOffice支持多种环境,而且是开源的,我没有使用这种方式,想了解的话可以参考:https://blog.csdn.net/a1786223749/article/details/79461070使用apose将word转换为PDFapose是一个很强大的office文档处理软件,可以完美的实现word文档转换为pdf文件,缺点就是软件是需要付费的。

原文链接:https://www.jianshu.com/p/86716c7122ef

原始需求

java-web项目某页面,用户可上传word文档,上传后的文档名在页面的表格中展示,需要提供word文档的在线预览、下载功能。

找寻解决方式

需求点主要有三个,分别是word文件的上传、预览和下载,文件的上传和下载就不多说了,主要的难点在于预览。找资料找到了下面几种解决方式:

利用POI把word文档转换为html

现在的POI对于word文档处理是挺强大的,对于一些简单文档的处理问题不大,但是对于一些复杂文档的处理就有点心累了,而且用户上传的文档是相对比较复杂的文档,除了复杂的表格外还有很多图片,所以放弃这种方式。

利用微软或者Google的在线文档预览服务

这个方法也是不可行的,使用微软和Google的在线文档预览服务需要向他们提供word文档的链接,而客户的文件是需要保密,不能对外泄露的。

使用Apache OpenOffice的将word转换为PDF

Apache OpenOffice支持多种环境,而且是开源的,我没有使用这种方式,想了解的话可以参考:https://blog.csdn.net/a1786223749/article/details/79461070

使用apose将word转换为PDF

apose是一个很强大的office文档处理软件,可以完美的实现word文档转换为pdf文件,缺点就是软件是需要付费的。但是网上可以找到很多的破解版jar包,测试效果还是很不错的,而且使用简单,项目中使用的就是这种方式。

使用apose转换word为PDF

importcom.aspose.words.Document;
importcom.aspose.words.License;
importcom.aspose.words.SaveFormat;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.web.multipart.MultipartFile;

import java.io.*;

/*** <b><code>Word2PdfUtil</code></b>
 * <p>
 * Description: word to pdf util.
 * <p>
 * <b>Creation Time:</b> 2018/5/15 15:10
 *
 * @author* @date 2018 /5/15
 * @sinceJDK 1.7
 */
public classWord2PdfUtil {

    /*** The constant LOG.
     *
     */
    private static final Logger LOG = LoggerFactory.getLogger(Word2PdfUtil.class);

    /*** 获取license
     *
     * @return
     */
    private static booleangetLicense() {
        boolean result = false;
        try{
            //凭证
            String licenseStr =
                    "<License>
" +
                    "  <Data>
" +
                    "    <Products>
" +
                    "      <Product>Aspose.Total for Java</Product>
" +
                    "      <Product>Aspose.Words for Java</Product>
" +
                    "    </Products>
" +
                    "    <EditionType>Enterprise</EditionType>
" +
                    "    <SubscriptionExpiry>20991231</SubscriptionExpiry>
" +
                    "    <LicenseExpiry>20991231</LicenseExpiry>
" +
                    "    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
" +
                    "  </Data>
" +
                    "  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
" +
                    "</License>";
            InputStream license = new ByteArrayInputStream(licenseStr.getBytes("UTF-8"));
            License asposeLic = newLicense();
            asposeLic.setLicense(license);
            result = true;
        } catch(Exception e) {
            LOG.error("error:", e);
        }
        returnresult;
    }

    /*** Word 2 pdf.
     *
     * @parammultipartFile the multipart file
     * @parampdfFilePath   the pdf file path
     */
    public static voidword2Pdf(MultipartFile multipartFile, String pdfFilePath) {
        FileOutputStream fileOS = null;
        //验证License
        if (!getLicense()) {
            LOG.error("验证License失败!");
            return;
        }
        try{
            Document doc = newDocument(multipartFile.getInputStream());
            fileOS = new FileOutputStream(newFile(pdfFilePath));
            //保存转换的pdf文件
doc.save(fileOS, SaveFormat.PDF);
        } catch(Exception e) {
            LOG.error("error:", e);
        } finally{
            try{
                if(fileOS != null){
                    fileOS.close();
                }
            } catch(IOException e) {
                LOG.error("error:", e);
            }
        }
    }
}  

apose的Jar包和maven-pom.xml

链接:https://pan.baidu.com/s/19clf3JPKMkr_O9uUFF8C0Q 密码:bbu0

前端预览PDF文件

关于前端预览pdf文件可以使用pdf.js预览。另推荐一个Angular2+的PDF预览插件:https://github.com/VadimDez/ng2-pdf-viewer

遇到的问题

WORD转PDF功能在windows下转换正常,Linux下中文乱码

因为转换时需要系统里有word文档里使用的字体,当找不到该字体的时候就会乱码。
Linux下默认只有很少的中文字体,所以很可能会出现中文乱码问题。
解决办法也很简单,只需在Linux系统中添加常用的字体即可。

1. 查看系统支持的字体
fc-list

2. 查看系统支持的中文字体
fc-list :lang=zh

3. 创建字体目录(需要root权限,linux系统默认的字体存放路径为/usr/share/fonts,没有可自行创建)
cd /usr/share/fonts
mkdir windows

4. cp字体文件(将需要新增的字体文件拷贝到指定目录中)
cd windows
cp ~/fonts/* ./

5. 目录和字体文件设置为所有用户可见
chmod 755 ../windows
chmod 755 ./*

6. 应用字体

mkfontscale (如果提示 mkfontscale: command not found,需自行安装 # yum install mkfontscale )
mkfontdir
fc-cache -fv (如果提示 fc-cache: command not found,则需要安装# yum install fontconfig )

7.再次查看系统支持的字体
fc-list

作者:亓亓亓亓凌
链接:https://www.jianshu.com/p/86716c7122ef
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

免责声明:文章转载自《Java平台下利用aspose转word为PDF实现文档在线预览》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android文件下载(实现断点续传)ios开发——日常之XCode 文件后面带有问号的问题怎么解决??下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Libreoffice处理office文档,OFFICE转PDF,OFFICE转图片,OFFICE转图片包含加水印逻辑

主要逻辑为office转pdf office转图片实际上是先转为pdf再利用另外一个工具类转为图片 转图片工具类请看另一篇文章 import org.apache.commons.lang3.StringUtils; import org.artofsolving.jodconverter.OfficeDocumentConverter; import o...

一款超好用的PDF阅读器:智器阅读

现在大部分的人都在使用智能手机,那我们如何利用好我们的智能手机呢?智能手机不仅仅是电话短信玩游戏了,也可以成为我们读书学习的工具。电子书PDF格式的超多,去以前也试过各种各样的阅读器,可是没觉的好的,最近终于遇到一款比较好的阅读器,因此就很快推荐给大家,一款android平台的PDF阅读器智器阅读。   这款阅读器的特点如下: 秒翻阅读:快速翻页,...

使用Aspose.Cell控件实现Excel高难度报表的生成(一)导出表格控件

时光飞逝,生活、工作、业余研究总是在不停忙碌着,转眼快到月底,该月的博客文章任务未完,停顿回忆一下,总结一些经验以及好的东西出来,大家一起分享一下。本文章主要介绍报表的生成,基于Aspose.Cell控件的报表生成。谈到报表,估计大家都有所领悟以及个人的理解,总的来说,一般的报表生成,基本上是基于以下几种方式:一种是基于微软Excel内置的引擎来实现;一...

MongoDB GridFS 存储大文件

我们经常会遇到这样的场景:上传/下载文件。 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中; (2)将文件存储在数据库中。 如果我们选择(2),那么我们可以使用MongoDB GridFS 用于存储大小超过 16MB 的文件(文档,压缩文件,音视频,软件)。 一、MongoDB GridFS 介绍 MongoDB GridFS 是一个分...

Java 处理PDF图章(印章)——图片图章、动态图章

图章(印章)是一种在合同、票据、公文等文件中表明法律效应、部门机关权威的重要指示物,常见于各种格式的文件、文档中。对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现。本篇文档分享通过Java代码在PDF文档中添加图章的方法。内容将分两部分介绍: 1. 添加图片图章。即通过加载现有的图章(以图片形式),添加到PDF指定页面位置 2. 添加动...

在线浏览PDF文件的实用jquery插件推荐(转)

在web开发当中我们经常需要进行需要在线浏览PDf内容,在线嵌入动态pdf,传统的解决方法安装客户端PDF阅读器,如果是在谷歌是可以在线浏览的,因为他自身就带了一些插件,以前遇到这样的问题往往是费时又费力,很不好解决, 今天就给大家分享一系列使用javascript实现的pdf插件效果,无需借助第三方插件就可以实现在线浏览功能,非常实用 jQuery...