首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Acrobat静默打印PDF

用Acrobat静默打印PDF
EN

Stack Overflow用户
提问于 2011-02-01 23:03:31
回答 9查看 73.8K关注 0票数 18

当使用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"

它打印得很好,但仍然留下杂技窗口。除了以编程方式终止进程外,还有其他解决方案吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-02-02 14:43:02

最后,我在这里使用Acrobat,并与FoxIt阅读器 (免费pdf阅读器)一起完成我的pdf打印。这是我用来通过FoxIt在C#中打印的代码:

代码语言:javascript
复制
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/

票数 28
EN

Stack Overflow用户

发布于 2015-03-05 07:47:15

尼克的回答在我看来不错,所以我把它翻译成了c#。它起作用了!

代码语言:javascript
复制
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();
        }
    }
}

}

票数 9
EN

Stack Overflow用户

发布于 2016-01-29 09:59:21

我试过Adobe和Foxit都没有运气。目前的两种版本都非常喜欢弹出窗口并让进程运行。最后使用了苏门答腊PDF,这是非常不引人注目的。这是我使用的代码。当打印完成时,没有任何窗口和进程的痕迹很好地退出。

代码语言:javascript
复制
    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();
    }
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4868982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档