有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。 9 h( P" Y4 _4 ]# T. P
后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。
3 b+ N ^' T' D. _" Z7 I; j4 F我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob
& r, A. C2 E$ }5 A( S详见如下DEMO:
9 ]8 b3 ^( g( `$ E; P1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;: ]: Y2 Q2 S3 L5 H8 d
- import com.jacob.com.Dispatch;4 T+ R$ Y I. h
- import com.jacob.com.Variant;* f* E! h7 z/ F& ?) B
- , S: H; H; X/ M9 t$ d
- /**
6 ~" _2 |' r& F4 [4 D; Z - *
" t# A A | Z - *
' Y2 V! g1 }9 H: \3 N7 [ - * @author jialin2 L, i. C% v1 z0 U/ T8 I
- * @since 2015-3-27
4 j8 E5 f7 s, P - */' g" e% V3 ^3 @$ w: k4 C
- public class word2html {
+ f/ A* k: ~" M - public static boolean wordToHtml(String inPath, String toPath) {: M9 I$ `- V. m0 z2 n" j. s
- // 启动word, `+ Z2 z, I u/ ]; E* A) B
- ActiveXComponent axc = new ActiveXComponent("Word.Application");
, x1 h* M! v2 {& C
$ i6 d+ v! @8 V& m- boolean flag = false;
/ s7 ~0 A |8 C0 l5 n: h6 c8 u
4 w6 Z+ z; W, q: W- try {
+ _% s+ O, L1 } - // 设置word不可见& Y5 P9 S8 F2 ?" e* L) D( H
- axc.setProperty("Visible", new Variant(false));
! C2 J ~2 b& `0 j - / [) {4 \' E! v4 C: V2 o% A- c
- Dispatch docs = axc.getProperty("Documents").toDispatch();
- }0 y$ ]2 \/ S
# L f. G# R7 c* d) W0 C. V/ F- // 打开word文档
7 y) @. X+ {5 g8 ]5 {. C - Dispatch doc = Dispatch.invoke(
k. a: ]. y9 P8 L4 G0 @ - docs,
, n. O% H, G, _1 V ~! ]: [ - "Open",
`+ [' p, [1 Y! i4 N7 m - Dispatch.Method,; Z, ~' G6 n) A2 f" D$ ?
- new Object[] { inPath, new Variant(false),
1 g1 X* p! R5 |# O7 k7 U; Q# m, h - new Variant(true) }, new int[1]).toDispatch();; k p$ f4 G9 i0 {& P/ s% I: Y$ p
& Z. { f+ ~5 @# y" _/ a- // 作为html格式保存到临时文件
& O3 l, g6 e- q8 P$ M, C4 E% A- X3 B - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {5 ~/ D( ^( ?1 V/ `( c" L
- toPath, new Variant(8) }, new int[1]);" {" z3 }+ g) n8 Q; w' `! r
- * L, A$ @# W5 N2 P' o
- Variant f = new Variant(false);+ ?7 j! E# p3 m
- Dispatch.call(doc, "Close", f);' ~5 Z, {% V! n; a9 ]
- flag = true;' z7 a/ F, U4 V1 A. }, u/ I V
- return flag;
1 @9 z7 }2 l! B/ [4 ] - " M9 V* B( R9 e N9 Q0 L# `0 T& d
- } catch (Exception e) {
6 C; O/ @! @$ m0 V5 g - e.printStackTrace();- \- ~4 K) N. f' Y, L4 G
- return flag;
% A% S0 j( x' M4 Q' F U - } finally {
+ H( ~. E8 D( v. m% k - axc.invoke("Quit", new Variant[] {});
6 B( \& q4 M& u5 L - }1 l2 z! \+ k: q" [. f3 f! b! j, x
- }% t T& Y0 x9 ~9 X4 [% r: r: k" M
2 ]3 e! I g) y x9 X- public static void main(String[] args) {; N8 j( k& g$ m! k% H' L3 r
-
/ ?* s0 d1 J: Q; p( I) F1 k/ l8 W V - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
7 M% H; u0 Z d* r - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");
. L# J( U- l3 u( W" w9 }
5 }7 U0 k4 H) i, P7 a1 I' a1 g+ `- }! Q, ^& u8 {- @& e7 e' x5 G
- }
复制代码 " f# n! `. E; P+ N
7 r5 s# P6 _ [' s+ W; C' f7 X# R
, N& ?4 O: u$ E$ L1 ^
|