为了保障原创作者在本站发表文章的利益, 并维护本站原创的精神, 特声明: RIAShanghai对有以下任何情况之一的文章将不通知作者并直接进行快意删除:
- 非原创, 或者原创但一文多发;
- 各种形式的广告与吹擂;
- 不符合本站文章格式.
欢迎各位读者监督. 谢谢合作. 另: 作为Adobe正式的UG, 我们将把Adobe不定期分发的软件,书籍及各种纪念品赠送给发文活跃的作者, 共同进步.
在Windows下用Java实现静默打印PDF,而又不想用别人的PDF库来打印PDF的,在这里总结两个比较流行的偷懒方法。
支持在Windows cmd下打印PDF的命令有很多。之所以介绍下面的两个方法,是因为其软件使用普及率比较高。
两个方法都要安装一下三方的PDF浏览软件。
分别是利用Acrobat Reader 和 GSview。
Acrobat Reader 方法:
前提是安装 Adobe Reader
代码如下
public static boolean printPdf(String pdfPath){
try{
Runtime.getRuntime().exec("cmd.exe /C start acrord32 /P /h " + pdfPath);
return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}这里调用了Adobe的acrord32.exe方法,相应的,介绍下这个命令的参数。
AcroRd32.exe filename - 执行Adobe Reader,并且浏览PDF
其他还支持的参数有:
AcroRd32.exe /p filename - 执行Adobe Reader,并且打印一个PDF文件
AcroRd32.exe /t path printername drivername portname
初始化Adobe Reader, 不弹出打印对话框,然后结束打印
/t 命令所需的四个参数有
path - 打印文件路径
printername - 打印机名字
drivername - 打印机驱动名字
portname - 打印机端口
其他的参数:
/n 开一个新的Adobe Reader, 尽管有Adobe Reader已经打开 (静默打印不用)
/s 打开一个Adobe Reader不开splash screen
/o 打开一个Adobe Reader不开打开文件对话框
/h 以最小化方式打开一个Adobe Reader (静默打印使用)
GSView 方法:
要使用GSView,我们要首先安装Ghostscript对其进行支持。我们这里提供的版本是
Ghostscript 8.63 for 32-bit Windows
GSView 4.9 Win32 self extracting archive
代码如下
public static boolean printKitchenPdf(String pdfPath){
try{
Runtime.getRuntime().exec("cmd.exe /C \"c:\\Program Files\\Ghostgum\\gsview\\gsprint\" -printer myprinter " + pdfPath);
return true;
}catch(Exception e)
{
e.printStackTrace();
return false;
}
}这里用到的cmd命令是gsprint. -printer 是指定用哪个打印机来进行打印。其它的参数过多,推荐到官方网页进行查看。
值得注意的是,gsprint在命令里面,不能通过参数来设置纸张的大小,只能在Windows的打印机驱动里面设置。
在用Adobe Reader方法指定打印机进行打印时(非默认打印机打印),Adobe Reader总是会从最小化状态变成激活状态,本人不知道用什么方式使Adobe Reader隐藏窗口。推荐用gsview方法来做指定打印机的打印。
回應
Nice tip.
Nice tip. I do not know how to silently print to arbitrary printer using Acrobat reader either, but one possible approach is to create a utility application with the acrobat sdk from adobe and execute this application in either Java or Flex AIR.