有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。 , N( \7 ]8 [% b/ U4 ] Q
后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。 2 D5 e# y1 G5 {$ k: v1 N7 n' N
我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob 7 S0 t) N# l& R) V4 d$ E
详见如下DEMO:
$ [8 D# n* }2 B1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;
) W; `- t. ?$ W# s' M# Y - import com.jacob.com.Dispatch;% p% d" d! ^5 i1 m4 a
- import com.jacob.com.Variant;
. y5 K7 D# [0 r% V/ B
5 E) P' H6 z5 e- j5 ~3 d- /**
7 `" w3 l( b. O* l4 ^4 r - * * x" Y4 h6 M1 Q" y: S: W
- * , W) r: L: j# N2 \: y& v
- * @author jialin
/ w# E( j5 P3 G3 E1 n - * @since 2015-3-27
0 N8 C3 y2 S$ b# p* w - */% r! b- s8 \5 `+ v
- public class word2html {: A# w! J/ z- M) D0 `
- public static boolean wordToHtml(String inPath, String toPath) {4 V9 L! g# ]: V; x: G
- // 启动word9 U! e* U) _8 v+ E& S7 }) L- X S
- ActiveXComponent axc = new ActiveXComponent("Word.Application");
& Z6 M, g7 M3 E9 C/ H; X" u - ; m1 a8 @. S$ W* J9 p
- boolean flag = false;
* m3 W) X$ v) I& ?: M
V! V% O4 R% l7 s6 ]1 S- try {% `& B1 D0 S+ E
- // 设置word不可见
, }4 {+ Q t& P - axc.setProperty("Visible", new Variant(false));" }) C9 P8 r- ^! a W: o+ O
% r0 {) l( g' v0 K# o: Q8 Z; Q: ~) }7 o- Dispatch docs = axc.getProperty("Documents").toDispatch();6 a* c0 j; D2 _- Q3 x% N# r( w- O8 |
7 c2 ?2 c8 `* _; k! j! O& p: I! F- // 打开word文档
3 t1 L7 k* w1 p, c. d/ E& m - Dispatch doc = Dispatch.invoke(6 K: P; L5 ]) h2 U7 s* I
- docs,
) G8 q0 H6 Y& @: I3 D+ @ - "Open"," v8 f' c7 z# c
- Dispatch.Method,
$ n. e* f3 g4 y$ M* }) _6 y - new Object[] { inPath, new Variant(false),5 H: {. j5 h5 ]9 x. R. ?* d+ @1 s& u
- new Variant(true) }, new int[1]).toDispatch();& P7 X& @6 A l
1 ~8 W4 r; F0 y% [) k- // 作为html格式保存到临时文件. w ~0 O1 [9 d6 ^! z7 T" W
- Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {6 j6 V# D N9 ]! {
- toPath, new Variant(8) }, new int[1]);
0 ^( B0 v. `5 Y" B' i+ p! N - : K( _; z1 x* G/ h# c" G5 V" U
- Variant f = new Variant(false);
$ R) e+ t0 x# I - Dispatch.call(doc, "Close", f);
, C# j& z3 F9 \! c$ v8 C- i - flag = true;: y( X* F2 J; f3 }7 `
- return flag;
& c- V7 ?9 I5 y6 u& s |: w6 B& [
- w$ Q' A5 Q6 {7 T5 y! T" W; l- } catch (Exception e) {
5 t4 b! ~9 W, C, H1 @8 s( r - e.printStackTrace();
, ]+ E6 o1 ] [" }2 k4 Y - return flag;
" o0 A! f6 _0 h: b1 [% K- e - } finally {
3 X5 P4 R0 M6 i- t( L, V V! T - axc.invoke("Quit", new Variant[] {});5 @5 z* X- k. P( Q
- }6 G- i' x; u8 f9 {
- }
: I* l# m% R. J5 ^ - # o8 k/ H% a) k, E0 j5 m2 p
- public static void main(String[] args) {( V! @3 N! S" Z6 M
-
6 F, A/ O+ p S+ c) n5 T% L - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
% P9 f( {# D$ k3 B% ]2 l1 H - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");( d- [9 A/ S6 @6 s D O. `
- ; G5 Q2 B$ b4 Z: O8 I
- }0 G1 n( P- O9 K: G6 n9 R4 m8 v& n
- }
复制代码
: K ?( x9 Z+ V
/ w# F% y( h) r. v: y4 C
4 _3 i7 I4 N6 ~/ I: M) W |