最近要做一个调用默认打印的程序,调用默认打印机,打印指定目录下的文档。
package com.xxxxx;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/*
* 默认打印机打印导出的word文档。
* 需要找到导出的文档的地址和名字
*/
public class Print {
public static void main(String[] args) {
PrintService PS = PrintServiceLookup.lookupDefaultPrintService();
String printerName = PS.getName(); 打印机名包含字串
String filePath = "C:javafx\\word.docx";// 文件路径
printWord(filePath, printerName);// 调用打印方法
}
public static void printWord(String filePath, String printerName) {
// 初始化线程
ComThread.InitSTA();
ActiveXComponent word = new ActiveXComponent("Word.Application");
// 设置打印机名称
word.setProperty("ActivePrinter", new Variant(printerName));
// 这里Visible是控制文档打开后是可见还是不可见,若是静默打印,那么第三个参数就设为false就好了
Dispatch.put(word, "Visible", new Variant(false));//设置true就会打开文件
// 获取文档属性
Dispatch document = word.getProperty("Documents").toDispatch();
// 打开激活文挡
Dispatch doc = Dispatch.call(document, "Open", filePath).toDispatch();
// Dispatch doc = Dispatch.invoke(document, "Open", Dispatch.Method,
// new Object[] { filePath }, new int[1]).toDispatch();
try {
Dispatch.callN(doc, "PrintOut");
System.out.println("打印成功!");
} catch (Exception e) {
e.printStackTrace();
System.out.println("打印失败");
} finally {
try {
if (doc != null) {
Dispatch.call(doc, "Close", new Variant(0));// word文档关闭
}
} catch (Exception e2) {
e2.printStackTrace();
}
// 退出
word.invoke("Quit", new Variant[0]);
// 释放资源
ComThread.Release();
ComThread.quitMainSTA();
}
}
}
需要jar包,导入了一个本地jar包。我放在了resources目录下,可以根据自己的情况,放在任何目录下,只要找到就可以。
<!-- https://mvnrepository.com/artifact/com.jacob/jacob -->
<!-- 导入本地jar 打印 -->
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.19</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/jacob.jar</systemPath>
</dependency>
注意:
本地需要将: jacob-1.19-x64.dll 放到
把dll文件放在%JAVA_HOME%\bin下(注意系统是32位还是64位),
也可以放在C:\Windows\System32下,
如果是64位应该放在C:\Windows\SysWOW64 下。建议放在jdk的bin目录下。