java应用jcom将word转pdf

   1. java应用jcom将word转pdf 
   2.  
   3. 经验   2009 - 03 - 01   09 : 47    阅读 528    评论 0     
   4. 字号: 大大  中中  小小  
   5. 在JAVA中使用JCOM和JXL注意要点:  
   6.  
   7. (1 )在你的lib下要有jdom- 1.0 .jar,jxl- 2.5 . 5 .jar,jcom- 2.2 . 4 .jar,jcom.dll。(jcom下载地址(http: //sourceforge.net/projects/jcom))  
   8.  
   9. (2 )要把jcom.dll同时放到你JDK的bin目录下或者放到系统盘的windows下(推荐放到JDK的BIN下)  
  10.  
  11. (3 )你的机器需要安装ms office以及acrobat(不是reader)注:Acrobat Reader 软件是一个用于浏览 PDF 文件的实用程序;而 Adobe Acrobat  4.0  软件则用来创建和改善 PDF 文件,它是解决信息的共享、检查和发布的完整工具。  
  12.  
  13. 把上面的JAR包都放好后开始写应用中的工具类(申明一下在JCOM中得到的都是IDispatch对象,以下还会抛出一个JComException的异常)  
  14.  
  15. (1 )首先应该判断一个传进来的路径是Word 或是 Excel 还是其他的东东。  
  16.  
  17. if (path.endsWith( ".doc" )){  
  18.  
  19.    ......  
  20.  
  21. }  
  22.  
  23. 注:如果是excel后缀是".xls" ;  
  24.  
  25. (2 )然后你要有两个对象:  
  26.  
  27. ReleaseManager rm = new  ReleaseManager();  
  28.  
  29. IDispatch xlsApp=null ;  
  30.  
  31. 注:ReleaseManager相当于一个容器,与你机器上的所有JCOM组建交互,根据你传的参数他会去寻找你机器上的所有JCOM能操作的组建;  
  32.  
  33.     IDispatch 可以理解为一个对象,所有的东东都是对象;  
  34.  
  35. (3 )你要让他知道你要和EXCEL交互你得这样做  
  36.  
  37. xlsApp = new  IDispatch(rm,  "Excel.Application" );  
  38.  
  39. (4 )接着要得到一个Workbooks(工作薄)  
  40.  
  41. IDispatch excel = (IDispatch) xlsApp.get("Workbooks" );  
  42.  
  43. (5 )设置当前对象是否可见  
  44.  
  45. xlsApp.put("Visible" ,  new  java.lang.Boolean( false ));  
  46.  
  47. (6 )得到工作薄以后要打开  
  48.  
  49. IDispatch workbook = (IDispatch) excel.method("open" ,  new  Object[] { FilePath(EXCEL存放的路径) });  
  50.  
  51. (7 )判断文件是否存在如果存在则删除  
  52.  
  53. File f = new  File(outPath);  
  54.  
  55. if  (f.exists())  
  56.  
  57.     f.delete();  
  58.  
  59. (8 )将工作薄另存为  
  60.  
  61. workbook.method("saveAs" ,  new  Object[] { outPath,  new  Integer( 9 ) });  
  62.  
  63. (9 )获得一个工作薄(workbook)下的所有工作表(Sheets)  
  64.  
  65. IDispatch sheets = (IDispatch) workbook.get("Sheets" );  
  66.  
  67. 注:得到的是一个数组;  
  68.  
  69. (10 )获得工作表(Sheets)的总数  
  70.  
  71. int  sheetsCount = Integer.parseInt(sheets.get( "Count" ).toString());  
  72.  
  73. (11 )得到每个工作表(Sheets)的名称  
  74.  
  75. for ( int  sheetInx= 1 ;sheetInx <= sheetsCount;sheetInx++) {  
  76.  
  77. IDispatch sheet = (IDispatch) sheets.get("item" ,  new  Object[] {  new  Integer(sheetInx) });  
  78.  
  79. String sheetName = sheet.get("name" ).toString();  
  80.  
  81. }  
  82.  
  83. 注意:excel都是从1 开始遍历 而不是从 0 开始 所以 for 里面有多种写法看自己怎么顺手怎么写;  
  84.  
  85.       遍历工作表除了传索引还能传工作表名称:IDispatch sheet = ((IDispatch) sheets.get("item" ,  new  Object[] { sheetName }));  
  86.  
  87. (12 )获得正在活动的工作表(sheet)  
  88.  
  89. IDispatch asheet = (IDispatch) xlsApp.get("ActiveSheet" );  
  90.  
  91. 注:xlsApp是从ReleaseManager里面获得EXCEL对象的一个IDispatch对象  
  92.  
  93.     如果是获得sheets要先获得工作薄(Workbook)然后用工作薄(Workbook)获得他下的所有工作表(sheets)  
  94.  
  95. (13 )获得工作表里面的所有行总数( 6 万多行吧)  
  96.  
  97. IDispatch row = (IDispatch)cursheet.get("Rows" );  
  98.  
  99. int  rows = Integer.parseInt(row.get( "Count" ).toString());  
100.  
101. (14 )获得工作表里面的所有列总数( 256 列)  
102.  
103. IDispatch col = (IDispatch)sheet.get("Columns" );  
104.  
105. int  cols = Integer.parseInt(col.get( "Count" ).toString());  
106.  
107. (15 )获得工作表里面可视的所有行总数  
108.  
109. IDispatch row = (IDispatch) ((IDispatch)cursheet.get("UsedRange" )).get( "Rows" );  
110.  
111. int  rows = Integer.parseInt(row.get( "Count" ).toString());  
112.  
113. (16 )获得工作表里面可视的所有列总数  
114.  
115. IDispatch col = (IDispatch) ((IDispatch)cursheet.get("UsedRange" )).get( "Columns" );  
116.  
117. int  cols = Integer.parseInt(col.get( "Count" ).toString());  
118.  
119. (17 )获得行列以后要获得里面的内容(这里用的rows 和 cols就是上面所得的)  
120.  
121. String cellVal="" ;  
122.  
123. String cellTxt="" ;  
124.  
125. String hasFormula= "" ;  
126.  
127. String cellFormula="" ;  
128.  
129. for ( int  i= 0 ;i<rows;i++){  
130.  
131.    for ( int  j= 0 ;j<cols;j++){  
132.  
133. IDispatch cells = (IDispatch) cursheet.get("Cells" ,  new  Object[] {  new  Integer(i+ 1 ), new  Integer(j+ 1 ) });  
134.  
135. cellVal = cells.get("value" ).toString();  
136.  
137. cellTxt = cells.get("text" ).toString();  
138.  
139. hasFormula = cells.get("HasFormula" ).toString();  
140.  
141. cellFormula = cells.get("FormulaR1C1" ).toString();  
142.  
143.    }  
144.  
145. }  
146.  
147. 注:这个遍历的时候也是从1 开始;  
148.  
149.     cells.get("value" )获得的是浮点数格式 如果你输入的是 1 ,得到的会是 1.0 ;  
150.  
151.     cells.get("text" )获得的是本身,你输入什么获得的就是什么;  
152.  
153.     cells.get("HasFormula" )判断是否是公式,如果单元格里是公式则返回真( true ),如果不是公式则返回假( false );  
154.  
155.     cells.get("FormulaR1C1" )获得公式,获得单元格里公式的内容;  
156.  
157. (18 )保护工作表  
158.  
159. asheet.method("Protect" ,  new  Object[] { password,  new  java.lang.Boolean( true ),  new  java.lang.Boolean( true ) });  
160.  
161. 注:Protect后有N多参数 第1 -- 3 个分别是 password,DrawingObjects,Contects。  
162.  
163. (19 )解工作表保护  
164.  
165. asheet.method("Unprotect" ,  new  Object[] { password });  
166.  
167. (20 )在 finally 里面写关闭  
168.  
169. if  (xlsApp !=  null ) {  
170.  
171.     ((IDispatch) xlsApp.get("ActiveWorkbook" )).put( "Saved" ,  new  java.lang.Boolean( true ));  //保存工作薄   
172.  
173.     xlsApp.method("quit" ,  null );     //quit 是关闭的是整个EXCEL   
174.  
175.     xlsApp = null ;  
176.  
177. }  
178.  
179. rm.release();  
180.  
181. rm = null ;  
182.  
183. (21 )关闭根据情况也写在 finally  里面  
184.  
185. workbook.method("close" ,  null );  
186.  
187. xlsApp.method("quit" ,  null );  
188.  
189. xlsApp=null ;  
190.  
191. rm.release();  
192.  
193. rm = null ;  
194.  
195. 注:workbook.method("close" ,  null );关闭的是Workbook里的工作表;  
196.  
197.     xlsApp.method("quit" ,  null );关闭的是整个工作薄  
198.  
199. 注意:  
200.  
201. 关闭的时候一定要加上  
202.  
203. //rm 就是ReleaseManager的实例   
204.  
205. rm.release();  
206.  
207. rm = null ;  
208.  
209. 如果你打开EXCEL不加上面两句的话在进程里面还运行着EXCEL.EXE  
210.  
211. 附:word转pdf实例: 
212.  
213. package  com.etong.util; 
214.  
215. import  jp.ne.so_net.ga2.no_ji.jcom.IDispatch; 
216.        import  jp.ne.so_net.ga2.no_ji.jcom.ReleaseManager; 
217.  
218. public   class  Office2Pdf { 
219.          
220.         public   void  createPDF(String officePath,String pdfPath)  throws  Exception { 
221.                 ReleaseManager rm = null ; 
222.                 IDispatch app = null ; 
223.                 try  { 
224.                         rm=new  ReleaseManager(); 
225.                         app = new  IDispatch(rm,  "PDFMakerAPI.PDFMakerApp" ); 
226.                         app.method("CreatePDF" , new  Object[]{officePath,pdfPath}); 
227.                 } catch  (Exception e) { 
228.                         e.printStackTrace(); 
229.                 } finally  { 
230.                         try  { 
231.                                 app=null ; 
232.                                 rm.release(); 
233.                                 rm = null ; 
234.                         } catch  (Exception e) { 
235.                                 throw  e; 
236.                         } 
237.                 }                
238.         } 
239.          
240.         public   static   void  main(String[] args)  throws  Exception { 
241.                 Office2Pdf one=new  Office2Pdf(); 
242.                 one.createPDF("D:\\an\\11.doc" , "D:\\an\\11.pdf" ); 
243.         }   
244.  }

你可能感兴趣的:(java,jdk,工作,Excel,Office)