有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。 8 |+ d* }$ b7 t, x0 T8 Z- G5 _
后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。
0 w4 z9 Z; s3 G8 k, F& e+ ?) b我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob 0 O6 I# R* b: c( V% G$ y
详见如下DEMO: $ {- x5 T# q& ?7 N% f5 R0 R7 h
1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;2 i7 [ Z, Q& v& |5 a/ N/ p- ~
- import com.jacob.com.Dispatch;
9 k1 T$ a% ~+ A B - import com.jacob.com.Variant;$ z2 S) H8 F1 @$ {1 Y2 `$ J% Y& A# p
- ; Z! W1 X1 P4 H4 w$ r
- /**
5 V( }! m( c& Z) j ]# z - * `7 h6 y8 h% x' k
- *
- `2 f; ~% z. k9 a) H8 w. Q5 y3 t - * @author jialin8 W8 h& c* ], a- L( S
- * @since 2015-3-27
' S0 o# ^2 E+ V. ]: W2 j - */
0 }7 l9 U R! X) V' w - public class word2html {
! @' m- B1 l. |+ g0 C - public static boolean wordToHtml(String inPath, String toPath) {( s) C" a+ v! x
- // 启动word# s2 o. N4 f, N, k
- ActiveXComponent axc = new ActiveXComponent("Word.Application");0 c P$ z$ [; l: `& w3 K: m
2 q m2 T$ M9 x1 C i7 G" g- d) s- boolean flag = false;
6 T* |$ m& h7 s3 V; P( e
4 M" x* v u& }/ I# e% N- try {
4 w9 B9 E6 ^5 L1 C - // 设置word不可见
z( S* b' t( I j$ e ? - axc.setProperty("Visible", new Variant(false));
) _) g, S/ ~+ ~ `# H3 e - - Y4 A, D; N o. u1 L! Y
- Dispatch docs = axc.getProperty("Documents").toDispatch();$ g1 f3 o& N$ U9 }2 p5 V" S
* w' }) l8 {( \: D- // 打开word文档, l) L: g1 S7 c8 k( f( q$ D
- Dispatch doc = Dispatch.invoke(
' T' p, O. _) _, `! a( \ - docs,4 Z1 w/ {8 [/ U1 P$ M$ ^' b
- "Open",
5 i7 E7 M9 ^: c2 c( n/ g - Dispatch.Method,
5 F1 ^9 ?% l1 z$ l0 i* O" Q! [ - new Object[] { inPath, new Variant(false),0 E, V. r3 [8 {+ }; R( L- V- _: [
- new Variant(true) }, new int[1]).toDispatch();- T; E p8 a* O
- ! B/ t- S. J. S/ @
- // 作为html格式保存到临时文件
- j* T: R! ]1 G' W0 N - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
7 q& J* K) o* K y0 x" ?8 u2 P - toPath, new Variant(8) }, new int[1]);- w4 }+ F. y! j( X3 A+ a% {0 R
- F7 h- V8 I( L- |7 W. O1 }
- Variant f = new Variant(false);
$ r3 N5 o: ~9 ~) ?2 [0 m9 X - Dispatch.call(doc, "Close", f);( Q2 u$ v% x. b9 [
- flag = true;
* j7 B3 Z/ _ \* J( k! D - return flag;( ?4 R. m3 n3 z& u* e
/ _8 ?' S$ W1 M. \: f8 p: J- } catch (Exception e) {
8 |7 M: u$ ^* ~3 Y& l/ ^ - e.printStackTrace();
' t" S+ i/ {( z& K+ C: t1 D - return flag;4 H' V2 N& P* s5 O6 D% P+ l
- } finally {
$ w1 g: s/ \6 w4 A) f& H - axc.invoke("Quit", new Variant[] {});
: V' O" U0 L( U+ p# a! \ - }- W- N1 v L+ F7 h# ]
- }2 |- H# ?* p/ u
- 6 D* @* J7 k+ M& x+ J9 V
- public static void main(String[] args) {" T$ c$ l( G9 \
-
, Z5 L# k1 y+ R - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",$ b1 S3 C5 j/ q z' ^0 a
- "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");
/ Q& u) F1 S! P3 o5 t9 ~ - ! y3 C6 Z* E! }0 o. Q; }( R) r6 R8 a
- }8 y; D7 y1 l# Z1 b4 r
- }
复制代码 ) t9 I7 h- i! Z0 v
1 Q; @0 q" B, X" i
1 D# X; E2 l4 ]1 b& B |