本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和
《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
java实现在线预览--poi实现word、excel、ppt转html
java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,
如果想要免费的,可以用openoffice,还需要借助其他的工具(例如swfTool...
java实现在线预览--poi实现word、excel、ppt转html
java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,
如果想要免费的,可以用openoffice,还需要借助其他的工具(例如swfTools、FlexPaper等)才行,实现原理就是:
1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件;
2.通过swfTools将pdf文件转换成swf格式的文件;
3.通过FlexPaper文档组件在页面上进行展示。
当然如果装了Adobe Reader XI,那把pdf直接拖到浏览器页面就可以直接打开预览,这样就不需要步骤2、3了,前提就是客户装了Adobe Reader XI这个pdf阅读器。
我这里介绍通过poi实现word、excel、ppt转html,这样就可以放在页面上了。
word转html
package wordToHtml
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.InputStream
import java.util.List
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.Transformer
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import org.apache.commons.io.FileUtils
import org.apache.poi.hwpf.HWPFDocument
import org.apache.poi.hwpf.converter.PicturesManager
import org.apache.poi.hwpf.converter.WordToHtmlConverter
import org.apache.poi.hwpf.usermodel.Picture
import org.apache.poi.hwpf.usermodel.PictureType
import org.w3c.dom.Document
public class PoiWordToHtml {
public static void main(String[] args) throws Throwable {
final String path = "D:\\poi-test\\wordToHtml\\"
final String file = "人员选择系分.doc"
InputStream input = new FileInputStream(path + file)
HWPFDocument wordDocument = new HWPFDocument(input)
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder()
.newDocument())
wordToHtmlConverter.setPicturesManager(new PicturesManager() {
public String savePicture(byte[] content, PictureType pictureType,
String suggestedName, float widthInches, float heightInches) {
return suggestedName
wordToHtmlConverter.processDocument(wordDocument)
List pics = wordDocument.getPicturesTable().getAllPictures()
if (pics != null) {
for (int i = 0
Picture pic = (Picture) pics.get(i)
try {
pic.writeImageContent(new FileOutputStream(path
+ pic.suggestFullFileName()))
} catch (FileNotFoundException e) {
e.printStackTrace()
Document htmlDocument = wordToHtmlConverter.getDocument()
ByteArrayOutputStream outStream = new ByteArrayOutputStream()
DOMSource domSource = new DOMSource(htmlDocument)
StreamResult streamResult = new StreamResult(outStream)
TransformerFactory tf = TransformerFactory.newInstance()
Transformer serializer = tf.newTransformer()
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8")
serializer.setOutputProperty(OutputKeys.INDENT, "yes")
serializer.setOutputProperty(OutputKeys.METHOD, "html")
serializer.transform(domSource, streamResult)
outStream.close()
String content = new String(outStream.toByteArray())
FileUtils.writeStringToFile(new File(path, "人员选择系分.html"), content, "utf-8")
excel转html
package excelToHtml
import java.io.ByteArrayOutputStream
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.util.List
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.Transformer
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
import org.apache.commons.io.FileUtils
import org.apache.poi.hssf.converter.ExcelToHtmlConverter
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.hwpf.converter.PicturesManager
import org.apache.poi.hwpf.converter.WordToHtmlConverter
import org.apache.poi.hwpf.usermodel.Picture
import org.apache.poi.hwpf.usermodel.PictureType
import org.w3c.dom.Document
public class PoiExcelToHtml {
final static String path = "D:\\poi-test\\excelToHtml\\"
final static String file = "exportExcel.xls"
public static void main(String args[]) throws Exception {
InputStream input=new FileInputStream(path+file)
HSSFWorkbook excelBook=new HSSFWorkbook(input)
ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter (DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument() )
excelToHtmlConverter.processWorkbook(excelBook)
List pics = excelBook.getAllPictures()
if (pics != null) {
for (int i = 0
Picture pic = (Picture) pics.get (i)
try {
pic.writeImageContent (new FileOutputStream (path + pic.suggestFullFileName() ) )
} catch (FileNotFoundException e) {
e.printStackTrace()
Document htmlDocument =excelToHtmlConverter.getDocument()
ByteArrayOutputStream outStream = new ByteArrayOutputStream()
DOMSource domSource = new DOMSource (htmlDocument)
StreamResult streamResult = new StreamResult (outStream)
TransformerFactory tf = TransformerFactory.newInstance()
Transformer serializer = tf.newTransformer()
serializer.setOutputProperty (OutputKeys.ENCODING, "utf-8")
serializer.setOutputProperty (OutputKeys.INDENT, "yes")
serializer.setOutputProperty (OutputKeys.METHOD, "html")
serializer.transform (domSource, streamResult)
outStream.close()
String content = new String (outStream.toByteArray() )
FileUtils.writeStringToFile(new File (path, "exportExcel.html"), content, "utf-8")
ppt转html
其实只是ppt转图片,有了图片后放到页面上去,点击下一页就一张张显示就可以了。这里只介绍ppt转图片的过程。
package pptToImg
import java.awt.Dimension
import java.io.File
import java.io.FileInputStream
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
import java.awt.Color
import java.awt.Dimension
import java.awt.Graphics2D
import java.awt.geom.Rectangle2D
import java.awt.image.BufferedImage
import org.apache.poi.hslf.model.TextRun
import org.apache.poi.hslf.record.Slide
import org.apache.poi.hslf.usermodel.RichTextRun
import org.apache.poi.hslf.usermodel.SlideShow
public class PPTtoImage {
public static void main(String[] args) {
// 读入PPT文件
File file = new File("D:/poi-test/pptToImg/test.ppt")
doPPTtoImage(file)
public static boolean doPPTtoImage(File file) {
boolean isppt = checkFile(file)
if (!isppt) {
System.out.println("The image you specify don't exit!")
return false
try {
FileInputStream is = new FileInputStream(file)
SlideShow ppt = new SlideShow(is)
is.close()
Dimension pgsize = ppt.getPageSize()
org.apache.poi.hslf.model.Slide[] slide = ppt.getSlides()
for (int i = 0
System.out.print("第" + i + "页。")
TextRun[] truns = slide[i].getTextRuns()
for ( int k=0
RichTextRun[] rtruns = truns[k].getRichTextRuns()
for(int l=0
int index = rtruns[l].getFontIndex()
String name = rtruns[l].getFontName()
rtruns[l].setFontIndex(1)
rtruns[l].setFontName("宋体")
// System.out.println(rtruns[l].getText())
BufferedImage img = new BufferedImage(pgsize.width,pgsize.height, BufferedImage.TYPE_INT_RGB)
Graphics2D graphics = img.createGraphics()
graphics.setPaint(Color.BLUE)
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height))
slide[i].draw(graphics)
// 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径
FileOutputStream out = new FileOutputStream("D:/poi-test/pptToImg/pict_"+ (i + 1) + ".jpeg")
javax.imageio.ImageIO.write(img, "jpeg", out)
out.close()
System.out.println("success!!")
return true
} catch (FileNotFoundException e) {
System.out.println(e)
// System.out.println("Can't find the image!")
} catch (IOException e) {
return false
// function 检查文件是否为PPT
public static boolean checkFile(File file) {
boolean isppt = false
String filename = file.getName()
String suffixname = null
if (filename != null && filename.indexOf(".") != -1) {
suffixname = filename.substring(filename.indexOf("."))
if (suffixname.equals(".ppt")) {
isppt = true
return isppt
} else {
return isppt
ppt转图片有个缺陷,就是ppt里不是宋体的字有些可能会变成框框。
以上都需要引入poi的jar包。
要实现在线预览,只需把转换得到的html在新标签页打开或者镶嵌到某块区域就可以展现了。
原文地址http://www.bieryun.com/780.html
使用Java面向对象编写网络通信程序应用
Elasticsearch Java API Client 开发
手动部署Java Web环境(Alibaba Cloud Linux 2)
快速掌握HTML5基础用法
搭建Java Web开发环境(Anolis OS)