package mqdms.com.other;
import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/*
* 注意word转pdf要安装虚拟打印机,且要配置
* 使用jacob框架,把dll文件放到jre/bin目录下
*/
public class Test {
private ActiveXComponent wordCom = null;
private Object wordDoc = null;
private final Variant False = new Variant(false);
private final Variant True = new Variant(true);
public static final int EXCEL_HTML = 44;
public static final int WORD_HTML = 8;
/**
* 打开word文档
*
*
@param filePath word文档
*
@return 返回word文档对象
*/
public boolean openWord(String filePath) {
//建立ActiveX部件
wordCom = new ActiveXComponent("Word.Application");
try {
//返回wrdCom.Documents的Dispatch
Dispatch wrdDocs = wordCom.getProperty("Documents").toDispatch();
//调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
wordDoc = Dispatch.invoke(wrdDocs, "Open", Dispatch.Method,
new Object[] { filePath }, new int[1]).toDispatch();
return true;
}
catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
/**
* 关闭word文档
*/
public void closeWord(boolean saveOnExit) {
if (wordCom!=null) {
//关闭word文件
//Dispatch.call(wordDoc, "Close", new Variant(saveOnExit));
wordCom.invoke("Quit",new Variant[]{});
//wordCom.invoke("Quit",new Variant[0]);
wordCom=null;
//释放在程序线程中引用的其它com,比如Adobe PDFDistiller
ComThread.Release();
}
}
/**
* 将word文档打印为PS文件后,使用Distiller将PS文件转换为PDF文件
*
@param sourceFilePath
* 源文件路径
*
@param destinPSFilePath
* 首先生成的PS文件路径
*
@param destinPDFFilePath
* 生成PDF文件路径
*/
public void docToPDF(String sourceFilePath, String destinPSFilePath,
String destinPDFFilePath) {
if (!openWord(sourceFilePath)) {
closeWord(true);
return;
}
//建立Adobe Distiller的com对象
ActiveXComponent distiller = new ActiveXComponent("PDFDistiller.PDFDistiller.1");
try {
//设置当前使用的打印机,我的Adobe Distiller打印机名字为 "Adobe PDF"
wordCom.setProperty("ActivePrinter", new Variant("Adobe PDF"));
//设置printout的参数,将word文档打印为postscript文档。现在只使用了前5个参数,假如要使用更多的话可以参考MSDN的office开发相关api
//是否在后台运行
Variant Background = False;
//是否追加打印
Variant Append = False;
//打印所有文档
int wdPrintAllDocument = 0;
Variant Range = new Variant(wdPrintAllDocument);
//输出的postscript文件的路径
Variant OutputFileName = new Variant(destinPSFilePath);
Dispatch.callN((Dispatch) wordDoc,
"PrintOut", new Variant[] {
Background, Append, Range, OutputFileName });
System.out.println("由word文档打印为ps文档成功!");
//调用Distiller对象的FileToPDF方法所用的参数,具体内容参考Distiller Api手册
//作为输入的ps文档路径
Variant inputPostScriptFilePath = new Variant(destinPSFilePath);
//作为输出的pdf文档的路径
Variant outputPDFFilePath = new Variant(destinPDFFilePath);
//定义FileToPDF方法要使用adobe pdf设置文件的路径,在这里没有赋值表示并不使用pdf配置文件
Variant PDFOption = new Variant("");
//调用FileToPDF方法将ps文档转换为pdf文档
Dispatch.callN(distiller, "FileToPDF", new Variant[] {inputPostScriptFilePath, outputPDFFilePath, PDFOption });
System.out.println("由ps文档转换为pdf文档成功!");
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
closeWord(true);
}
}
public static void excelToHtml(String xlsfile, String htmlfile)
{
ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动word
try
{
app.setProperty("Visible", new Variant(false));
Dispatch excels = app.getProperty("Workbooks").toDispatch();
Dispatch excel = Dispatch.invoke(
excels,
"Open",
Dispatch.Method,
new Object[] { xlsfile, new Variant(false),
new Variant(true) }, new int[1]).toDispatch();
Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {
htmlfile, new Variant(EXCEL_HTML) }, new int[1]);
Variant f = new Variant(false);
Dispatch.call(excel, "Close", f);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
app.invoke("Quit", new Variant[] {});
}
}
public static void wordToHtml(String docfile, String htmlfile)
{
ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
try
{
app.setProperty("Visible", new Variant(false));
Dispatch docs = app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(
docs,
"Open",
Dispatch.Method,
new Object[] { docfile, new Variant(false),
new Variant(true) }, new int[1]).toDispatch();
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
htmlfile, new Variant(WORD_HTML) }, new int[1]);
Variant f = new Variant(false);
Dispatch.call(doc, "Close", f);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
app.invoke("Quit", new Variant[] {});
}
}
public static void main(String[] argv) {
// Test d2p = new Test();
//d2p.docToPDF("D:\\员工假期申请单(员工).doc", "D:\\员工假期申请单(员工).ps", "D:\\员工假期申请单.pdf");
//excelToHtml("D:\\通讯录2011.02.21.xls","D:\\通讯录.html");
// wordToHtml("F:\\资料\\员工登记表.doc", "F:\\资料\\员工登记表.html");
//boolean success = (new File("D:\\test.ps")).delete();
//if(success){
// System.out.println("删除打印机文件成功");
// }
}
}
分享到:
相关推荐
Jacob库在Java编程环境中是一个非常实用的工具,它允许开发者通过COM接口与Microsoft Office应用程序进行交互,例如Word、Excel和PowerPoint。在这个场景中,我们使用Jacob来实现Word文档到PDF的转换,以保持格式的...
标题提到的"Jacob Word excel 转PDF 合并PDF文件"是指使用Jacob库来将Microsoft Word和Excel文档转换为PDF格式,并进一步合并多个PDF文件。Jacob(Java Advanced COM Bridge)是一个Java库,它允许Java应用程序与...
资源中包括工具类、jacob.jar和jacob-1.18-x64.dll(64位)、jacob-1.18-x86.dll(32位) 在使用jacob时,我们需要将jacob-1.18-x64.dll或jacob-1.18-x86.dll放到jdk的bin目录下或者jdk/jre的bin目录下才可以使用。
在这个场景中,JACOB被用来调用Microsoft Office的应用程序,如Word或Excel,来将这些文档转换为PDF。 首先,我们需要理解JACOB的核心工作原理。JACOB通过JNI(Java Native Interface)提供了一个接口,使得Java...
jacob将word、excel转为pdf
Jacob虽然主要用于与Word和Excel的交互,但处理PDF文件时,通常需要结合其他库,如Apache POI或iText,因为Jacob本身并不直接支持PDF操作。你可以先使用Jacob将Word或Excel文档转换为PDF,然后使用专门处理PDF的库...
本文将深入探讨如何使用Jacob库来操作Word和Excel,通过提供的示例文档,我们将理解如何进行文件转换和其他操作。 首先,Jacob全称为Java COM Bridge,是一个Java到COM(Component Object Model)桥接器,它使得...
jacob操作WPS、Office对应Word、Excel、PPT生成PDF,采用版本为jaco1.7X。
总的来说,Java实现Word、Excel转PDF和HTML涉及对各种库的理解和使用,包括Jacob、Apache POI等。实际应用时,需要根据项目需求选择最适合的工具和技术,并注意处理转换过程中可能出现的格式和样式丢失问题。同时,...
本项目“java将word转图片转pdf_jacob.zip”是关于利用Java进行文档格式转换的一个实例,主要涉及的技术点包括Java与Microsoft Office文档的交互以及图片和PDF的生成。 首先,我们需要了解Java中的Jacob库。Jacob...
在这个场景中,我们使用Jacob来实现将Word文档(.doc或.docx)和Excel工作簿(.xls或.xlsx)转换为PDF格式。这个过程涉及到几个关键步骤和技术细节,下面将详细介绍。 首先,为了使用Jacob,你需要在你的开发环境中...
标题“java实现office、wps转pdf,pdf转word”指的是利用Java编程来实现在不同办公文档格式间的转换,特别是从Microsoft Office和WPS格式转换为PDF,以及从PDF反向转换为Word文档。 首先,让我们讨论从Office和WPS...
Jacob是一个Java Native Interface (JNI) 库,它提供了对Microsoft Office API的访问,从而可以在Java程序中操作Word、Excel等文件。本示例中,开发者试图通过这些技术组合生成Word文档,并进一步将其转换为PDF。 ...
"使用jacob转pdf资料"这个主题涉及到一个名为jacob的Java库,它允许开发者通过Java代码来调用Microsoft Office或WPS组件,实现各种文档格式之间的转换。 首先,jacob(Java COM Bridge)是一个开源的Java库,它的...
标题中的“Excel、Word转PDF时,异常com.jacob.com.ComFailException: Invoke of: SaveAs”是一个关于在编程环境中转换Microsoft Office文档(如Excel和Word)为PDF格式时遇到的错误。这个错误通常与使用Jacob库进行...
基于jacob插件实现 word,excel,ppt 转换 pdf,如下所示: public void excel2pdf(String source, String target) { System.out.println("启动Excel"); long start = System.currentTimeMillis(); ...
"jacob office转pdf"这个主题涉及到的是使用Jacob库来实现这样的转换。Jacob是一个Java和COM(Component Object Model)之间桥接的开源库,它允许Java应用程序调用COM组件,从而能够与微软的Office应用程序进行交互...
实现excel和word转pdf.rar" 描述了一个Java程序,该程序能够将Excel和Word文档转换为PDF格式,且在转换过程中无水印,支持多Sheet合并到一个PDF页面,确保每个Sheet都能完全显示,或者按照Excel原始宽度不变,超出...
Java中的Jacob库是一个非常有用的工具,它允许Java应用程序与Microsoft Office进行交互,包括Word、Excel和PowerPoint等。Jacob库的全称为Java COM Bridge,它通过COM(Component Object Model)接口实现了Java与...
一旦dll被正确加载,就可以通过Jacob库的API来操作Word和Excel。 转换过程大致如下: 1. **初始化Jacob**: 在Java程序中,你需要创建一个`com.jacob.COMThread.InitMTA()`实例来启动多线程应用程序模型,然后使用`...