有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
" U5 _4 k$ i; w& L1 ?4 B5 D后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。
k( |" p7 s% L3 X我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob ( D) g6 }+ J3 h
详见如下DEMO: : T% C& d: H4 L! I/ M5 `0 {
1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;+ Z V: M! R5 F5 x' D& o
- import com.jacob.com.Dispatch;% c' O/ r; L& U6 J# E. j; Z
- import com.jacob.com.Variant;( M3 J+ ]' c; m i3 M# O
* d" P+ p1 v9 r% E. V/ y: W- /**) I3 x9 t7 h: o
- *
( d7 ^1 q9 s4 ^% A - * ) q6 C% Y5 ?& K
- * @author jialin5 d Q" E% ~" a3 u% `( S- [1 t
- * @since 2015-3-27
" d& W% f7 b3 c1 P3 ?/ P - */* w% J; a& N/ _ i
- public class word2html {
( `( C, c4 P" F5 w( h8 Q6 } - public static boolean wordToHtml(String inPath, String toPath) {6 b% F* z7 |$ G5 X4 ^
- // 启动word
8 V% x0 h9 W. U( o0 Z* T - ActiveXComponent axc = new ActiveXComponent("Word.Application");3 C, Y9 ?2 m3 q) I0 F0 `0 v
- 7 Q7 _, x; z2 p, B+ A
- boolean flag = false;
! `2 M. W+ Z& Y* g
5 e8 m9 M2 O5 q3 }) x" C1 S- try {
$ e8 b$ e# d) t. P; v6 T! c; D. v - // 设置word不可见 L' }: u3 L1 Z) G
- axc.setProperty("Visible", new Variant(false));4 c9 j, h, r; ]) H% d; ^
) @" E0 P( H: f$ O- Dispatch docs = axc.getProperty("Documents").toDispatch();
& v0 b* m& `4 L$ s. I$ |. E - ( d$ ]7 ~) T+ C
- // 打开word文档) ^# K7 M; ]+ U2 @/ i+ j9 E- s- c
- Dispatch doc = Dispatch.invoke(
$ n0 l) z: f& }- v - docs,0 }# C& |; G4 ?; u6 ]
- "Open",* s, I* k" i7 N+ S" G: M
- Dispatch.Method,
d2 ?% X$ o( {* V/ D$ `4 L5 a - new Object[] { inPath, new Variant(false),4 c# E; R+ v+ b C4 G6 V6 _
- new Variant(true) }, new int[1]).toDispatch();
5 K% S: Q( d6 M: L, V8 r - 2 V l' I U* ^; ~7 S. f
- // 作为html格式保存到临时文件7 U0 \: i, h( s2 W. G
- Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {6 ^: F: Q" Q1 A4 {1 t. R
- toPath, new Variant(8) }, new int[1]);; \/ D a4 G I
- + r4 e/ k, P0 _7 E4 y+ P/ P0 W
- Variant f = new Variant(false);
# d/ \, g) o) G5 x% g' q - Dispatch.call(doc, "Close", f);
6 m/ r# p7 ^- ~9 G' s- [ - flag = true;
! S+ y: X* g o# Y" g( k5 l M - return flag;
7 X f' |6 F- K - 8 d! D9 i; ?9 q
- } catch (Exception e) {
6 g9 W [, R& F7 @3 |6 { - e.printStackTrace();& j5 |8 N, I) T0 M& l
- return flag;
6 G/ U& X% [1 |# o% d) K$ X - } finally {: W- }- g" G% U$ d4 ~6 {: u* g/ ^
- axc.invoke("Quit", new Variant[] {});* s8 X3 H, ?; [8 }, n/ ?
- }- V" d5 q0 K# o: \' [
- }- J: r' d7 x/ e8 S* T3 Q" f* H
. b) m! J: F. E1 j; g- public static void main(String[] args) {- _, F; v, S; z
-
/ Q3 ~3 W/ i) l" X - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
, z( q Q. z& a0 q, n' j6 H - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");7 E- V' b1 f0 @- u- X
% {* D. G; N7 ~1 }- }+ {4 x2 v( E0 j- N; x) K7 h/ e# p
- }
复制代码 * |- P! E$ j6 O5 k
' g8 f$ t1 T" ~/ a- Z3 Y
" v! c; _( T" e/ _; F+ H" n |