2015-07-14 3 views
0

Я попробовал этот код для PDF печати, но при Adobe Reader открыть это дает ошибку,Прямая печать PDF с помощью Adobe Reader

файлы и каталоги не могут найти

код работает отлично и открывает Adobe, но не загружает файл для печати. Вместо этого отображается диалоговое окно с ошибкой. Может ли кто-нибудь сказать мне, где я ошибаюсь?

private void PrintFormPdfData(byte[] formPdfData) 
    {`enter code here` 
     string tempFile; 

     tempFile = Path.GetTempFileName(); 



     using (FileStream fs = new FileStream(tempFile, FileMode.Create)) 
     { 
      fs.Write(formPdfData, 0, formPdfData.Length); 
      fs.Flush(); 
     } 

     try 
     { 
      string gsArguments; 
      string gsLocation; 
      ProcessStartInfo gsProcessInfo; 
      Process gsProcess; 

      gsArguments = string.Format("-grey -noquery -printer \"HP LaserJet 5M\" \"{0}\"", tempFile); 
      gsLocation = @"C:\Program Files\Ghostgum\gsview\gsprint.exe"; 

      gsProcessInfo = new ProcessStartInfo(); 
      gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      gsProcessInfo.FileName = gsLocation; 
      gsProcessInfo.Arguments = gsArguments; 

      gsProcess = Process.Start(gsProcessInfo); 
      gsProcess.WaitForExit(); 
     } 
     finally 
     { 
      File.Delete(tempFile); 
     } 
    } 
+0

Я не вижу ссылки на считыватель acrobat в вашем коде ... – yms

+1

У вас установлен gsprint? –

ответ

-1

fs.Close() отсутствует. Таким образом, файл не может быть открыт gsprint.

Примечание: Flush before Close бесполезен.

+0

Закрытие выполняется при удалении FileStream. –

+0

Ваше замечание верно, но ничего не гарантирует завершения процедуры до начала процесса gsprint. – Graffito

+0

gsProcess.WaitForExit гарантирует, что этот дочерний процесс (gsprint) будет выполнен перед возвратом. Поэтому файл закрывается, когда gsprint вызывается и удаляется после его возврата. –

Смежные вопросы