有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
- }+ G9 T) Y( C8 n后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。 ' B( S+ [& P$ \4 T0 Q
我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob . B" {: ]) I! X/ }* I
详见如下DEMO:
* o5 D! J( r: ^6 C, V1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;
! k& O _1 D5 n/ Y - import com.jacob.com.Dispatch; y! _- I! {: @
- import com.jacob.com.Variant;# e! ^! b' G4 c- `/ K- P0 I
- 9 _) H: Q* ~/ d4 N1 p$ L
- /**
9 R4 C/ A8 D+ s" \% Y) p6 M! C/ n - *
0 h! Q; s6 N% R y X - * * A% Q9 [9 e& s( M' s: Z- |
- * @author jialin
9 `3 d% y9 _+ `# D! I: M% l" q0 U7 X* ~ - * @since 2015-3-27
9 H. ]+ I; ^# s4 K' J5 }3 _) |3 B - */; D% f4 q' _# G/ Z
- public class word2html {, |- H) x2 r4 R5 S. w
- public static boolean wordToHtml(String inPath, String toPath) {; V' F0 G! e$ i {5 M
- // 启动word
* f5 g% z* d, |' A - ActiveXComponent axc = new ActiveXComponent("Word.Application");( U2 B W# F9 ~- b
- ; D- _0 n. N; {
- boolean flag = false; H. p( z, z0 n
- $ v9 A% D0 Q+ ]" U. I% g
- try {
' q9 {: e1 K& B2 z+ \4 V - // 设置word不可见5 W+ \# \* M# n. G* C1 `% b9 ^9 m5 p8 P
- axc.setProperty("Visible", new Variant(false));2 Q5 j D+ b- @
! p# h: H! \% e+ u$ l- Dispatch docs = axc.getProperty("Documents").toDispatch();
$ O3 o7 _2 a1 ~# m) j - , Y. L2 x' `/ H, v
- // 打开word文档
: b+ O$ }7 @& z! l - Dispatch doc = Dispatch.invoke(
/ n/ a$ C" o$ M3 j$ _ - docs,
1 G' i% o1 \1 D; P9 J) x - "Open",8 t4 ^7 A2 ~1 E) i* Y
- Dispatch.Method,: x) E! S% f; T: n& g
- new Object[] { inPath, new Variant(false),$ G+ v. _! y. V( Q
- new Variant(true) }, new int[1]).toDispatch();0 O( {$ N2 c. z4 I- b. u6 d
& n8 v9 K# S" i! _2 e; L, @- // 作为html格式保存到临时文件
! }/ n9 e& i: h% e$ m9 c! o - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {8 D& z8 {; P. ?& |# p# z; O6 q" r
- toPath, new Variant(8) }, new int[1]);
4 d$ ~* `$ b! X7 ~- E, f - $ I2 u: d( ?, J! d: Y
- Variant f = new Variant(false);% V+ X3 T# H# t/ P
- Dispatch.call(doc, "Close", f);
% q: d& E( E% I' J3 x# p - flag = true;
7 t% M$ ?; c' E - return flag;
: f u( I n1 z/ I+ X- G( H- \% L - 0 _% Y& i7 ?9 m
- } catch (Exception e) {
T5 U; \* f3 P+ _+ y' ` - e.printStackTrace();
/ U: P- h! x2 w2 w; m' W! p - return flag;
U& I0 _" F* P, n5 c- G* Q - } finally {; { E2 m. P4 ?6 n. z* D0 `% }- P
- axc.invoke("Quit", new Variant[] {});* m: L0 J4 a( q# R' U! ^3 K/ x
- } x! ?# `1 U& |6 W$ \1 r0 M. k& h
- }
! k% ? {8 @* Q Z9 p) U$ _; o8 d
3 `3 B5 i \* o% y( U4 H- public static void main(String[] args) {. ^% T! S' D M; j) a- G* c
- 4 T. c) v' ?; k
- word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
9 Q, s( H4 O6 W/ A! v - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");
, a) U! v) o+ k9 b - : c7 t+ x) }7 l
- }
7 Q9 E% M: Y: J, W& Y, I+ _3 U - }
复制代码
: l1 Y. N a6 g6 \$ B/ ~: n
# R% B( x& H3 c/ v( `2 N 8 D; p- D. b' Z; X9 [
|