如何将word,excel,powerpoint等转换成html或pdf

如何将word,excel,powerpoint等转换成html或pdf

问题描述:

如何将word,excel,powerpoint等转换成html或pdf
最项目要实现在线预览word,excel等功能,类似163邮箱的附件预览功能,找了很长时间也就是 POI 解析,但是都是解析为txt 纯文本的信息,虽然也可以解析图片出来,但样式已经破坏了。单单再window上部署的话可以有jcom,jacob这个几种方法来实现,但都依赖于 dll文件,在linux部署不了。想用Flexpaper来实践,但有几点疑问:
如果使用 Flexpaper 是不是要先将 word, excel等转换成 PDF,然后在使用 swftools 将PDF转换成 swf
疑问:
1. 将 word, excel, ppt 等转换成 PDF 应该使用什么开源的java类库?
2. java 如何调用 swftools 在 Linux 上将PDF转换成 swf文件?

[b]生成响应的Servlet:
DownloadServlet.java[/b]
[code="java"]
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

@SuppressWarnings("serial")
public class DownloadServlet extends HttpServlet {

// static BaseCVFactory wordFactory = null;
static BaseCVFactory wordMLFactory = null;

public DownloadServlet() {
    super();
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("application/msword");
    response.setHeader("Content-disposition","attachment;filename=ExampleCV.doc");
    OutputFormat xmlFormat = new OutputFormat();
    xmlFormat.setEncoding("UTF-8");
    XMLWriter xmlWriter = new XMLWriter(response.getOutputStream(),xmlFormat);
    xmlWriter.write(wordMLFactory.generate());
    xmlWriter.flush();
    xmlWriter.close();
}

public void init() throws ServletException {

// wordFactory = new WordCVFactory(DownloadServlet.getPerson());
wordMLFactory = new WordMLCVFactory();
}

public void destroy() {
    super.destroy(); 
}

}
[/code]

[b]web.xml[/b]
[code="java"]


DownServlet
DownServlet
test.DownloadServlet


DownServlet
/download

[/code]

[b]JSP页面:
test.jsp[/b]
[code="java"]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



Insert title here


http://20100610.qupan.cc/6806581.html
PDF Converter (PDF转换器)V2.0. 绿色汉化版 AnyBizSoft PDF Converter是一个专业PDF转换器,支持将PDF转换为Word(DOC/DOCX)、PowerPoint(PPT/PPTX)、 Excel(XLS/XLSX)、HTML、TXT等格式,经测试对中文字符(简繁中文)支持良好,转换效果也不错,能够保存原有PDF的页面布局、图片、超链接等信息;对于加密或密码保护的PDF文件,AnyBizSoft PDF Converter也能轻松转换。 看了一下AnyBizSoft PDF Converter基本没有什么设置需要保存(一般的单文件版软件没法保存设置之类的,有得必有失),故制作成绿色汉化单文件版,方便携带使用。经测试对中文字符(简繁中文)支持良好,转换效果也不错,能够保存原有PDF的页面布局、图片、超链接等信息;对于加密或密码保护的PDF文件,AnyBizSoft PDF Converter也能轻松转换。

不妨试试FlashPaper,它可以把任意可打印的文档转换成PDF或SWF。而SWF能满足你的“在线浏览”需求。

在windows xp下的示例(不知道FlashPaper有没有Linux版的):
[code="命令"]
E:\Portable\flashpaper2.2>FlashPrinter.exe z:/temp/i.xlsx -o z:/temp/o.swf
[/code]
成功地将一XLSX文档转换成了SWF文件。

POI在Excel转换操作方面还可以,但在Word、powerpoint转换操作上还不完善,特别是格式输出,非常的不方便;至于jcom、jacob、swftools等tools,我没有使用过,就不好发表意见了。

下面说一下前不久我在项目上使用过的方法,并介绍一种后来学习过的方法,希望能帮助你:

[b]第一种方法:[/b]

需求是要产生格式一致的文档、报表(word和excel),要求是字体、颜色、缩进、大小等等都要一致,对于这些文档来说,其样式基本都是固定的,变化的也就是那些实际的业务数据;

采用的技术是 xml + servlet + dom4j;

思路:先制作一份模版,另存为xml格式(注意是另存为产生xml),以这个xml文件为模版,预览请求时读取出数据,dom4j来解析操作xml模版转换成一份包含有业务数据的xml,最后servlet用那份xml来响应生成你要的文档;

word和excel都可以转换为xml,如果懂WordML, SpreadsheetML,可以直接编写xml,为什么能转换成xml参考http://www.microsoft.com/china/msdn/library/office/office/Word2007XMLFormat.mspx?mfr=true

上面方法对于样式是不用考虑的,所以生成的文档样式风格高度一致;只需要把数据放到相应的元素标签中(如果是多个相同的item,就是clone出相应的xml元素标签,填充数据,再放入相应的父元素中,注意dom4j clone出的元素不能读取操作,所以一般不要对clone的元素操作),一切共有的元素直接定义修改xml模版就可以了.

[b]第二种方法:[/b]

采用技术:jodconverter + OpenOffice

至于怎样做,可以参考这里:
http://www.artofsolving.com/opensource/jodconverter

[b]对于java开发人员来说,这是很好的转换方法.推荐这种方法.[/b]

这里也介绍了操作方法:
http://www.word3k.com/wordtech/1207

示例如下:
一个简单的简历生成,使用word格式,只修改了模版中Name,HighLight,和Languages;

[b]简历模版:CVWordML.xml[/b]
[code="java"]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:wsp="http://schemas.microsoft.com/office/word/2003/wordml/sp2"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no"
xml:space="preserve">




XXX/o:LastAuthor
2/o:Revision
0/o:TotalTime
2011-03-19T11:30:00Z/o:Created
2011-03-19T11:30:00Z/o:LastSaved
1/o:Pages
180/o:Words
1028/o:Characters
8/o:Lines
2/o:Paragraphs
1206/o:CharactersWithSpaces
12/o:Version
/o:DocumentProperties

w:h-ansi="Times New Roman" w:cs="Times New Roman" />





w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000" />
/w:font






w:usb-3="00000000" w:csb-0="00000001" w:csb-1="00000000" />
/w:font





w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000" />
/w:font





w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000" />
/w:font






w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000" />
/w:font






w:usb-3="00000000" w:csb-0="00000000" w:csb-1="00000000" />
/w:font





w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000" />
/w:font
/w:fonts













/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl
/w:listDef













/w:tabs

/w:pPr

w:hint="default" />



/w:rPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl







/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl







/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl
/w:listDef





/w:listDef












/w:tabs

/w:pPr




/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl
/w:listDef












/w:tabs

/w:pPr




/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl
/w:listDef












/w:tabs

/w:pPr







/w:rPr
/w:lvl








/w:tabs

/w:pPr







/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl
/w:listDef





/w:listDef













/w:tabs

/w:pPr







/w:rPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl







/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl







/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl
/w:listDef












/w:tabs

/w:pPr







/w:rPr
/w:lvl








/w:tabs

/w:pPr


/w:rPr
/w:lvl








/w:tabs

/w:pPr
/w:lvl





[code="java"]
F16BB" />


/wsp:rsids
/w:docPr

wx:sub-section











/w:rPr
/w:pPr







/w:rPr

o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">














/v:formulas
o:connecttype="rect" />

/v:shapetype
/w:pict
/w:r






/w:rPr
Name/w:t
/w:r
/w:p
/wx:sub-section
wx:sub-section
wx:pBdrGroup
wx:borders
wx:color="auto" />
/wx:borders





w:color="auto" />
/w:pBdr







/w:rPr
/w:pPr






/w:rPr
HIGHLIGHTS OF QUALIFICATIONS/w:t
/w:r
/w:p
/wx:pBdrGroup









/w:listPr



/w:tabs





/w:rPr
/w:pPr





/w:rPr
5 years in applying OOP (object-oriented programming) techniques to build small, medium and large scale enterprise applications using MS SQL Server, Oracle, Sybase, C# and Java./w:t
/w:r
/w:p
/wx:sub-section
wx:sub-section
wx:pBdrGroup
wx:borders
wx:color="auto" />
/wx:borders





w:color="auto" />
/w:pBdr







/w:rPr
/w:pPr






/w:rPr
WORK HISTORY/w:t
/w:r
/w:p
/wx:pBdrGroup






/w:tabs





/w:rPr
/w:pPr






/w:rPr
XXX Co.,Ltd./w:t
/w:r





/w:rPr

/w:r






/w:rPr
Oct 2007 /w:t
/w:r







/w:rPr
/w:t
/w:r






/w:rPr
Present/w:t
/w:r
/w:p
/wx:sub-section
wx:sub-section











/w:rPr
/w:pPr






/w:rPr
Senior D/w:t
/w:r






/w:rPr
eveloper / DBA/w:t
/w:r
/w:p









/w:listPr



/w:tabs






/w:rPr
/w:pPr





/w:rPr
TEVA (Direct Energy, a gas/electric utility)/w:t
/w:r
/w:p

wsp:rsidP="00F93A89">






/w:listPr


/w:tabs





/w:rPr
/w:pPr




/w:rPr
Project Description: TEVA is DE’s system for [energy] futures contract valuation and reporting. 80% of the system logic was implemented as Oracle 10g stored procedures, which had low performance d/w:t
/w:r




/w:rPr
ue to a legacy of inefficient coding, making it difficult to maintain. The purpose of this project is to implement additional business logic and re-factor the stored procedures to streamline its operation and maintainability/w:t
/w:r
/w:p









/w:rPr
/w:pPr





/w:rPr
Responsibilities:/w:t
/w:r
/w:p









/w:listPr



/w:tabs




/w:rPr
/w:pPr




/w:rPr
Maintain and optimize the database performance./w:t
/w:r
/w:p









/w:rPr
/w:pPr





/w:rPr
Technologies: Oracle 10g./w:t
/w:r
/w:p
/wx:sub-section
wx:sub-section
wx:pBdrGroup
wx:borders
wx:color="auto" />
/wx:borders





w:color="auto" />
/w:pBdr







/w:rPr
/w:pPr






/w:rPr
EDUCATION/w:t
/w:r
/w:p
/wx:pBdrGroup










/w:rPr
/w:pPr




/w:rPr
Sep 1999 – Jun 2003/w:t
/w:r




/w:rPr

/w:r







/w:rPr
XXX University of Technology/w:t
/w:r
/st1:City
/st1:place





/w:rPr


/w:r




/w:rPr
BS, Computer Science and Technology/w:t
/w:r
/w:p
/wx:sub-section
wx:sub-section
wx:pBdrGroup
wx:borders
wx:color="auto" />
/wx:borders





w:color="auto" />
/w:pBdr







/w:rPr
/w:pPr






/w:rPr
LANGUAGES/w:t
/w:r
/w:p
/wx:pBdrGroup










/w:listPr


/w:tabs


/w:pPr

English (CET-4, reading/writing)/w:t
/w:r
/w:p
/wx:sub-section
wx:sub-section
wx:pBdrGroup
wx:borders
wx:color="auto" />
/wx:borders





w:color="auto" />
/w:pBdr







/w:rPr
/w:pPr






/w:rPr
TECHNICAL & BUSINESS SKILLS/w:t
/w:r
/w:p
/wx:pBdrGroup








/w:listPr


/w:tabs




/w:rPr
/w:pPr

Java, JSP, JSF, Spring, Hibernate, Struts, WebService, Junit, Log4j, Ant, Ajax, C#, Web UI, HTML, CSS, JavaScript, JBoss, Tomcat, Oracle, MS SQL Server, SQL, PL/SQL, Trans-SQL/w:t
/w:r
/w:p
/wx:sub-section


wx:pBdrGroup
wx:apo

/wx:apo




w:x-align="right" w:y="1" />


/w:rPr
/w:pPr



/w:rPr

/w:r



/w:rPr
PAGE /w:instrText
/w:r



/w:rPr

/w:r
/w:p
/wx:pBdrGroup





/w:pPr
/w:p
/w:ftr





/w:pPr

Page /w:t
/w:r




/w:rPr

/w:r

PAGE /w:instrText
/w:r




/w:rPr

/w:r



/w:rPr
1/w:t
/w:r




/w:rPr

/w:r

of /w:t
/w:r




/w:rPr

/w:r

NUMPAGES /w:instrText
/w:r




/w:rPr

/w:r



/w:rPr
1/w:t
/w:r




/w:rPr

/w:r
/w:p
/w:ftr

w:header="720" w:footer="720" w:gutter="0" />


/w:sectPr
/w:body
/w:wordDocument
[/code]

现在poi3.8已经支持将word转化为html了哦,不过对于word中包含表格的,表格中的数据显示有时有点问题,我现在就遇到这个问题,不知道如何解决,你的问题解决了吗?谢谢!!