Печать PDF в C # - PullRequest
       22

Печать PDF в C #

29 голосов
/ 06 апреля 2011

Я новичок в c #. Я искал во всей сети учебники о том, как печатать PDF, но не смог найти.

Тогда я подумал, возможно ли прочитать его, используя itextpdf, как упомянуто здесь

Чтение содержимого PDF с помощью itextsharp dll в VB.NET или C #

затем распечатайте его. Если да, то как?

Ответы [ 15 ]

51 голосов
/ 06 апреля 2011

Очень простой подход заключается в использовании установленного Adobe Reader или любого другого средства просмотра PDF, способного печатать:

Process p = new Process( );
p.StartInfo = new ProcessStartInfo( )
{
    CreateNoWindow = true,
    Verb = "print",
    FileName = path //put the correct path here
};
p.Start( );

Другой способ - использовать сторонний компонент, например, PDFView4NET

23 голосов
/ 29 июня 2011

я написал очень (!) Маленький вспомогательный метод для adobereader для массовой печати pdf из c # ...:

  public static bool Print(string file, string printer) {
     try {
        Process.Start(
           Registry.LocalMachine.OpenSubKey(
                @"SOFTWARE\Microsoft\Windows\CurrentVersion" +
                @"\App Paths\AcroRd32.exe").GetValue("").ToString(),
           string.Format("/h /t \"{0}\" \"{1}\"", file, printer));
        return true;
     } catch { }
     return false;
  }

нельзя полагаться на возвращаемое значение метода btw ...

9 голосов
/ 06 июля 2011

Другой подход, если вы просто хотите напечатать файл PDF программным способом, это использовать команду LPR: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/lpr.mspx?mfr=true

LPR также доступна в более новых версиях Windows (например, Vista / 7), ноего необходимо включить в дополнительных компонентах Windows.

Например:

Process.Start("LPR -S printerdnsalias -P raw C:\files\file.pdf");

Вы также можете использовать IP-адрес принтера вместо псевдонима.

Это предполагаетчто ваш принтер поддерживает прямую печать PDF , иначе это будет работать только для файлов PostScript и ASCII.Кроме того, на принтере должен быть установлен сетевой интерфейс, и вам необходимо знать его IP-адрес или псевдоним.

6 голосов
/ 27 июля 2015

У меня была такая же проблема при печати файла PDF.Есть пакет nuget под названием Spire.Pdf, который очень прост в использовании.Бесплатная версия имеет ограничение в 10 страниц, однако, в моем случае это было лучшее решение, если я не хочу зависеть от Adobe Reader и не хочу устанавливать какие-либо другие компоненты.

https://www.nuget.org/packages/Spire.PDF/

PdfDocument pdfdocument = new PdfDocument();
pdfdocument.LoadFromFile(pdfPathAndFileName);
pdfdocument.PrinterName = "My Printer";
pdfdocument.PrintDocument.PrinterSettings.Copies = 2;
pdfdocument.PrintDocument.Print();
pdfdocument.Dispose();
3 голосов
/ 08 сентября 2017

Используйте PDFiumViewer. Я долго искал, пока не нашел похожее решение, потом нашел этот чистый кусок кода, который не полагается на отправку необработанных файлов на принтер (что плохо, если их интерпретируют как текстовые файлы ...) или использование Acrobat или Ghostscript в качестве помощника (оба должны быть установлены, что создает трудности):

https://stackoverflow.com/a/41751184/586754

PDFiumViewer поставляется через nuget, приведенный выше пример кода завершен. Передайте нулевые значения для использования принтера по умолчанию.

3 голосов
/ 12 июля 2013

Вы можете создать PDF документ, используя PdfSharp . Это библиотека с открытым исходным кодом .NET.

При попытке распечатать документ еще хуже. Я искал повсюду открытый исходный код способ сделать это. Есть несколько способов сделать это, используя AcroRd32.exe , но все зависит от версии, и это невозможно сделать, если программа Acrobat Reader остается открытой.

Я наконец-то использовал VintaSoftImaging.NET SDK . Это стоит денег, но намного дешевле, чем альтернатива, и это решает проблему очень просто.

var doc = new Vintasoft.Imaging.Print.ImagePrintDocument { DocumentName = @"C:\Test.pdf" };
doc.Print();

Это просто печатает на принтер по умолчанию, не показывая. Есть несколько альтернатив и вариантов.

1 голос
/ 15 июня 2016

Самый простой способ - создать C # Process и запустить внешний инструмент для печати вашего PDF-файла

private static void ExecuteRawFilePrinter() {
    Process process = new Process();
    process.StartInfo.FileName = "c:\\Program Files (x86)\\RawFilePrinter\\RawFilePrinter.exe";
    process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    process.StartInfo.Arguments = string.Format("-p \"c:\\Users\\Me\\Desktop\\mypdffile.pdf\" \"gdn02ptr006\"");
    process.Start();
    process.WaitForExit();
}

Приведенный выше код запускает RawFilePrinter.exe (аналог 2Printer.exe), но с лучшей поддержкой.Это не бесплатно, но сделав пожертвование, вы сможете использовать его везде и распространять вместе с вашим приложением.Последняя версия для загрузки: http://bigdotsoftware.pl/rawfileprinter

1 голос
/ 08 сентября 2015

Советую попробовать инструмент командной строки 2Printer из: http://www.doc2prn.com/

Пример командной строки для печати всех файлов PDF из папки «C: \ Input» приведен ниже. Вы можете просто позвонить из своего кода C #.

2Printer.exe -s "C: \ Input * .PDF" -prn "Принтер серии Canon MP610"

1 голос
/ 08 апреля 2011

Можно использовать Ghostscript для чтения PDF-файлов и печати их на названном принтере.

0 голосов
/ 13 июня 2019

Лучший способ автоматически напечатать pdf из C # - это использовать принтер "direct pdf". Вам просто нужно скопировать файл PDF в сетевое имя принтера. Об остальном позаботится сам принтер.

Скорость в 10 раз быстрее любых других методов. Однако требования предъявляются к модели принтера, поддерживающей прямую печать в формате PDF и имеющей не менее 128 МБ драм, что легко для любого современного принтера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...