有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
* ~- f& _1 ]: ]5 d& D( g后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。
; n3 u2 G9 L3 T( z我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob + H/ n* `, }1 R7 Y$ E
详见如下DEMO: , P- c( S2 m- Y4 _5 T
1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;
9 W7 C+ ~6 O% P* _+ a - import com.jacob.com.Dispatch;
& j# a4 w' y5 ]4 Q% S - import com.jacob.com.Variant;
4 C0 J. g9 E& B( `% u3 f - 1 Y5 L4 l: S6 p6 g' `: s
- /**
- |+ e$ A3 c& C( Y" S - *
# y& C' \) P) c5 f - * 8 t2 I7 C# N( K7 `8 C
- * @author jialin3 q7 Q- V3 ~0 F. a# |8 t
- * @since 2015-3-27& O- @4 m: k# g8 W: b
- */
/ S1 j1 w5 r! w; Z h8 u - public class word2html {
& u9 O9 ]& ]0 G; A - public static boolean wordToHtml(String inPath, String toPath) {
, x4 v# L$ ?# ] Z5 h; L0 g - // 启动word8 A$ x+ z3 j8 w; v1 i
- ActiveXComponent axc = new ActiveXComponent("Word.Application");. Z# ^ O5 \: h( T1 w! K
1 o* u! q' u- R2 q+ t: k; h- boolean flag = false;
' l6 y& w; \3 |/ {" k9 o0 n1 c6 n - 4 M; m* m; J+ D1 ~
- try {" Y: j' e0 F' j5 j# q* [8 n
- // 设置word不可见
- B5 B1 k4 n- C1 p; h+ s/ K1 } - axc.setProperty("Visible", new Variant(false));
; [, {' S8 C/ J0 _- b% l0 D- I - . [% m( t; l1 g* }2 {2 F
- Dispatch docs = axc.getProperty("Documents").toDispatch();
+ I$ y$ E/ t& M6 d
: [0 e' {2 n3 e; A) g1 t- // 打开word文档
9 w9 O X; F, n1 d1 |7 n - Dispatch doc = Dispatch.invoke(
5 t( G/ c; p: E" \( p0 K - docs,
1 }! q8 Z, C1 B0 ?; n$ B, f. S% m - "Open",
# n3 h9 a/ f& t5 F - Dispatch.Method,
' C9 ` ~- }4 x" s+ F3 V$ X; _ - new Object[] { inPath, new Variant(false),( d' T8 [0 r4 Y# ^. R6 y
- new Variant(true) }, new int[1]).toDispatch();2 W0 ?& ~0 X# Z" t0 w1 ]& q% M
- # A1 U6 h& Y2 ]5 {
- // 作为html格式保存到临时文件
$ L4 A; I% O3 l( c6 y& a - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {" n s" S! R5 T3 g' _
- toPath, new Variant(8) }, new int[1]);
8 X( h) k7 X4 v4 e
9 j6 f5 T$ x* ~9 p7 [7 p+ \' H- Variant f = new Variant(false);" d3 i7 T$ }6 s k% l( r; K. t
- Dispatch.call(doc, "Close", f);
7 V9 l) R1 T7 h8 @6 g! P - flag = true;6 W* q2 P' t) q
- return flag;3 [) u/ [" j! l3 L; k
- 5 C `- s5 [2 s, J6 Q% j$ l
- } catch (Exception e) {& r! k$ P% K- Y) p0 }1 [& m) l
- e.printStackTrace();' u, V p- l9 G# I3 S
- return flag;
* V: t0 k5 ~$ O8 R/ K8 Z - } finally {3 M! C( y7 {+ i& U
- axc.invoke("Quit", new Variant[] {});! j1 R4 M4 E: b( ]
- }
6 X4 z: F8 e2 T$ g - }
/ V7 C3 m4 h, d1 S% ~$ z! u
Y) _2 U0 T# y% W# t+ j- public static void main(String[] args) {5 b5 P5 \6 L2 x% N, V- K5 V
-
' |9 k- E! B# ?) s - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
. {4 t' B" N l g( L0 f+ [/ [ - "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");
" ]: a; u3 ~+ H! U; P- K7 v3 l A
4 \+ q( g3 x- E$ P% p- \' ]- }
$ j) T* t" m: I- }, l/ w ^ - }
复制代码 + Q% a% \( z. M% q; b- s
* o4 G- }3 R6 L' N5 t7 s% f
( [1 `/ d* P) l7 C0 O X |