打印时禁止Adobe窗口

时间:2011-12-02 02:10:14

标签: vb.net

我正在尝试从VB.NET程序打印PDF文档。以下代码有效但打印时出现Adobe空白屏幕。有没有办法压制这个窗口?

Dim startInfo As New ProcessStartInfo
startInfo.FileName = "Test.pdf"
startInfo.Verb = "print"
startInfo.Arguments = ""
startInfo.UseShellExecute = True
startInfo.CreateNoWindow = False
Dim report As Process = New Process
report.StartInfo = startInfo
report.Start()

1 个答案:

答案 0 :(得分:3)

你必须明白你实际上并没有在这里调用Adobe Acrobat或Adobe Reader,你要求shell为你做一些事情,而shell将会做任何注册表所要做的事情,并且注册表是首先要为程序设置执行任何安装程序。

当您设置ProcessStartInfo的{​​{1}}属性时,您将能够检查FileName属性并查看该文件扩展名的可用动词。您可以通过查看Verbs下的注册表并注意“(默认)”值(我的案例.pdf)来查看HKCL\.pdf的动词列表。然后导航到AcroExch.Document下的任何内容,在我的情况下为HKCL并查看HKCL\AcroExch.Document子项。对于每个动词,都有一个运行命令,这取决于程序。我的是:

shell

因此,当我使用“print”动词“执行”PDF时,我的PDF将传递给上面的"C:\Program Files\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe" /p /h "%1" 参数。即使我提供了额外的参数,它们也不会被传递,因为这个键只能查找一个。

较早版本的Acrobat支持“静默打印”,但根据this post,出于安全原因,它们已在第8版中删除。我猜基本上Adobe希望人们在调用他们的程序时知道。

另外,因为你要求shell为你做一些事情,%1是相对于shell而不是shell正在做的事情,所以这对你也不起作用。

如果您真的想在没有用户界面的情况下进行打印,那么您需要查看实际使用COM或其他内容直接与Adobe Acrobat或Adobe Reader或其他程序(如Ghostscript)进行对话。