记录富文本内容生成word并在线预览碰到的问题,以及最终的解决方案。

一、需求

当前项目需要将页面富文本中的内容,生成word并在线预览。

二、解决方案1(未解决)

1. openoffice word在线预览

首先我先解决的是word的在线预览问题。这个用的是通用的方案,在电脑上安装openoffice插件,启动插件,然后是代码中调用暴露的API,然后实现word的在线预览。

2. 将富文本的html内容生成word

通过调用三方API,将富文本中的html内容生成word文件,然后再去预览。

问题:在通过将html装成word文件之后,openoffice插件却无法正常预览。通过看了下生成的word文件和正常创建的word文件对比,发现html生成的world,只是将html包裹了一层,和正常生成的word不一样。由此推测可能是该问题导致无法预览。

三、解决方案2(已解决)

在遇到方案2的问题时,发现暂时没有办法解决,因此换了一种方式。

1.将富文本的html内容生成word

和之前一样,先通过富文本保存的html内容,生成word。

2.将富文本的html内容生成PDF

这个多加了一步,通过富文本宝成的html内容,生成对应的PDF。

3.通过PDF进行预览。

通过接口,将PDF进行对外在线预览,如有需要将word发送给别人。

优点:不需要再安装openoffice插件,也不用启动openoffice。可直接进行预览。

缺点:需要同时生成PDF,当word有变动时,需要重新生成PDF。

四、源码

1.maven 依赖

        <dependency><groupId>org.docx4j</groupId><artifactId>docx4j-export-fo</artifactId><version>6.1.0</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.8</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

2. 生成word、pdf

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import org.springframework.util.StringUtils;import java.io.*;
import java.nio.charset.Charset;public class OfficeUtil {/*** 通过html生成PDF** @param htmlContent html格式内容* @param file        输出文件file*/public static void createdPdfByItextHtml(String htmlContent, File file) {InputStream inputStream = null;FileOutputStream outputStream = null;PdfWriter writer = null;try {// 1. 获取生成pdf的html内容inputStream = new ByteArrayInputStream(htmlContent.getBytes("utf-8"));outputStream = new FileOutputStream(file);Document document = new Document();writer = PdfWriter.getInstance(document, outputStream);document.open();// 2. 添加字体
//            XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
//            fontImp.register(getFontPath());// 3. 设置编码XMLWorkerHelper.getInstance().parseXHtml(writer, document, inputStream, Charset.forName("UTF-8"), new CustomXMLWorkerFontProvider());// 4. 关闭,(不关闭则会生成无效pdf)document.close();} catch (Exception ex) {ex.printStackTrace();} finally {try {if (writer != null) {writer.close();}if (outputStream != null) {outputStream.close();}if (inputStream != null) {inputStream.close();}} catch (IOException ex) {ex.printStackTrace();}}}/*** 通过HTML生成Word** @param htmlbody* @param fileName* @return* @throws Exception*/public static File createWordByHtml(String htmlbody, String fileName) throws Exception {File file = new File(fileName);OutputStream outputStream = new FileOutputStream(file);outputStream.write(htmlbody.getBytes());outputStream.flush();outputStream.close();return file;}public static void createDir(String dirPath) {File file = new File(dirPath);if (!file.exists()) {file.mkdirs();}}public static String generateHtmlBody(String detailContent) {detailContent = StringUtils.isEmpty(detailContent) ? "<h1 style=\"margin-left:28px\"><strong><span style=\";font-family:宋体;font-size:29px\">当前无展示内容</span></strong></h1>" : detailContent;String html = "<!DOCTYPE html>\n" +"<html>\n" +"<head>\n" +"\t<title></title>\n" +"</head>\n" +"<body>\n" +detailContent +"</body>\n" +"</html>";return html;}
}
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;/*** 解决XMLWorkerHelper中文不显示。* <p>使用iTextAsian.jar中自带的中文字体*/
public class CustomXMLWorkerFontProvider extends XMLWorkerFontProvider {@Overridepublic Font getFont(final String fontName, final String encoding, final boolean embedded, final float size, final int style,final BaseColor color) {BaseFont bf = null;try {bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);Font font = new Font(bf, size, style, color);font.setColor(color);// log.info("PDF文档字体初始化完成!");return font;} catch (Exception e) {e.printStackTrace();}return null;}
}

3.预览

public void preview(HttpServletResponse response) {byte[] data = null;FileInputStream input = new FileInputStream(new File("文件路径"));data = new byte[input.available()];input.read(data);response.getOutputStream().write(data);input.close();} catch (Exception e) {e.printStackTrace();}}

富文本生成word并在线预览(附源码)相关推荐

  1. 在线文库源码php,在线文库网站 文档分享平台网站 在线文档 在线预览网站 源码...

    套餐说明: 套餐1:在线文库源代码PHP 在线预览.NET(在线预览不含API接口调用功能)--180元 套餐2:在线文库源代码PHP 在线预览.NET(在线预览包含API接口调用功能)--220元 ...

  2. aspose实现word,excel在线预览

    aspose实现word,excel在线预览 一,项目中引入aspose依赖 <dependency><groupId>com.aspose</groupId>&l ...

  3. 使用aspose方式使excel,ppt,word进行在线预览。(无水印)

    使用aspose方式使excel,ppt,word进行在线预览.(无水印) 1.首先,页面需要用jquery中window.open();打开一个新页面. window.open(../fileMan ...

  4. pdf,word,ppt在线预览

    pdf,word,ppt在线预览 先展示下效果 pdf跟ppt的预览效果: word的预览效果 实现过程-只需一个iframe标签即可 详细介绍请看这里 <iframe src="ht ...

  5. Java 实现word pdf在线预览

    Java 实现word pdf在线预览 最近项目有这个需求,查找了一些资料,在这整理一下. 首先,pdf的文件,浏览器本身支持预览,不需要做什么处理. controller: 简单说下思路:就是利用i ...

  6. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码...

    C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 原文:C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 前言 系列 ...

  7. java计算机毕业设计Web企业差旅在线管理系统(附源码、数据库)

    java计算机毕业设计Web企业差旅在线管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecl ...

  8. 在线计算机考试系统源代码,在线考试系统 附源码和文档

    [实例简介] 在线考试系统 附源码和文档. 做毕业设计,课程设计或者正在学习相关技术知识的朋友可以下载资源学习.想继续学习相关知识的可以关注我. [实例截图] [核心代码] 在线考试系统4 └── S ...

  9. JS sojson.vX在线解密工具-附源码

    前言 此文仅用于技术科普,教育与研究用途,请勿用于商业甚至非法用途,否则一切后果自负.若用户利用此文章而受到惩处,本人及本平台对其行为概不负责,亦不承担任何连带责任. 在线工具 Sojson.v4ht ...

最新文章

  1. python 空dataframe_python 创建一个空dataframe 然后添加行数据的实例
  2. python——画一个笑脸
  3. VS2010 SP1
  4. verilog实现伺服电机控制
  5. [vue] vue2.0不再支持v-html中使用过滤器了怎么办?
  6. Java-Redis 热部署问题
  7. mysql客户端工具的使用
  8. LeetCode 199. 二叉树的右视图(DFS)(特殊的递归)
  9. 2007电脑报专用版SN(备忘之用)
  10. win10系统下JDK环境变量配置失败的原因
  11. Java(实验四)Java标准类库-将一个字符串中的小写字母变成大写字母,并将大写字母变成小写字母
  12. 阿里云Oss获取图片的大小信息
  13. Win 10系统截图的7种方式【简单实用】
  14. Java 8:那些Java8的常见写法
  15. EMS、CEM、OEM、ODM、IDH、IDM介绍
  16. a non-compliant version of Huawei Mobile Services SDK which contains code to download or install app
  17. SilkTest武林外史之7-简单web测试
  18. matlab波形相似系数,如何用matlab计算波形相似系数
  19. Bless You Autocorrect!(字典树上建图)
  20. 展锐服务器芯片,芯片“代号”背后的故事,你了解多少?

热门文章

  1. 2020大创笔记(一)
  2. 小白如何用U盘安装系统
  3. 记一次哈啰出行面试题
  4. 奥迪Q3电瓶损坏问题解决思路
  5. Linux 使用NC命令监听本地端口
  6. 如何发android应用到三星商店
  7. Android-上传三星应用商店
  8. C语言三个数比较大小
  9. 华为od统一考试B卷【阿里巴巴找黄金宝箱】Java 实现
  10. 连接远程桌面提示:发生身份验证错误,要求的函数不受支持