利用aspose转word为PDF实现文档在线预览

POI OLE2NotOfficeXmlFileException:The supplied data appears to be in the OLE2 Format问题解决 问题描述: org.apache.poi.openxml4j.exceptions.OLE2NotOfficeXmlFileException: The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with OOXML (Office Open XML) Documents. You need to call a different part of POI to pro 阅读详情

原始需求

java-web and 小程序 项目某页面,用户在支付前生成在线合同,并且签订电子签名,并且可以提供PDF在线预览和下载功能。

分析问题

  1. 既然是在线合同,肯定就需要靠模板来生成,这里我使用了freemarker模板引擎,这里就不详细介绍了,直接借用别人的帖子使用freemarker生成word,步骤详解并奉上源代码,如果需要循环插入列表,图片等情况,不懂就问,评论区见
  2. 由于freemarker生成的word本身就不是一个标准格式的word,他其实是一个xml格式的文件,所以用一般的的word转pdf工具是会出现这种问题
    Exception in thread "main" org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: The supplied data appears to be a raw XML file. Formats such as Office 2003 XML are not supported
  3. 这里介绍几种java里实现Word转PDF的方案:
    一、libreOffice 优点:样式稳定,缺点:性能较差
    二、docx4j 优点:性能比 libreoffice 稍好,缺点:性能差、容易出现 PDF 和 Word 样式不一致问题
    三、documents4j 优点:样式稳定、性能高,缺点:要依赖本地的 office 软件做转换,在 linux 下要调远程服务来转换,GitHub:documents4j
    四、jacob 优点:样式稳定、性能高,缺点:只支持 window 系统且服务器要安装 office 软件,并发量大时会有瓶颈
    五、pageOffice 优点:兼容性好,性能高,缺点:收费,客户端需要安装 office 软件和卓正控件,偶尔会出现兼容性问题

实际应用中,前面四种方案都用过,踩了不少坑,比如 libreoffice,要考虑生产环境低内核版本问题,docx4j 的转换后样式错乱问题,documents4j 不稳定,会出现进程阻塞,jacob 只支持 window 服务器,最后还说卓正的 pageOffice最好用。

为了考虑性能,样式稳定,成本,开发效率,最终我选择了Aspose!!!

Aspose

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

apose的Jar包和maven-pom.xml

链接:https://pan.baidu.com/s/1Fc-9aefeo8jt_hlqnY0UGw
提取码:z81j

<!--添加本地的aspose-words-15.8.0-jdk16.jar包-->
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>15.8.0</version>
            <scope>system</scope>
            <systemPath>${basedir}/src/main/resources/lib/aspose-words-15.8.0-jdk16.jar</systemPath>
        </dependency>

license.xml(去除水印)

<?xml version="1.0" encoding="UTF-8" ?>
<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>

转换工具类

package com.example.declaration.util;

import com.aspose.words.*;

import com.aspose.words.Document;
import fr.opensagres.poi.xwpf.converter.pdf.PdfConverter;
import fr.opensagres.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;


public class WordToPDF {

    //public static void main(String[] args) {
    //    String docPath = BasePath.BASE_PATH + "test.docx";
    //    String pdfPath = BasePath.BASE_PATH + "test.pdf";
    //    WordToPDF.wordToPdf(docPath, pdfPath);
    //
    //}

    public static boolean wordToPdf(String inPath, String outPath) {
        if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
            return false;
        }
        FileOutputStream os = null;
        try {
            long old = System.currentTimeMillis();
            File file = new File(outPath); // 新建一个空白pdf文档
            os = new FileOutputStream(file);
            Document doc = new Document(inPath); // Address是将要被转化的word文档
            doc.save(os, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,
            // EPUB, XPS, SWF 相互转换
            long now = System.currentTimeMillis();
            System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒"); // 转化用时
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (os != null) {
                try {
                    os.flush();
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return true;
    }

    public static boolean getLicense() {
        boolean result = false;
        InputStream is = null;
        try {
            Resource resource = new ClassPathResource("license.xml");
            is = resource.getInputStream();
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
    
	 /**
     * 导出最后的pdf格式
     *
     * @param response
     * @param pdfPath
     * @param pdfPath
     */
    public static void exportPdf(HttpServletResponse response, String pdfPath, String fileName) {
        InputStream inputStream = null;
        ServletOutputStream outputStream = null;
        File pdfFile = new File(pdfPath);
        try {
            byte[] bs = new byte[1024];
            inputStream = new FileInputStream(pdfFile);
            outputStream = response.getOutputStream();

            response.setContentType("application/pdf");
            response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
            response.setHeader("Content-Disposition", "filename=" + URLEncoder.encode(fileName, "UTF-8"));

            while (inputStream.read(bs) > 0) {
                outputStream.write(bs);
            }

            inputStream.close();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

到这里就结束了

乱码问题请看:aspose将word转pdf时乱码,或者出现小方框问题

java实现在线预览功能(支持xlx,word,ppt,dwg等格式转Pdf) offoce转pdf文件预览,基于aspose-cad,aspose-cells,aspose-words,aspose-slides实现word,xls,ppt,dwg转pdf文件预览 之前基于openoffice做过文件转换预览,由于openoffice需要在容器安装服务而且不稳定, 容易因为内存问题,网络问题被挤掉或者无法连接和超时所有换aspose实现. word,xls,ppt,dwg工具类 package com.ruifu.conversions.utils; import com.asp 阅读详情

相关推荐

java 结合html或vue 实现 word 在线预览支持修改和保存 利用 aspose + tiny 结合使用

本文实现了一个基于Java的Word文档在线编辑系统,主要功能如下: 系统采用前后端分离架构,后端使用Aspose库进行Word与HTML格式转换,前端集成TinyMCE富文本编辑器。 核心功能流程: 根据文档ID从lib_pdf_export表查询Word文件路径 将Word转为HTML格式返回前端展示 前端编辑后保存HTML内容,后端重新生成Word和PDF文件 关键技术点: 使用Aspose.Words进行文档格式转换 支持HTML内容与Word文档双向转换 处理文档编码问题(UTF-8) 文件路径管

专注技术实战落地的开发,覆盖 Linux 运维、容器部署、Web 开发、自动化工具搭建等领域,提供从环境配置到问题排查的全流程教程,附完整命令行、代码示例与操作截图,助力开发者快速解决项目实际难题。有技术疑问可私聊交流。 1078

读取world时2007没有问题2003有问题

刚开始从网上找了个例子使用new HSSFWorkbook(new FileInputStream(excelFile))来读取Workbook,对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appea...

liman1002的专栏 2187

在线文件/文档预览/分页分片预览 之开源kkfileview(word转pdf,pdf截取,pdf转图片,Aspose jobConverter , OpenOffice ,libreoffice )

官网文档 kkFileView - 在线文件预览 git代码地址 kkFileView: 使用spring boot打造文件文档在线预览项目解决方案,支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在线预览 - Gitee.com 开源协议 apache。可免费商用 安装部署 ..

FREEDOM 7553

POI - 读取Excel2003、Excel2007或更高级的兼容性问题

我们使用POI中的HSSFWorkbook来读取Excel数据。 public void test(File file) throws IOException { InputStream inp = new FileInputStream(file); HSSFWorkbook workbook = new HSSFWorkbook(inp); // workbook...

Champion.Wong 的专栏 11万+

【SpringBoot】40、SpringBoot中使用Aspose将文件转为PDF实现在线预览

一、简介 Aspose 是 .NET 和 Java 开发组件以及为 Microsoft SQL Server Reporting Services 和 JasperReports 等平台提供渲染扩展的领先供应商。它的核心重点是提供最完整和最强大的文件管理产品。Aspose 产品支持一些商业上最流行的文件格式,包括:Word 文档、Excel 电子表格、PowerPoint 演示文稿、PDF 文档、Flash 演示文稿和项目文件。 二、下载 下载 Aspose 的依赖 Jar 包可以通过一下仓库下载:Aspo

JACKAL 21万+

Aspose实现附件在线预览功能

利用Aspose实现的附件在线预览功能,包括excel、word、ppt 已是破解版不限时间可次数 去除水印 工程为java工程 导入即可用

java解析获取Excel中的数据--同时兼容2003及2007

首先大家先了解一下以下内容:引用 http://feitian0127.iteye.com/blog/1152524     java解析Excel(兼容2003及2007) 刚开始从网上找了个例子使用new HSSFWorkbook(new FileInputStream(excelFile))来读取Workbook, 对Excel2003以前(包括2003)的版本没有问题,但读取

蓝缘 10万+

基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践

本文详细介绍了基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践。通过分析PPS信号的时序要求,对比不同定时器的特性,并提供完整的代码实现与调试技巧,帮助开发者解决多传感器数据融合中的时间同步问题。实测表明,该方案在车载环境中稳定运行超过2000小时。

weixin_30540691的博客 324

使用Java实现word文档转图片 在线预览

项目上有个需求,要实现上传word,预览的时候用word每一页的图片进行预览。 一共有两种方法。第一种想到的方法是将word先转换为pdf,然后将pdf的每一页都保存为图片;第二种方法是将word直接转换为图片。 在第一种方式实现的过程中发现在文档页数变大时,转pdf时间较长,所以直接使用word转图片方法。 主要使用 aspose-words-*-jdk16.jar。破解版的jar是来自于...

一个喜欢吃鸡的程序猿 1万+

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

不同网段共享打印机的方法

不同网段怎么共享打印机,跨路由怎么共享打印机

weixin_44686104的博客 1万+

文档在线预览(二)word、pdf、excel文件转html以实现文档在线预览

实现文档在线预览的方式除了上篇文章说的将文档转成图片的实现方式外,还有转成pdf,前端通过pdf.js、pdfobject.js等插件来实现在线预览,以及本文将要说到的将文档转成html的方式来实现在线预览。代码基于 aspose-words(用于word转html),pdfbox(用于pdf转html),所以事先需要在项目里下面两个依赖:

fhey的博客 6734

谷歌浏览器崩溃排查:闪退、卡死、网页打不开的修复指南

浏览器多进程架构通过进程隔离、GPU加速和扩展沙箱提升网页渲染效率,但配置损坏、扩展冲突、显卡驱动异常或系统资源不足时,常会以闪退、卡死、白屏、内存占用飙升和能上微信却打不开网页等形式暴露。排查价值在于先分层定位系统、进程、配置扩展与网页内容,再用无痕模式、chrome://crashes、chrome://gpu和浏览器任务管理器收集证据,避免盲目重装。对办公、开发运维和日常维护场景,禁用扩展、关闭硬件加速、刷新DNS缓存、重置配置文件乃至干净重装,都是可复用的工程化处置手段。围绕谷歌浏览器崩溃的典型症状

weixin_34138056的博客 425

从Word到PDF:解锁在线预览的Java后端实现与避坑指南

本文详细介绍了在Java后端实现Word文档在线预览的完整方案,核心思路是将Word转换为PDF再通过前端渲染。文章重点解析了使用Aspose.Words进行高效转换的代码实现、关键的许可证配置以避免水印,并提供了性能优化、路径处理、大文件处理等实战避坑指南,帮助开发者构建稳定可靠的文档预览服务。

tomato的博客 1059

ais信号接收设备_国内首款基于软件无线电技术的AIS基站投入测试使用

星网宇达子公司北京凯盾环宇科技有限公司经过多年的潜心研发,成功研制出国内首台基于软件无线电(SDR)的CATON 9011 AIS基站。该基站采用软件无线电技术,利用软件数字技术代替传统的模拟电路,大大的降低了模拟器件的使用率,提高了基站的可靠性和使用年限。CATON 9011 AIS基站研制依据ITU-R M.1371-5、IEC 62320-1、IEC 61162-1等国际标准,兼容...

weixin_29057163的博客 2334

[基于STM32底盘控制与ROS上层导航小车制作] 第一节 stm32电机驱动与编码器读取反馈

系列文章目录 第一节stm32电机驱动与编码器读取反馈 第二节 stm32电机pid控制 第三节 stm32线速度标定 第四节 stm32添加mpu6050得到angle角度 第五节 实现STM32与ubuntu系统下的ROS串口DMA通信,传输底盘速度等信息 第六节 ROS计算和发布里程计 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 系列文章目录 前言 1.pwm与电机正反转 2.编码器初始化 二、pwm控制与编码器使用 1.pwm使电机 .

LanLanLan1927的博客 1万+

用JAVA如何实现word文档在线预览

利用JAVA生成WORD文档,WORD转换PDF在线预览,打印

chenqqabcdchenqqabcd的专栏 5205

YOLOv8多传感器融合技术——摄像头阵列融合技术详解

本文详细介绍了基于YOLOv8的摄像头阵列融合技术,该技术通过多摄像头协同工作实现360度无死角环境感知。文章阐述了系统原理,包括全方位视野覆盖、冗余设计和深度感知等优势,并提供了完整的Python实现代码。关键技术涵盖多摄像头检测、立体匹配、3D投影和目标融合等模块,支持时间域融合提升稳定性。该系统可显著提高自动驾驶的环境感知能力,减少检测盲区,增强系统可靠性,是L4-L5级自动驾驶的关键技术之一。文章还展示了城市驾驶场景的实际应用,验证了该技术对复杂交通环境的适应能力。

u010117029的博客 213

用JAVA实现word文档在线预览的功能

使用aspose将office转换为PDF并在线预览

8年 Java 全栈开发经验,专注于后端架构、JVM 优化与面试实战。用硬核源码解析 + 实战案例,帮你从基础到进阶,吃透 Java 核心。 7335

8、音频运行时系统的架构设计

本文深入探讨了音频运行时系统的分层设计及其优势,包括逻辑层和物理层的功能划分。通过分层设计,开发者可以更轻松地管理和优化音频资源,确保其在不同平台上的高效运行。文章还介绍了平台适配与优化、错误处理与调试以及未来发展方向等内容,为开发者提供了宝贵的参考和指导。

juice的博客 461

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

使用aspose组件将word、excel转换成pdf 实现在线预览

第一步 : 引入相关jar包。(两种方式) 方式一: 直接下载jar包上传到私服,或者通过引入本地依赖的方式进行引入jar包 ,jar包下载地址:https://repository.aspose.com/repo/com/aspose/ 方式二:通过直接映入依赖的方式进行下载, 先引入jar包所在仓库地址 <repositories> <repository> <id>AsposeJavaAPI</id>...

pingweicheng的博客 4234

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档在线预览(一)通过将txt、word、pdf、ppt文件转成图片实现在线预览功能

如果不想网页上的文章被复制(没错,说的就是某点),如果想实现文档不需要下载下来就能在线预览查看(常见于文档付费下载网站、邮箱附件预览),该怎么做?常见的做法就是将他们转化成图片。以下代码基于 aspose-words(用于txt、word转图片),pdfbox(用于pdf转图片),封装成一个工具类来实现txt、word、pdf等文件转图片的需求。首先在项目的pom文件里添加下面两个依赖

fhey的博客 7385

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《全网最全!Java 实现 Word/Excel/PPT 在线预览(附完整源码 + 避坑指南)》

还在愁办公文档在线处理?本文手把手教你用 Java 实现 Word/Excel/PPT 的在线编辑 + 预览核心功能!

8年 Java 全栈开发经验,专注于后端架构、JVM 优化与面试实战。用硬核源码解析 + 实战案例,帮你从基础到进阶,吃透 Java 核心。 1万+

java使用freeMark生成word,转word为pdf,利用pdfjs实现预览word

1.首先用wps创建一个word模板,模板里的动态参数可以用 ${xxx} 来表示(注:这是free mark的写法),定义好模板然后另存为xml格式,将xml模板的后缀改为 .ftl,这就是一个freemark要用到的word模板(注:有时候里边的自定义数据会自动换行,这时候要点进模板看一眼自己的动态数据项有没有被换行,换行就放在一行,删掉其他的就可以了)。 2.在pom.xml里引入需要的包:...

qq_27319683的博客 1609

利用Aspose将Word文档转换为PDF实现在线预览

利用Aspose将Word文档转换为PDF实现在线预览 去发现同类优质开源项目:https://gitcode.com/ 简介 本资源文件提供了一个利用Aspose库将Word文档转换为PDF格式,从而实现文档在线预览的解决方案。Aspose是一个功能强大的文档处理库,支持多种文件格式,包括Word、Excel、PDF等。通过使用Aspose,开发者可以轻松地将Word文档转换为PDF,并在网页上...

gitblog_06567的博客 558
上一篇: Lambda — Stream API常用工具类
下一篇: aspose将word转pdf时乱码,或者出现小方框问题
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值