2011-12-02 80 views
1

我想从VB.NET程序打印PDF文档。以下代码有效,但打印时出现Adobe空白屏幕。有没有办法抑制这个窗口?在打印时压缩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() 

TIA。

+0

你试过设置CreateNoWindow为真? –

+0

将CreateNoWindow设置为true,但窗口仍然出现 – codematrix

+0

CreateNoWindow只能在控制台应用程序上工作。你唯一的希望是WindowStyle = Hidden。低赔率,Adobe产品被设计为令人讨厌。 –

回答

3

你必须明白,你是不是实际调用的Adobe Acrobat或Adobe Reader在这里,你问的外壳为你做些什么,而外壳会做任何注册表说做的,注册表首先要为程序设置做任何安装程序。

当您设置ProcessStartInfoFileName属性时,您将能够检查Verbs属性并查看该文件扩展名的可用动词。您可以通过HKCL\.pdf下,寻找在注册表中,服用“(默认)”值的音符,在我的情况AcroExch.Document看动词列表.pdf。然后导航到不管它是什么HKCL下,在我的情况下,它HKCL\AcroExch.Document,并期待在shell子项。对于每个动词都有一个命令来运行,这是程序相关的。我的是:

"C:\Program Files\Adobe\Acrobat 9.0\Acrobat\Acrobat.exe" /p /h "%1" 

所以,当你使用“打印”动词时,我“执行”一个PDF,我的PDF传递给上述%1参数。即使我提供了额外的参数,它们也不会被传递,因为这个键只是在寻找一个。

的Acrobat的旧版本支持“自动打印”,但根据this post他们大约8版本中删除出于安全原因。我基本上猜测,Adobe希望人们知道他们的程序何时被调用。另外,因为你要求shell为你做些什么,所以CreateNoWindow是相对于shell而言,而不是shell所做的,所以这对你也不适用。

如果你真的想在无UI进行打印,那么你就需要看实际使用COM或别的东西,以直接对话的Adobe Acrobat或Adobe Reader,或其他程序,如Ghostscript的。