`
- 浏览:
98027 次
- 性别:
- 来自:
广州
-
-
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:
-
-
(
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
);
-
-
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.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"
);
-
}
-
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
实现word excel ppt转为pdf,并提供转格式后删除原来的文件。(需要使用jcom)
"Jcom转换office为pdf"这个主题涉及到的是如何使用Java库JCom来实现将Microsoft Office格式的文件(如Word、Excel、PowerPoint)转换成PDF格式。这种转换在多种场景下都是必要的,比如保证文档在不同平台和设备上的...
三种java转换word 的方式 1、利用小美的Jacob调用MS Office转换文档为PDF 2、JCom是日本的一个开源项目,可以轻松实现office转换pdf 3、可以利用开源的OpenOffice,这个是linux提供的一个用于office的工具,调用内部...
在IT行业中,转换...总结来说,通过Jcom调用JNI将Office文档转换为PDF是一种结合了Java和Windows COM组件技术的解决方案,它允许Java开发者利用已有的Office转换能力,但这种方法在性能和资源管理上可能存在挑战。
标题中的"jcom.jar和jcom.dll"是两个关键组件,它们在Java环境中用于与Microsoft Office应用程序,如Visio、Word和Excel进行交互,并支持文件转换功能。jcom.jar是Java类库,它包含了用于与DLL(动态链接库)交互的...
- **Word到PDF**:将Microsoft Word文档转换为PDF格式,这在需要跨平台分享或打印时非常有用。 - **Excel处理**:读取、修改或创建Excel电子表格,可以进行数据导入导出、计算公式、图表操作等。 - **图片处理**:...
标题中的“Office to PDF”指的是将Microsoft Office创建的文件(如Excel的XLS,Word的DOC,PowerPoint的PPT)转换成PDF格式的过程。在Windows XP操作系统和MyEclipse 7开发环境中,进行这样的转换可能需要使用特定...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...
Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...
在本方案中,Jacob主要用于调用MS Office(如Word、Excel等)的应用程序接口(API),将上传的文档转换为PDF格式。 **Jacob的核心特性** 包括: - **ActiveXComponent类**:用于加载COM组件,并提供访问这些组件的...
J2C 将 Java 代码转成 C++ 代码,这是源码级别的转换,输出的 C++ 代码是有效的代码。 OSGi 分布式通讯组件 R-OSGi R-OSGi 是一套适用于任意满足 OSGi 架构的分布式通讯组件。它以 jar 的形式发布,部署容易,使用...