使用福昕阅读器和C#打印PDF文件

时间:2017-06-02 20:13:16

标签: c# printing process foxit-reader

我的程序在新进程中通过PDF阅读器Foxit Reader进行静默打印。

有时,我的程序会尝试同时打印两张PDF,导致其中一张PDF无法打印。

这是我的代码:

string filename = "file.pdf";

string fileDir1 = @"C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe";

Process pdfProcess = new Process();
pdfProcess.StartInfo.FileName = fileDir1;
pdfProcess.StartInfo.Arguments = string.Format(@"/t {0} {1}", filename ,"pos-80");
pdfProcess.StartInfo.CreateNoWindow = true;
pdfProcess.StartInfo.WorkingDirectory = Path.GetDirectoryName(fileDir1);
pdfProcess.Start();

if (!pdfProcess.WaitForExit(2500))
{
    pdfProcess.Kill();

}

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

确保你打开Foxit。

using System.Diagnostics;

List<Process> Processlist = Process.GetProcesses().ToList();

这为您提供了当前正在运行的进程的列表。

foreach(Process p in Processlist)
{
    Console.WriteLine("Process " + p.Id + " is named '" + p.ProcessName + "'");

}

运行上面的代码时,您应该在输出窗口中看到Foxit进程的名称。

或者,在foreach行上放置一个断点并将鼠标悬停在列表上以查看所有名称。

bool IsFoxitProcessRunning = false;

foreach(Process p in Processlist)
{
    if(p.ProcessName == "Foxit process name here") //Replace with the name of the foxit process
    {
        IsFoxitProcessRunning  = true;

    }

}

现在,只有在没有运行的情况下才启动新的Foxit进程。

if(!IsFoxitProcessRunning)
{
    //insert code to run next foxit process here.

}

注意:

  • 您可能需要实施一个队列来跟踪等待运行的pdfs。

  • 如果Foxit等待的时间超过5或10分钟,您可能还需要提醒IT支持人员。

  • 您可以选择将Processlist作为类属性,并使用Timer定期刷新Processlist,方法是在Tick事件上调用Processlist = Process.GetProcesses().ToList();。 PDF等待打印时每30秒左右。