`
lhgyy00
  • 浏览: 144274 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

用jcom和jxl实现word转换成PDF

阅读更多

java应用jcom将word转pdf

 

在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实例:

 

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");
        }  
 }
 
分享到:
评论

相关推荐

    通过Jcom调用JNI将Office文档转换Pdf

    本主题聚焦于使用Jcom调用JNI技术来实现这一转换。以下是对这个过程的详细解析: 首先,理解几个核心概念: 1. **Jcom**:Jcom是一款Java组件,它提供了对COM组件(Component Object Model)的访问能力。COM是微软...

    Jcom转换office为pdf

    "Jcom转换office为pdf"这个主题涉及到的是如何使用Java库JCom来实现将Microsoft Office格式的文件(如Word、Excel、PowerPoint)转换成PDF格式。这种转换在多种场景下都是必要的,比如保证文档在不同平台和设备上的...

    Java实现word excel ppt转pdf

    实现word excel ppt转为pdf,并提供转格式后删除原来的文件。(需要使用jcom)

    jcom.jar和jcom.dll

    标题中的"jcom.jar和jcom.dll"是两个关键组件,它们在Java环境中用于与Microsoft Office应用程序,如Visio、Word和Excel进行交互,并支持文件转换功能。jcom.jar是Java类库,它包含了用于与DLL(动态链接库)交互的...

    java word转换pdf

    三种java转换word 的方式 ...2、JCom是日本的一个开源项目,可以轻松实现office转换pdf 3、可以利用开源的OpenOffice,这个是linux提供的一个用于office的工具,调用内部API可以方便转换。 另外实现pdfflash播放

    Java中使用JCOM操作Office对象

    Java中的JCOM技术允许开发人员使用Java来操作Microsoft Office对象,比如Excel、Word和PowerPoint,这主要得益于Java与COM(Component Object Model)之间的桥梁。COM是微软的一种接口技术,常用于Windows平台上的...

    java jcom word,excel打印

    要使用JCom库进行Word和Excel打印,首先需要确保在运行环境中安装了Microsoft Office,并且Java程序具有访问本地系统资源的权限。在项目中,你需要引入JCom的依赖文件,例如`JCom-2.2.0-1.jar`和`jcom.jar`。这些jar...

    Jcom jcom.dll

    这个组件的核心是 `jcom.dll` 文件,这是一个动态链接库(Dynamic Link Library),在Windows操作系统中常见,它包含了特定的函数和资源,能够被Java程序调用来实现特定的功能。 描述中提到的 "支持 java 的excel ...

    jcom-2.2.4-docs_sources_jar_dll

    jcom-2.2.4是一款在IT行业中广泛使用的组件,它包含了两个核心文件——`jcom.dll`和`jcom.jar`,以及配套的API文档和Java源代码。本文将详细阐述这两个关键文件的功能和作用,并探讨其API文档和源码对于开发者的重要...

    Java的COM桥 JCom技术文档资料

    JCom会自动处理参数类型转换和调用过程中的异常处理。 5. **事件处理**:COM组件往往支持事件机制,JCom也提供了相应的事件监听器,使得Java程序可以订阅并处理来自COM组件的事件。 6. **线程安全**:由于COM组件...

    jcom_jcom_

    同时,由于`jcom.dll`是Windows特有的,所以只有在Windows环境下运行的Java程序才能使用JCom。对于非Windows系统,可能需要寻找其他兼容的库来实现类似的跨平台COM访问。 总之,JCom库为Java开发者提供了强大的能力...

    word转化为html

    标签“源码”和“工具”暗示了这个过程可能涉及编程,即通过编写代码或使用特定的转换软件来实现Word到HTML的转换。源码可能是指提供了用于转换的编程代码,例如使用Python、Java或JavaScript等语言编写的脚本。工具...

    jcom-2.2.4-docs.zip

    - **与Office应用程序交互**:JAVA程序可以通过JCOM调用Word、Excel等Office组件,实现文档的生成、编辑等功能。 - **集成第三方控件**:许多Windows平台的控件是基于COM的,JCOM可以帮助JAVA程序集成这些控件,提升...

    jcom源码压缩包

    理解jcom如何封装和抛出异常,以及如何在Java代码中适当地捕获和处理这些异常,是确保程序稳定运行的重要部分。 7. **性能优化**:由于涉及到本地方法调用,性能可能是使用jcom时需要考虑的问题。理解源码可以帮助...

    jcom的jar及dll文件

    在IT行业中,`jcom.jar` 和 `jcom.dll` 文件是两个关键组件,它们通常与Java和.NET环境中的跨平台通信有关。`jcom` 是一个专有名词,可能是某个特定库或工具的标识,它允许Java应用程序与基于.NET Framework的应用...

    jcom java调用com+组件

    值得注意的是,JCOM库的使用可能会受到Java版本和操作系统版本的影响,因此在实际应用中需要确保兼容性。同时,由于跨语言交互的复杂性,调试过程中可能需要对COM组件的日志和Java的异常堆栈信息进行分析。 总之,...

    基于Java的通用PDF文档生成开源软件的设计.pdf

    基于Java的通用PDF文档生成开源软件的设计 ...本文的设计目标是实现一个绿色、开源、跨平台的PDF文档生成软件,该软件可以快速、方便地将各种结构化的信息和文档转换成PDF文档,且转换后的PDF文档字体适中、图片清晰。

    jcom 实现 java 写 Excel实例(包含jar包_dll文件_api)资料全

    本教程将详细介绍如何使用`jcom`来实现Java写Excel的实例,并涵盖关键知识点。 首先,`jcom`库利用Java的JNI(Java Native Interface)技术,通过调用Windows平台上的`dll`文件与Excel进行通信。在Java项目中,你...

    java打印Excel源码(jcom)

    在这个压缩包中,你可能会找到使用JCOM进行Excel打印的具体实现代码。 首先,我们需要理解Java中打印的基本概念。在Java中,打印主要是通过`java.awt.print`包中的类来实现的,如`PrinterJob`、`PageFormat`和`...

Global site tag (gtag.js) - Google Analytics