有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
1 d/ L- F. Q9 u# a# l2 |, S后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。
; a4 c! [9 w" \8 M V7 z我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob
) p* m* Q0 e( S详见如下DEMO:
$ t2 h* S& }9 u. ^" A1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;
9 T; F |) F1 y3 ] - import com.jacob.com.Dispatch;3 Q- O# q0 z5 x" t( S
- import com.jacob.com.Variant;
4 y& g& U+ v5 ]5 s - 1 W4 x1 p }7 M4 S
- /**
) L; X0 h9 y* H5 A% H - *
, d A% u8 }5 H2 V: ] A - * / q! y7 W" F0 h, \' T
- * @author jialin4 a) J6 C1 f2 M5 B
- * @since 2015-3-27# u+ T+ I2 I) [) D$ |9 n
- */: l9 A G w- R/ N
- public class word2html {! [ B; J9 I# |+ e6 k4 p4 {
- public static boolean wordToHtml(String inPath, String toPath) {( x h! i, } j+ P/ g; y% ?/ i6 f
- // 启动word
% O' [" l$ v D2 F+ d( J - ActiveXComponent axc = new ActiveXComponent("Word.Application");
* C% M5 c3 f- _
* U! x: j* {, b! c0 F- boolean flag = false;
; E: m$ j9 s( x9 U: S7 R) b
8 D1 \; J# h5 `- try {
+ Y0 r% q& F* ? - // 设置word不可见5 A O# D/ z; U: h( V
- axc.setProperty("Visible", new Variant(false));
9 d" [. t1 z2 {, @6 ] - ' m, [8 e: m7 k& s2 _
- Dispatch docs = axc.getProperty("Documents").toDispatch();
( d( ?% C7 J% n% H/ q2 P
6 x1 }! d$ M$ H% _( d- // 打开word文档" g& x! b9 U+ s: I7 _7 Y9 X; T
- Dispatch doc = Dispatch.invoke(
) N, v9 |1 I3 @, V5 Z7 I; m - docs,8 d* Y: f+ e O* D8 f
- "Open",4 n# F. n; v7 d4 }7 q
- Dispatch.Method,
! \' y' d+ `+ p B) c2 K- n$ S - new Object[] { inPath, new Variant(false),
& L# t) V8 E1 Q$ d9 |5 L5 p - new Variant(true) }, new int[1]).toDispatch();
6 @) h8 M; c0 D* B - + k# Y7 i3 _' S8 D7 G$ l
- // 作为html格式保存到临时文件
; b# U, h1 z' L: S3 h2 \ - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
0 V, p' d& u7 `% Z - toPath, new Variant(8) }, new int[1]);
% |6 w% T/ a- D" y+ ]) z
( t6 }, U3 G+ t4 [, b( ^- Variant f = new Variant(false);
- q H. C6 p0 L$ a" z - Dispatch.call(doc, "Close", f);
; N* L: @" B+ D" e3 ]+ a2 ^ - flag = true;
6 H( \( U: F7 `, | - return flag;5 H$ k" k8 t/ i7 M0 r. U
% w4 W4 z3 S ?- Z7 B. a6 S* X9 \- } catch (Exception e) {
" I, ?2 d; b W3 u - e.printStackTrace();& X, r- w3 H3 ^4 {' k
- return flag;0 o/ k0 _# ~0 K
- } finally {) O1 t0 ~' U0 A, ?, b
- axc.invoke("Quit", new Variant[] {});
8 @+ F' m- G9 f; _9 h - }
$ e( b5 D% b# _" D; e7 x1 X+ Z - }
6 o: ~. J0 `( V5 s6 C& G& I
, s/ m; [0 H. w; g- public static void main(String[] args) {
5 J& X8 W5 ^4 H0 r {/ z. N -
/ k8 O, }% S( i2 u* ~. e5 P - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
, [- h. v/ x/ ^/ [, K& f - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");# [+ r$ e; N0 k7 h+ }# Q0 N
- ; P+ ?; I1 f* [( v2 u) n
- }, M: z2 ]* P) m
- }
复制代码
5 p, _0 b" t1 ^1 n# x: X9 E7 S, Q. W
$ ^8 i m5 d6 K y: `+ n- F
|