当使用acrobat在C#中静默打印一个pdf时,我有两个问题。我正在使用Process.Start()打印pdfs。
第一个问题是,如果不指定可执行文件的完整路径,我就无法启动Acrobat。我想当您安装它时,它不会添加到您的路径中。有没有一种简单的方法可以在机器上启动最新版本的acrobat而不指定完整的路径名?,我担心客户端会进行更新并破坏启动它的代码。我还关心他们在windows不同版本的机器上安装这个(在64位环境中安装路径与32位不同)。
我的第二个问题是,每当我启动acrobat并打印时,它仍然会打开acrobat窗口。我认为我使用的命令行参数会抑制所有这些,但显然不是。
我试图用以下语法从命令行启动acrobat:
C:\Program (x86)\Adobe\Reader 10.0\Reader>AcroRd32.exe /t "Label.pdf“HP4000”HP LaserJet 4100 Series PCL6“"out.pdf"
它打印得很好,但仍然留下杂技窗口。除了以编程方式终止进程外,还有其他解决方案吗?
发布于 2011-02-02 14:43:02
最后,我在这里使用Acrobat,并与FoxIt阅读器 (免费pdf阅读器)一起完成我的pdf打印。这是我用来通过FoxIt在C#中打印的代码:
Process pdfProcess = new Process();
pdfProcess.StartInfo.FileName = @"C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe";
pdfProcess.StartInfo.Arguments = string.Format(@"-p {0}", fileNameToSave);
pdfProcess.Start();上述代码打印到默认打印机,但有命令行参数可用于指定文件和打印机。您可以使用以下语法:
Foxit Reader.exe -t "pdf文件名“”打印机名称“
更新:
显然,早期版本的杂技也没有上述问题。如果您使用的是更旧的版本(4.x或类似的版本),则不会出现此问题。
有些打印机也支持原生pdf打印,因此可以将原始pdf数据发送到打印机,并且可能会打印出来。有关向打印机发送原始数据,请参见https://support.microsoft.com/en-us/kb/322091。
更新2
在我们的软件的后期版本中,我们最终使用了付费产品:
http://www.pdfprinting.net/
发布于 2015-03-05 07:47:15
尼克的回答在我看来不错,所以我把它翻译成了c#。它起作用了!
using System.Diagnostics;
namespace Whatever
{
static class pdfPrint
{
public static void pdfTest(string pdfFileName)
{
string processFilename = Microsoft.Win32.Registry.LocalMachine
.OpenSubKey("Software")
.OpenSubKey("Microsoft")
.OpenSubKey("Windows")
.OpenSubKey("CurrentVersion")
.OpenSubKey("App Paths")
.OpenSubKey("AcroRd32.exe")
.GetValue(String.Empty).ToString();
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "print";
info.FileName = processFilename;
info.Arguments = String.Format("/p /h {0}", pdfFileName);
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
//(It won't be hidden anyway... thanks Adobe!)
info.UseShellExecute = false;
Process p = Process.Start(info);
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
int counter = 0;
while (!p.HasExited)
{
System.Threading.Thread.Sleep(1000);
counter += 1;
if (counter == 5) break;
}
if (!p.HasExited)
{
p.CloseMainWindow();
p.Kill();
}
}
}}
发布于 2016-01-29 09:59:21
我试过Adobe和Foxit都没有运气。目前的两种版本都非常喜欢弹出窗口并让进程运行。最后使用了苏门答腊PDF,这是非常不引人注目的。这是我使用的代码。当打印完成时,没有任何窗口和进程的痕迹很好地退出。
public static void SumatraPrint(string pdfFile, string printer)
{
var exePath = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Windows\CurrentVersion" +
@"\App Paths\SumatraPDF.exe").GetValue("").ToString();
var args = $"-print-to \"{printer}\" {pdfFile}";
var process = Process.Start(exePath, args);
process.WaitForExit();
}https://stackoverflow.com/questions/4868982
复制相似问题