有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
3 S8 s0 X9 ?1 g/ p- h后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。 3 ^3 g$ T- a6 a6 ^0 J( T
我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob - I! B7 V$ v7 I, x8 F
详见如下DEMO: . c/ L- c+ G% a% h8 d. k M7 O
1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;
% F* ? [4 T: ]# C) }! _& H( R& X7 V - import com.jacob.com.Dispatch;
4 ~# P) ?6 {1 r* J* P! i# Z - import com.jacob.com.Variant;
O; m: Z- m* i# U: n+ K
; r2 [' d9 y4 {, L2 u4 B9 V- /**
3 @9 S2 ?& u' e - *
3 h' e2 i! d7 J0 o- R: N. K: V - *
9 i5 v- F6 }- [4 @/ s - * @author jialin, J, C' x9 x0 {" k
- * @since 2015-3-27
3 r, w, R5 @6 d - */3 T0 `9 y8 [' L* Q8 R& ]
- public class word2html { t8 M: Z1 Y, x3 P
- public static boolean wordToHtml(String inPath, String toPath) {
( X( z: ^, c6 g2 D3 \ - // 启动word
* Q9 t* \1 n6 ~& z - ActiveXComponent axc = new ActiveXComponent("Word.Application");1 Q% @- c, G* G7 [
4 V* L$ J' w' S+ ^5 Y- boolean flag = false;
% |5 n3 B1 D# _6 O - 0 z* v2 \# O: g U! F# a! p1 \
- try {6 H; A# y3 l- r4 I" `! I2 V
- // 设置word不可见
6 Z/ k1 R+ o& M% S1 w6 x - axc.setProperty("Visible", new Variant(false));
* e5 b# r! v, u9 T" N( T2 @. a* \
8 Y/ u9 N/ g |8 F5 N9 y- Dispatch docs = axc.getProperty("Documents").toDispatch();2 @ T% o E1 }$ D! l# w1 o. _6 o, j
5 U, R0 O( ?" s- // 打开word文档
0 n/ ?5 S: u( g# z9 V( Z - Dispatch doc = Dispatch.invoke(
4 h9 V7 G$ \( S+ b; t8 |' t, r- u7 J - docs,
. D# c0 r$ I7 _7 r" [2 T$ E7 T0 Q - "Open",9 s% L3 c( ]- M6 a) f9 E
- Dispatch.Method,6 V9 a, i k. ~+ J6 W) C1 o/ P$ r
- new Object[] { inPath, new Variant(false),
( ?, F: |3 E8 ?4 T" a% S! D9 M% D - new Variant(true) }, new int[1]).toDispatch();- n6 E6 z4 ~4 w3 x" h
- 6 G2 k. B" Z2 ^. g& g8 e; {
- // 作为html格式保存到临时文件
, F! J9 x# R3 {) b - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {' |; ?3 @+ H; u2 `5 u. j8 P
- toPath, new Variant(8) }, new int[1]);
% R* t6 S0 o) |7 ?; d - , e) d) d, x4 u' h) e' R. S) k" D' @
- Variant f = new Variant(false);
) E6 d- b" w/ I- v) A6 P! D - Dispatch.call(doc, "Close", f);2 @1 P& w, Y4 D! H6 s3 R; X2 b, O
- flag = true;' p% S0 C: n% a: o
- return flag;
# K5 r' ]+ I8 H4 s, X: _& H - * X8 U* m0 W- m! Z5 ]" x+ z9 X
- } catch (Exception e) {% Q$ q L2 i; o) m
- e.printStackTrace();
9 l! M5 Q" {4 `0 g2 y - return flag;, ^; R, [) [4 D4 b- o) \, \) X& X* U
- } finally {
. B& T+ h1 i: k/ _/ ]6 u/ j - axc.invoke("Quit", new Variant[] {});( E" x* v( X8 r. Q7 S; V4 o
- }* w1 E a% P/ X& W2 b5 b3 L9 S
- }
- h# P) h4 B/ s9 `0 d5 v
; h( M* e0 M" I8 b4 V, V- public static void main(String[] args) {4 k8 Y- M" d! T& h- X! O
-
( [4 C2 M5 X x- g. w - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
1 a+ g& c* C l2 t) ~/ \/ l - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");6 {7 e( m; a3 y4 V! R
- / ^1 d' Z' e( t0 |, D; I) E1 `4 i
- }
6 J+ u# g$ ]/ u - }
复制代码 ; e" [9 k. m$ W% C
7 f6 f6 M L' s0 u E- p$ s
f, i/ W+ G( V4 _. f
|