Распечатать PDF-файл с помощью Foxit Reader и C#

Моя программа печатает без вывода сообщений через программу чтения PDF Foxit Reader в новом процессе.

Иногда моя программа пытается распечатать два 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 ответ

Убедитесь, что у вас открыт 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.

}

Заметки:

  • Возможно, вам потребуется реализовать очередь, чтобы отслеживать PDF-файлы, ожидающие запуска.

  • Вы также можете предупредить ИТ-поддержку, если Foxit ожидает более 5 или 10 минут работы.

  • Вы можете сделать Processlist атрибута класса, и периодически обновляйте Processlist, используя Timerпо телефону Processlist = Process.GetProcesses().ToList(); на мероприятии Tick. каждые 30 секунд или около того, пока PDF-файл ожидает печати.

Другие вопросы по тегам