Распечатайте существующий PDF (или другие файлы) в C #

Из приложения, которое я создаю, мне нужно распечатать существующие файлы PDF (созданные другим приложением). Как я могу сделать это на C # и предоставить механизм, чтобы пользователь мог выбрать другой принтер или другие свойства.

Я посмотрел на PrintDialog, но не уверен, какой файл он пытается распечатать, если есть, b / c вывод всегда пустой. Может быть, я просто что-то пропустил.

Нужно ли использовать «iTextSharp» (как было предложено еще где)? Мне кажется странным, так как я могу «отправить файл на принтер». У меня просто нет хорошего диалога перед установкой принтера и т. Д., И я действительно не хочу писать диалог печати с нуля но, похоже, многие примеры, которые я нашел, искали именно так.

Любые советы, примеры или примеры кода были бы замечательными!

Также, если PDF является проблемой, файлы могут быть созданы другим приложением в формате diff, таком как bitmap или png, если это упростит ситуацию.

Отобразите небольшое диалоговое окно с полем со списком, в котором его элементы установлены в коллекцию строк, возвращаемую PrinterSettings.InstalledPrinters .

Если вы можете сделать это требование о том, чтобы GSView был установлен на компьютере, вы можете затем тихо распечатать PDF-файл. Это немного медленно и круто, но по крайней мере вам не нужно всплывать Acrobat.

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

  private void PrintFormPdfData(byte[] formPdfData) { 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); } } 

Как вы можете видеть, он берет данные PDF в виде байтового массива, записывает его в временный файл и запускает gsprint.exe, чтобы печатать файл молча на именованный принтер («HP Laserjet 5M»). Вы можете заменить имя принтера тем, что пользователь выбрал в вашем диалоговом окне.

Печать PNG или GIF будет намного проще – просто расширьте class PrintDocument и используйте обычный диалог печати, предоставляемый Windows Forms.

Удачи!

Хотя это VB, вы можете легко перевести его. Кстати, Adobe не всплывает, она печатает только PDF, а затем уходит.

 '''  ''' Start Adobe Process to print document '''  '''  '''  Private Function printDoc(ByVal p As PrintObj) As PrintObj Dim myProcess As New Process() Dim myProcessStartInfo As New ProcessStartInfo(adobePath) Dim errMsg As String = String.Empty Dim outFile As String = String.Empty myProcessStartInfo.UseShellExecute = False myProcessStartInfo.RedirectStandardOutput = True myProcessStartInfo.RedirectStandardError = True Try If canIprintFile(p.sourceFolder & p.sourceFileName) Then isAdobeRunning(p)'Make sure Adobe is not running; wait till it's done Try myProcessStartInfo.Arguments = " /t " & """" & p.sourceFolder & p.sourceFileName & """" & " " & """" & p.destination & """" myProcess.StartInfo = myProcessStartInfo myProcess.Start() myProcess.CloseMainWindow() isAdobeRunning(p) myProcess.Dispose() Catch ex As Exception End Try p.result = "OK" Else p.result = "The file that the Document Printer is tryng to print is missing." sendMailNotification("The file that the Document Printer is tryng to print" & vbCrLf & _ "is missing. The file in question is: " & vbCrLf & _ p.sourceFolder & p.sourceFileName, p) End If Catch ex As Exception p.result = ex.Message sendMailNotification(ex.Message, p) Finally myProcess.Dispose() End Try Return p End Function 

Вам понадобится Acrobat или другое приложение, которое может печатать PDF. Оттуда вы выполните P / Invoke в ShellExecute, чтобы распечатать документ.

Вы также можете использовать PDFsharp – это библиотека с открытым исходным кодом для создания и управления PDF-файлами. http://www.pdfsharp.net/

Я делаю то же самое для своего проекта, и это сработало для меня

Посмотрите, может ли это помочь вам …

 Process p = new Process(); p.EnableRaisingEvents = true; //Important line of code p.StartInfo = new ProcessStartInfo() { CreateNoWindow = true, Verb = "print", FileName = file, Arguments = "/d:"+printDialog1.PrinterSettings.PrinterName }; try { p.Start(); } catch { /* your fallback code */ } 

Вы также можете играть с различными вариантами окон

PRINT для получения желаемого результата … Ссылка ссылки

После долгих исследований и поиска в Google по этой задаче Microsoft выпустила большой КБ для печати PDF без каких-либо других необходимых приложений. Не нужно вызывать adobe или ghostprint. Он может печатать без сохранения файла на диск, что облегчает жизнь.

http://support2.microsoft.com/?kbid=322091

  • Как создать печатную страницу Twitter-Bootstrap
  • Печать значка jLabel в принтере с помощью кнопки
  • «Тихая» печать в веб-приложении
  • Написание виртуального принтера в .NET
  • Как я могу подключиться к печати в Perl?
  • Печать QTableView
  • Как создать метод println / print для пользовательского classа
  • Показывать DataFrame как таблицу в iPython Notebook
  • Как печатать значения из элемента управления DataGridView
  • Как распечатать PDF на сетевом принтере по умолчанию с помощью команды оболочки GhostScript (gswin32c.exe)
  • Как программно печатать в PDF-файл без запроса имени файла в C # с помощью принтера Microsoft Print To PDF, который поставляется с Windows 10
  • Давайте будем гением компьютера.