我正在使用 VB.Net WinForms。我想调用 Adobe Reader 9 ActiveX 控件来打印一些 PDF。我已经将ActiveX控件添加到VS工具箱中(dll是AcroPDF.dll,COM名称“Adobe PDF Reader”。经过一些实验,以下代码有效。
Dim files As String() = Directory.GetFiles(TextBoxPath.Text, "*.pdf", SearchOption.TopDirectoryOnly)
Using ActiveXPDF As New AxAcroPDFLib.AxAcroPDF
Me.Controls.Add(ActiveXPDF)
ActiveXPDF.Hide()
For Each filename As String In files
ActiveXPDF.LoadFile(filename)
ActiveXPDF.printAll()
'Begin Yukky Hack '
Dim endTime As Date = DateAdd(DateInterval.Second, 20, Now)
Do While Now < endTime
My.Application.DoEvents()
Loop
'End Yuk '
Next
End Using
如果没有 Yuk 位,这只会打印一些 PDF,看来 End using 语句在完成打印之前正在调用控件上的 dispose。
因此,对 printAll 的调用似乎是非阻塞的,但我找不到可以查询以查看打印假脱机是否已完成的回调或状态属性。我缺少一个属性/方法,或者是否有更优雅(且响应更快)的解决方法?
使用此方法打印多个文档的效果并不像您所发现的那样好。
让它工作是相当棘手的,但这里是解决方案的一般描述。
我使用 System.Diagnostics.Process 使用 myProcess.StartInfo.Verb = "Print" 进行打印
然后,我分两步检查打印机队列的状态和状态,以确保打印已准备就绪,可以打印下一个文档。使用 WMI 和 ManagementObjectSearcher 通过“SELECT * FROM Win32_Printer”枚举打印机信息。
逻辑是,我尝试在继续打印下一个之前查看假脱机是否已启动。
See http://msdn.microsoft.com/en-us/library/aa394363.aspx对于 Win32_Printer WMI 类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)