有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗? 你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
7 u* B6 n4 ]7 d后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。 6 m! V# T n+ q; g8 U: g$ u3 \! c4 {. U
我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览? 有很多方式,比如转为flash等等,但都太复杂了。 我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob
2 R) c# r L1 @2 }详见如下DEMO: + Z8 F3 d) `! V; t1 ?0 O1 }
1、导入jacob.jar 2、核心测试代码 - import com.jacob.activeX.ActiveXComponent;& q \: `; b7 F* u# a
- import com.jacob.com.Dispatch;
/ f$ v1 q! L! b& h - import com.jacob.com.Variant;0 _0 k! c% c$ o. k$ f7 a+ D
7 P" n/ Y4 K+ `( J- /**
( g4 P) U' A# J9 Y - *
$ J: M4 X: ~+ |% f3 ]/ f. i - * / G% g) W: [* r" G; b4 l% j
- * @author jialin
( R# v. w" I6 k! V/ \ L - * @since 2015-3-27
: n2 W2 a5 ^' g - */. `* ^; e5 u* P, ]' @* }, u( I7 B
- public class word2html {% O4 j" m5 i- Z# G, A8 i9 Z
- public static boolean wordToHtml(String inPath, String toPath) {
! G/ ]1 k) s' D8 {) t - // 启动word
' R, f5 l0 B3 ^$ i - ActiveXComponent axc = new ActiveXComponent("Word.Application");
8 }( S G' P0 }4 g% }2 S/ G
6 l9 B+ W+ O, @9 e) d* a- boolean flag = false;& E* u; A) @4 D" P# e
' E1 F: L( n) C! N# s+ _! Y) B- try {
' ^( q. g9 l0 ?0 ^- B, [ - // 设置word不可见7 V8 D# Q' e& _% u _4 z7 J. h) b
- axc.setProperty("Visible", new Variant(false)); ~* h) L7 V4 B2 o9 L* `, M# A
- / _+ n* a1 h4 R( t( y
- Dispatch docs = axc.getProperty("Documents").toDispatch();+ q; {# M- ?% @% I
, D7 V) \7 l9 [* ?& m- // 打开word文档
9 C0 U6 E" S# Q+ F - Dispatch doc = Dispatch.invoke(
! u: |. P: Q4 X0 I% s; Y - docs,
9 t* i' ^4 l" M3 Z9 e5 J, L: D - "Open",3 h J5 D0 D a. R; ~
- Dispatch.Method,, h% K, X2 d/ L$ P# K' f
- new Object[] { inPath, new Variant(false),
* y* V F3 }8 D; Z/ } - new Variant(true) }, new int[1]).toDispatch();4 R* H/ U7 p p4 f& ^' j4 f1 F, w
1 B& r$ b) D0 r) k' {5 {' C% r- // 作为html格式保存到临时文件
$ h3 A% f) R' ]$ S6 _ - Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {6 j, V) ]5 _1 S0 X
- toPath, new Variant(8) }, new int[1]);
4 i6 b* Z1 w- w' y8 B; T
/ P) E" t& `9 y4 h0 l- Variant f = new Variant(false);* V$ l+ w. L" @4 M/ Z' p8 @/ `
- Dispatch.call(doc, "Close", f);
+ t/ @: N; ]5 q: Y$ h3 w - flag = true;
# R: a/ B; b& r: A - return flag;: I. h3 _5 e4 L% h
6 |* ^$ k: T ^- } catch (Exception e) {
2 y# x- ^* j" r - e.printStackTrace();& v9 \; a) }0 L9 O' R
- return flag;, x# Q7 m4 i3 Y5 k8 m
- } finally {, E$ _- Q2 J4 r+ M9 @0 F
- axc.invoke("Quit", new Variant[] {});
+ V. g% g! u) t W% i. d! G; Q - }* g7 p/ X4 o1 V6 ]- i! }9 x+ C
- }. r2 ^# N3 e7 j+ r% k" I# ^
- 7 c; l2 [* {( W" W- p
- public static void main(String[] args) {! m7 h3 o: F, o: x- x
-
9 S' {* e$ p9 D P4 a5 g1 F - word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",& T+ u E2 s3 O4 @* U. i
- "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");
1 @5 | M% a+ y - 2 r' X% E% f6 T" o4 D" Q
- }
4 c. e# W2 q" { Y% \1 b9 C$ J9 u5 B - }
复制代码
" w' z# u- v% T. G' J8 D% D3 {: o6 U, m; v! W- N
; H- j9 j1 X; g. h5 U |