JCom调用COM组件把office文档转换为pdf的调用方法如何?

scheung 发布于 2014/05/19 19:01
阅读 3K+
收藏 2

我主要参考的是

http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548510.html


上网也找了不少资料看,感觉用JCom和jacob在语句上差不多,选哪一个都没多大区别。主要是对COM组件的调用,不知道该怎么写。


对Word的转换,参照上文可以实现,但是对excel的转换就不行了,我也到微软的官网那里找过资料,反正就是没弄明白COM组件的调用究竟该怎么用。

转word的代码如下

public void word2PDF(String inputFile, String pdfFile) {
		ReleaseManager rm = null;
		IDispatch app = null;
		try {
			rm = new ReleaseManager();
			app = new IDispatch(rm, "Word.Application");// 启动word
			app.put("Visible", false); // 设置word不可见
			IDispatch docs = (IDispatch) app.get("Documents"); // 获得word中所有打开的文档
			IDispatch doc = (IDispatch) docs.method("Open", new Object[] {
					inputFile, false, true });// 打开文档
			doc.method("SaveAs", new Object[] { pdfFile, 17 });// 转换文档为pdf格式
			doc.method("Close", new Object[] { false });
			app.method("Quit", null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				app = null;
				rm.release();
				rm = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
然后我相应地把word的一些东西替换成excel,例如Word.Application改成了Excel.Application,Documents换成了Worksheets、Workbooks,反正转换出来就是乱码。


网上的例子全部都是转换word的,一说到其他,就说参考相关api,但是又不说具体在哪里能找到,我看着微软的官方文档根本无从下手,在文档中搜索也没多大发现。


请问各位知道该怎么调用吗?或者说哪里有MS Office COM组件的调用api参考?

加载中
0
scheung
scheung

成功了!之前是因为文档,没查清楚。



使用ExportAsFixedFormat方法而不是SaveAs方法,Excel的SaveAs方法不支持pdf。

代码如下

package main;

import java.io.File;

import javax.xml.ws.Dispatch;

import jp.ne.so_net.ga2.no_ji.jcom.IDispatch;
import jp.ne.so_net.ga2.no_ji.jcom.ReleaseManager;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelApplication;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelRange;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorkbook;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorkbooks;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorksheet;
import jp.ne.so_net.ga2.no_ji.jcom.excel8.ExcelWorksheets;

public class JComConvertor {

	/**
	 * JCom调用MS Office转换word为PDF
	 * 
	 * @param inputFile
	 *            doc文档的绝对路径
	 * @param pdfFile
	 *            输出pdf文档的绝对路径,例如D:\\folder\\test.pdf
	 */
	public void word2PDF(String inputFile, String pdfFile) {
		ReleaseManager rm = null;
		IDispatch app = null;
		try {
			rm = new ReleaseManager();
			app = new IDispatch(rm, "Word.Application");// 启动word
			app.put("Visible", false); // 设置word不可见
			IDispatch docs = (IDispatch) app.get("Documents"); // 获得word中所有打开的文档
			IDispatch doc = (IDispatch) docs.method("Open", new Object[] {
					inputFile, false, true });// 打开文档
			doc.method("SaveAs", new Object[] { pdfFile, 17 });// 转换文档为pdf格式
			doc.method("Close", new Object[] { false });
			app.method("Quit", null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				app = null;
				rm.release();
				rm = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * JCom调用MS Office转换excel为HTML
	 * 
	 * @param inputFile
	 *            源文件绝对路径
	 * @param htmlFile
	 *            目标文件绝对路径
	 */
	public void excel2HTML(String inputFile, String htmlFile) {
		ReleaseManager rm = null;
		IDispatch app = null;
		try {
			rm = new ReleaseManager();
			ExcelApplication ex = new ExcelApplication(rm);
			ex.put("Visible", false);
			IDispatch excs = (IDispatch) ex.get("Workbooks");
			IDispatch doc = (IDispatch) excs.method("Open", new Object[] {
					inputFile, false, true });// 打开文档
			doc.method("SaveAs", new Object[] { htmlFile, 44 });
			doc.method("Close", new Object[] { false });
			ex.method("Quit", null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				app = null;
				rm.release();
				rm = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * JCom调用MS Office转换Excel为PDF
	 * 
	 * @param inputFile
	 *            源文件绝对路径
	 * @param htmlFile
	 *            目标文件绝对路径
	 */
	public void excel2PDF(String inputFile, String pdfFile) {
		ReleaseManager rm = null;
		IDispatch app = null;
		try {
			rm = new ReleaseManager();
			ExcelApplication ex = new ExcelApplication(rm);
			ex.put("Visible", false);
			IDispatch excs = (IDispatch) ex.get("Workbooks");
			IDispatch doc = (IDispatch) excs.method("Open", new Object[] {
					inputFile, false, true });// 打开文档
			doc.method("ExportAsFixedFormat", new Object[] { 0, pdfFile });
			doc.method("Close", new Object[] { false });
			ex.method("Quit", null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				app = null;
				rm.release();
				rm = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * JCom调用MS Office转换Powerpoint为PDF
	 * 
	 * @param inputFile
	 *            源文件绝对路径
	 * @param pdfFile
	 *            目标文件绝对路径
	 */
	public void powerpoint2PDF(String inputFile, String pdfFile) {
		ReleaseManager rm = null;
		IDispatch app = null;
		try {
			rm = new ReleaseManager();
			app = new IDispatch(rm, "PowerPoint.Application");// 启动word
			// app.put("Visible", false); // 设置word不可见
			IDispatch docs = (IDispatch) app.get("Presentations"); // 获得word中所有打开的文档
			IDispatch doc = (IDispatch) docs.method("Open", new Object[] {
					inputFile, false, true });// 打开文档
			doc.method("SaveAs", new Object[] { pdfFile, 32 });// 转换文档为pdf格式
			// doc.method("Close", new Object[] { false });
			app.method("Quit", null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				app = null;
				rm.release();
				rm = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * JCom调用MS Office转换Powerpoint为JPG
	 * 
	 * @param inputFile
	 * @param pdfFile
	 */
	public void powerpoint2JPG(String inputFile, String jpgFile) {
		ReleaseManager rm = null;
		IDispatch app = null;
		try {
			rm = new ReleaseManager();
			app = new IDispatch(rm, "PowerPoint.Application");// 启动word
			// app.put("Visible", false); // 设置不可见
			IDispatch docs = (IDispatch) app.get("Presentations"); // 获得word中所有打开的文档
			IDispatch doc = (IDispatch) docs.method("Open", new Object[] {
					inputFile, false, true });// 打开文档
			doc.method("SaveAs", new Object[] { jpgFile, 17 });// 转换文档为pdf格式
			// doc.method("Close", new Object[] { false });
			app.method("Quit", null);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				app = null;
				rm.release();
				rm = null;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}






0
唐代de豆腐
唐代de豆腐

这个用jacob可以实现,给你一个简单的思路。

录制一个宏,然后执行excel转pdf另存为操作。最后停止录制,查看宏。

我的是office 2013,vb代码如下:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\tangdu\Desktop\aa.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
 所以你只要用jacbo打开文档,在JAVA中执行VB代码。

不过现在好像只能打印当前页的【ActiveSheet】-当前激活的sheet

JAVA代码供参考,

Dispatch font = Dispatch.get(this.selection, "Font").toDispatch();
Dispatch.put(font, "Name", new Variant(name));
Dispatch.put(font, "Bold", new Variant(bold));
Dispatch.put(font, "Italic", new Variant(italic));
Dispatch.put(font, "Underline", new Variant(underLine));
Dispatch.put(font, "Color", colorSize);
Dispatch.put(font, "Size", size);
代码和这个类似,,,你可以先试一下。。。。

PS:对于这种变量 ,xlQualityStandard 你可以VB帮忙里面查到这个值。

祝你成功!

 

0
0
小伙挺帅

多谢楼主分享,试试能不能行!

返回顶部
顶部