站长手记 - 站长手记
打印】【收藏此页
Acrobat虚拟PDF打印机执行打印时挂起,解决办法竟然是删注册表项。
作者:本站:苏信东  来源:WaveCN.com 世纪音频  发布日期:2013-03-06  最后修改日期:2013-03-06  

由于工作需要,购买了一套正版的(没错,我特意强调这点)的Acrobat 9,安装在一台计算机上专门用来进行文档转PDF的自动化过程。转换工作是通过Acrobat的PDF虚拟打印机来完成的,工作了几年,一切良好。

本来在正常情况下,PDF虚拟打印机被设置为默认在C盘根目录下面创建PDF文件,不提示输出文件名。但突然PDF虚拟打印机就不工作了,不向指定的位置输出PDF文件,而是自动改为向当前用户的“我的文档”位置输出,不过,更糟糕的是,它一旦出现创建进度对话框后就停住了,没有任何PDF文件被实际生成。除非手工杀掉Acrotray.exe进程,否则那个创建进度对话框就一直停留在那里。

重启计算机,故障依旧。

心想,问题出在那里呢。这种故障太莫名其妙了。仔细观察那个停住不动的创建进度框(平时正常工作时,这个创建进度框一闪而过从来都没去管过),发现了一件事情:进度框里面的“文档名称”下拉框是可以点击的,点击后可以看到大量之前生成的文档的文件名。

 

创建PDF进度对话框

(这个截图是正常工作情况的,排障时只顾着找原因,没截下来)

这样啊,是否有打印任务没有完成导致堵塞呢,于是查看Windows的打印任务池:

C:\Windows\System32\spool\PRINTERS

但是,里面空空如也。

看来不是这个问题。那么,估计问题可能还是在PDF虚拟打印机的设置上。于是进去注册表,首先检查了打印机的设置,位于

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Adobe PDF

根据经验检查了一下,看上去都正常。那么问题不在打印机上,那就有可能是Distiller的问题了。这里顺便解释一下,Acrobat Distiller是Acrobat里面的一个重要部件,是负责把用PostScript描述的页面数据转换为PDF格式的。

Adobe Distiller 9 Splash

于是转去看Distiller的设置,当在注册表里面点到

HKEY_CURRENT_USER\Software\Adobe\Acrobat Distiller\PrinterJobControl

位置时,注册表编辑器整个挂起了。马上可以意识到,这只有两种可能,要么是注册表文件被破坏了,要么就是这个位置下面太多键值!

换了一个第三方的注册表编辑器Registry Workshop(是我用过的最好用的第三方注册表编辑器,下载),转到刚才的位置一看,好家伙,几年来生成的PDF的文件名都在里面,足有26万条(这个数字很正常,自动化生成PDF嘛)键值。这下子问题的的解决方案很清楚了:全部删除。

考虑过直接删除PrinterJobControl项然后重建,不过还是选择了删除键值的方式。结果删除过程之漫长,足足用了2.5个小时。期间搜索了一下这个注册表项,原来Adobe有解释的:

http://livedocs.adobe.com/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat9_HTMLHelp&file=Distiller_WinIntro.61.11.html

大约说的是,这个注册表项用于控制Distiller在生成PDF时不提示生成文档的名称。帮助信息里面说,这个信息在Windows API StartDoc成功执行后就会删除。但是,很明显,这些信息没有被删除,具体原因就不得而知。

删除完毕后,顺便还用Registry Workshop整理了一下注册表,把用户部分的注册表文件从未整理的25M缩小到了1.4M。重启计算机,一切正常了。