- java应用jcom 将word转pdf
- 经验 2009 - 03 - 01 09 : 47 阅读 528 评论 0
- 字号: 大大 中中 小小
- 在JAVA中使用JCOM 和JXL注意要点:
- ( 1 )在你的lib下要有jdom- 1.0 .jar,jxl- 2.5 . 5 .jar,jcom - 2.2 . 4 .jar,jcom .dll。(jcom 下载地址(http: //sourceforge.net/projects/ jcom ))
- ( 2 )要把jcom .dll同时放到你JDK的bin目录下或者放到系统盘的windows下(推荐放到JDK的BIN下)
- ( 3 )你的机器需要安装ms office以及acrobat(不是reader)注:Acrobat Reader 软件是一个用于浏览 PDF 文件的实用程序;而 Adobe Acrobat 4.0 软件则用来创建和改善 PDF 文件,它是解决信息的共享、检查和发布的完整工具。
- 把上面的JAR包都放好后开始写应用中的工具类(申明一下在JCOM 中得到的都是IDispatch对象,以下还会抛出一个JComException的异常)
- ( 1 )首先应该判断一个传进来的路径是Word 或是 Excel 还是其他的东东。
- if (path.endsWith( ".doc" )){
- ......
- }
- 注:如果是excel后缀是 ".xls" ;
- ( 2 )然后你要有两个对象:
- ReleaseManager rm = new ReleaseManager();
- IDispatch xlsApp= null ;
- 注:ReleaseManager相当于一个容器,与你机器上的所有JCOM 组建交互,根据你传的参数他会去寻找你机器上的所有JCOM 能操作的组建;
- IDispatch 可以理解为一个对象,所有的东东都是对象;
- ( 3 )你要让他知道你要和EXCEL交互你得这样做
- xlsApp = new IDispatch(rm, "Excel.Application" );
- ( 4 )接着要得到一个Workbooks(工作薄)
- IDispatch excel = (IDispatch) xlsApp.get( "Workbooks" );
- ( 5 )设置当前对象是否可见
- xlsApp.put( "Visible" , new java.lang.Boolean( false ));
- ( 6 )得到工作薄以后要打开
- IDispatch workbook = (IDispatch) excel.method( "open" , new Object[] { FilePath(EXCEL存放的路径) });
- ( 7 )判断文件是否存在如果存在则删除
- File f = new File(outPath);
- if (f.exists())
- f.delete();
- ( 8 )将工作薄另存为
- workbook.method( "saveAs" , new Object[] { outPath, new Integer( 9 ) });
- ( 9 )获得一个工作薄(workbook)下的所有工作表(Sheets)
- IDispatch sheets = (IDispatch) workbook.get( "Sheets" );
- 注:得到的是一个数组;
- ( 10 )获得工作表(Sheets)的总数
- int sheetsCount = Integer.parseInt(sheets.get( "Count" ).toString());
- ( 11 )得到每个工作表(Sheets)的名称
- for ( int sheetInx= 1 ;sheetInx <= sheetsCount;sheetInx++) {
- IDispatch sheet = (IDispatch) sheets.get( "item" , new Object[] { new Integer(sheetInx) });
- String sheetName = sheet.get( "name" ).toString();
- }
- 注意:excel都是从 1 开始遍历 而不是从 0 开始 所以 for 里面有多种写法看自己怎么顺手怎么写;
- 遍历工作表除了传索引还能传工作表名称:IDispatch sheet = ((IDispatch) sheets.get( "item" , new Object[] { sheetName }));
- ( 12 )获得正在活动的工作表(sheet)
- IDispatch asheet = (IDispatch) xlsApp.get( "ActiveSheet" );
- 注:xlsApp是从ReleaseManager里面获得EXCEL对象的一个IDispatch对象
- 如果是获得sheets要先获得工作薄(Workbook)然后用工作薄(Workbook)获得他下的所有工作表(sheets)
- ( 13 )获得工作表里面的所有行总数( 6 万多行吧)
- IDispatch row = (IDispatch)cursheet.get( "Rows" );
- int rows = Integer.parseInt(row.get( "Count" ).toString());
- ( 14 )获得工作表里面的所有列总数( 256 列)
- IDispatch col = (IDispatch)sheet.get( "Columns" );
- int cols = Integer.parseInt(col.get( "Count" ).toString());
- ( 15 )获得工作表里面可视的所有行总数
- IDispatch row = (IDispatch) ((IDispatch)cursheet.get( "UsedRange" )).get( "Rows" );
- int rows = Integer.parseInt(row.get( "Count" ).toString());
- ( 16 )获得工作表里面可视的所有列总数
- IDispatch col = (IDispatch) ((IDispatch)cursheet.get( "UsedRange" )).get( "Columns" );
- int cols = Integer.parseInt(col.get( "Count" ).toString());
- ( 17 )获得行列以后要获得里面的内容(这里用的rows 和 cols就是上面所得的)
- String cellVal= "" ;
- String cellTxt= "" ;
- String hasFormula= "" ;
- String cellFormula= "" ;
- for ( int i= 0 ;i<rows;i++){
- for ( int j= 0 ;j<cols;j++){
- IDispatch cells = (IDispatch) cursheet.get( "Cells" , new Object[] { new Integer(i+ 1 ), new Integer(j+ 1 ) });
- cellVal = cells.get( "value" ).toString();
- cellTxt = cells.get( "text" ).toString();
- hasFormula = cells.get( "HasFormula" ).toString();
- cellFormula = cells.get( "FormulaR1C1" ).toString();
- }
- }
- 注:这个遍历的时候也是从 1 开始;
- cells.get( "value" )获得的是浮点数格式 如果你输入的是 1 ,得到的会是 1.0 ;
- cells.get( "text" )获得的是本身,你输入什么获得的就是什么;
- cells.get( "HasFormula" )判断是否是公式,如果单元格里是公式则返回真( true ),如果不是公式则返回假( false );
- cells.get( "FormulaR1C1" )获得公式,获得单元格里公式的内容;
- ( 18 )保护工作表
- asheet.method( "Protect" , new Object[] { password, new java.lang.Boolean( true ), new java.lang.Boolean( true ) });
- 注:Protect后有N多参数 第 1 -- 3 个分别是 password,DrawingObjects,Contects。
- ( 19 )解工作表保护
- asheet.method( "Unprotect" , new Object[] { password });
- ( 20 )在 finally 里面写关闭
- if (xlsApp != null ) {
- ((IDispatch) xlsApp.get( "ActiveWorkbook" )).put( "Saved" , new java.lang.Boolean( true )); //保存工作薄
- xlsApp.method( "quit" , null ); //quit 是关闭的是整个EXCEL
- xlsApp = null ;
- }
- rm.release();
- rm = null ;
- ( 21 )关闭根据情况也写在 finally 里面
- workbook.method( "close" , null );
- xlsApp.method( "quit" , null );
- xlsApp= null ;
- rm.release();
- rm = null ;
- 注:workbook.method( "close" , null );关闭的是Workbook里的工作表;
- xlsApp.method( "quit" , null );关闭的是整个工作薄
- 注意:
- 关闭的时候一定要加上
- //rm 就是ReleaseManager的实例
- rm.release();
- rm = null ;
- 如果你打开EXCEL不加上面两句的话在进程里面还运行着EXCEL.EXE
- 附:word转pdf实例:
- package com.etong.util;
- import jp.ne.so_net.ga2.no_ji.jcom .IDispatch;
- import jp.ne.so_net.ga2.no_ji.jcom .ReleaseManager;
- public class Office2Pdf {
- public void createPDF(String officePath,String pdfPath) throws Exception {
- ReleaseManager rm = null ;
- IDispatch app = null ;
- try {
- rm= new ReleaseManager();
- app = new IDispatch(rm, "PDFMakerAPI.PDFMakerApp" );
- app.method( "CreatePDF" , new Object[]{officePath,pdfPath});
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- app= null ;
- rm.release();
- rm = null ;
- } catch (Exception e) {
- throw e;
- }
- }
- }
- public static void main(String[] args) throws Exception {
- Office2Pdf one= new Office2Pdf();
- one.createPDF( "D:\\an\\11.doc" , "D:\\an\\11.pdf" );
- }
-
}
java应用jcom将word转pdf
最新推荐文章于 2021-03-15 14:53:30 发布
本文介绍如何使用Java和JCOM组件将Word文档转换为PDF格式。文章详细说明了所需库的配置及步骤,包括启动Office应用、打开文档、保存为PDF等过程。

322

被折叠的 条评论
为什么被折叠?



