5

由于我现在无法进入的原因,我需要防止在我尝试打印文档时打开 Adob​​e Reader 窗口。在我之前从事此工作的开发人员设置了以下标志,尽管我不确定它们的用途 -

if (RegistryManager.GetAcrobatVersion() >= 9.0f)
    printerArg = "\"" + printerName + "\"";
else
    printerArg = printerName;

Process myProc = new Process();
myProc.StartInfo.FileName = fileName;
myProc.StartInfo.Verb = "printto";
myProc.StartInfo.UseShellExecute = true;
myProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myProc.StartInfo.CreateNoWindow = true;
myProc.StartInfo.Arguments = "\"" + printerName + "\"";


bool result = myProc.Start();


if (myProc.WaitForInputIdle())
{
    if (!myProc.HasExited)
    {
        myProc.WaitForExit(Convert.ToInt32(5000));
        myProc.Kill();
    }
}
myProc.Close();

任何帮助深表感谢!

谢谢,
泰加。

4

3 回答 3

6

虽然我无法具体回答您的问题,但我发现我无法做到这一点,因为我认为 Adob​​e 在版本 9 或 10 中更改了 Reader,因此您无法抑制打印对话框,并且窗口本身仍然不断出现,而且由于我的用户都安装了不同版本的 Reader,我无法让任何东西始终如一地工作。如果您想尝试查看 Reader's API - 您需要添加对正确 COM 库的引用并从那里开始。痛苦。

我最终通过GhostScript运行 PDF 完全放弃了 Adob ​​e 。以下是我为完成这项工作而创建的助手类。gsExePath应该是这样的C:\Program Files\gs\gs8.71\bin\gswin32c.exe

public class GSInterface
{
    public string GhostScriptExePath { get; private set; }

    public GSInterface(string gsExePath)
    {
        this.GhostScriptExePath = gsExePath;
    }

    public virtual void CallGhostScript(string[] args)
    {
        var p = new Process();
        p.StartInfo.FileName = this.GhostScriptExePath;
        p.StartInfo.Arguments = string.Join(" ", args);
        p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

        p.Start();
        p.WaitForExit();
    }


    public void Print(string filename, string printerName)
    {
        this.CallGhostScript(new string[] {
            "-q",
            "-sDEVICE=mswinpr2",
            "-sPAPERSIZE=a4",
            "-dNOPAUSE",
            "-dNoCancel",
            "-dBATCH",
            "-dDuplex",
            string.Format(@"-sOutputFile=""\\spool\{0}""", printerName),
            string.Format(@"""{0}""", filename)
        });
    }
}

以下应打印到 Windows 默认打印机:

var printerName = new System.Drawing.Printing.PrinterSettings().PrinterName;
var gs = new GSInterface(gsExePath);
gs.Print(filename, printername);
于 2011-04-01T03:35:16.413 回答
2

这可能仅适用于我工作的计算机,或者更广泛地说,适用于安装了 Windows 7 的 PC 上的此版本 Adob​​e (10),但每次打印到 .通过执行以下操作在任何其他应用程序中生成 pdf:

控制面板 >(设备和)打印机 > 双击“Adobe PDF”> 单击“打印机”>“打印首选项”> 在“Adobe PDF 设置”选项卡中取消选中“查看 Adob​​e PDF 结果”。

于 2011-06-24T18:32:22.097 回答
1

也许使用 Adob​​e Reader 的“/n”参数对您有帮助。至少你的程序保持焦点。但是读者的一个实例保持打开状态。

AcroRd32.exe /n /t ...

请参阅:问题 619158

于 2012-01-10T13:09:15.593 回答