富文本生成word并在线预览(附源码)
记录富文本内容生成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并在线预览(附源码)相关推荐
- 在线文库源码php,在线文库网站 文档分享平台网站 在线文档 在线预览网站 源码...
套餐说明: 套餐1:在线文库源代码PHP 在线预览.NET(在线预览不含API接口调用功能)--180元 套餐2:在线文库源代码PHP 在线预览.NET(在线预览包含API接口调用功能)--220元 ...
- aspose实现word,excel在线预览
aspose实现word,excel在线预览 一,项目中引入aspose依赖 <dependency><groupId>com.aspose</groupId>&l ...
- 使用aspose方式使excel,ppt,word进行在线预览。(无水印)
使用aspose方式使excel,ppt,word进行在线预览.(无水印) 1.首先,页面需要用jquery中window.open();打开一个新页面. window.open(../fileMan ...
- pdf,word,ppt在线预览
pdf,word,ppt在线预览 先展示下效果 pdf跟ppt的预览效果: word的预览效果 实现过程-只需一个iframe标签即可 详细介绍请看这里 <iframe src="ht ...
- Java 实现word pdf在线预览
Java 实现word pdf在线预览 最近项目有这个需求,查找了一些资料,在这整理一下. 首先,pdf的文件,浏览器本身支持预览,不需要做什么处理. controller: 简单说下思路:就是利用i ...
- C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码...
C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 原文:C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码 前言 系列 ...
- java计算机毕业设计Web企业差旅在线管理系统(附源码、数据库)
java计算机毕业设计Web企业差旅在线管理系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecl ...
- 在线计算机考试系统源代码,在线考试系统 附源码和文档
[实例简介] 在线考试系统 附源码和文档. 做毕业设计,课程设计或者正在学习相关技术知识的朋友可以下载资源学习.想继续学习相关知识的可以关注我. [实例截图] [核心代码] 在线考试系统4 └── S ...
- JS sojson.vX在线解密工具-附源码
前言 此文仅用于技术科普,教育与研究用途,请勿用于商业甚至非法用途,否则一切后果自负.若用户利用此文章而受到惩处,本人及本平台对其行为概不负责,亦不承担任何连带责任. 在线工具 Sojson.v4ht ...
最新文章
- python 空dataframe_python 创建一个空dataframe 然后添加行数据的实例
- python——画一个笑脸
- VS2010 SP1
- verilog实现伺服电机控制
- [vue] vue2.0不再支持v-html中使用过滤器了怎么办?
- Java-Redis 热部署问题
- mysql客户端工具的使用
- LeetCode 199. 二叉树的右视图(DFS)(特殊的递归)
- 2007电脑报专用版SN(备忘之用)
- win10系统下JDK环境变量配置失败的原因
- Java(实验四)Java标准类库-将一个字符串中的小写字母变成大写字母,并将大写字母变成小写字母
- 阿里云Oss获取图片的大小信息
- Win 10系统截图的7种方式【简单实用】
- Java 8:那些Java8的常见写法
- EMS、CEM、OEM、ODM、IDH、IDM介绍
- a non-compliant version of Huawei Mobile Services SDK which contains code to download or install app
- SilkTest武林外史之7-简单web测试
- matlab波形相似系数,如何用matlab计算波形相似系数
- Bless You Autocorrect!(字典树上建图)
- 展锐服务器芯片,芯片“代号”背后的故事,你了解多少?