Как распечатать PDF из вашего приложения Winforms в C #

Работать с PDF-файлами так же, как с другими языками программирования, с C # не так просто. К сожалению, большинство библиотек являются коммерческими, и вам нужно будет заплатить за лицензию. Другие библиотеки, такие как Spire PDF, предлагают бесплатную версию библиотеки, однако она поддерживает до 10 страниц на один PDF, и тогда вы увидите сообщение с водяным знаком, что это только для целей тестирования.

Если вы хотите распечатать PDF-файл из приложения Winforms без использования платного API, мы покажем вам 2 обходных пути, которые помогут вам легко распечатать PDF-файл.

А. Использование Adobe Acrobat

Первый способ требует, чтобы у вас был установлен Adobe Acrobat. Обычно на каждом компьютере есть программа для чтения PDF-файлов, а именно Acrobat Reader, поэтому убедитесь, что у вас установлен этот PDF-ридер.

Этот метод рекомендуется, поскольку он позволяет пользователю выбирать, какие страницы печатать, какой принтер использовать и другие настройки с помощью собственного диалогового окна печати:

using System.Diagnostics;
using System.Threading;
public void printPDFWithAcrobat()
{
string Filepath = @"C:\Users\sdkca\Desktop\path-to-your-pdf\pdf-sample.pdf";
using (PrintDialog Dialog = new PrintDialog())
{
Dialog.ShowDialog();
ProcessStartInfo printProcessInfo = new ProcessStartInfo()
{
Verb = "print",
CreateNoWindow = true,
FileName = Filepath,
WindowStyle = ProcessWindowStyle.Hidden
};
Process printProcess = new Process();
printProcess.StartInfo = printProcessInfo;
printProcess.Start();
printProcess.WaitForInputIdle();
Thread.Sleep(3000);
if (false == printProcess.CloseMainWindow())
{
printProcess.Kill();
}
}
}

Этот код запускает команду печати в скрытой командной строке и отображает диалоговое окно печати системы:

Диалог печати Windows C # Winforms

В некоторых версиях Windows Acrobat Reader может запуститься на секунду, но он будет автоматически закрыт после нажатия кнопки «ОК» и файл будет напечатан.

Б. Использование пакета RawPrint

Если вы не хотите использовать Acrobat Reader, вы можете использовать специальный пакет, который отправляет файл непосредственно на принтер. Мы говорим о пакете RawPrint. RawPrint — это библиотека для отправки файлов непосредственно на принтер Windows, минуя драйвер принтера, она может отправлять PostScript, PCL или другие типы файлов печати непосредственно на принтер.

Чтобы установить эту библиотеку в свой проект, вы можете использовать менеджер пакетов NuGet в Visual Studio. Перейдите в обозреватель решений проекта в Visual Studio и щелкните правой кнопкой мыши свой проект, в списке выберите опцию Manage NuGet Packages:

Как только появится менеджер, найдите библиотеку RawPrint, выберите (вероятно) первый вариант Тони Эджкомба и нажмите «Установить»:

После установки вы сможете использовать класс RawPrint в своем проекте. Для получения дополнительной информации об этой библиотеке, пожалуйста, посетите официальный репозиторий на Github здесь.

1. Перечислите имена принтеров

Рекомендуется перечислить все доступные принтеры в каком-либо поле со списком, поэтому пользователю нужно только выбрать нужный принтер, а затем распечатать его. Вы можете перечислить все доступные принтеры, используя Свойство InstalledPrinters в типе PrinterSettings:

foreach (string printerName in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
Console.WriteLine(printerName);
}
/** Outputs something like:
Send To OneNote 2016
Microsoft XPS Document Writer
Microsoft Print to PDF
Fax
Brother HL-3172CDW series Printer
*/

Чтобы использовать методы RawPrint, вам необходимо указать, какой принтер использовать. Единственный способ указать, какое из них использовать — это имя, поэтому перед отправкой файла на печать обязательно укажите имя принтера. В нашем случае у нас есть настоящий принтер Brother, поэтому мы будем использовать его в этом примере.

2. Печать PDF

Чтобы распечатать PDF-файл из файла, вам нужно только использовать метод PrintRawFile из экземпляра RawPrint. Этот метод ожидает в качестве первого аргумента имя принтера, который вы хотите использовать для печати файла, в качестве второго аргумента — абсолютный путь к файлу PDF (включая имя файла), который вы хотите распечатать, а в качестве последнего аргумента — имя тот же файл. Этот последний аргумент используется только для отображения его в качестве имени в очереди:

// Include the namespace of the library
using RawPrint;
///
/// Prints a PDF using its RAW data directly to the printer. It requires the nuGET package RawPrint
///
public void printPDF()
{
// Absolute path to your PDF to print (with filename)
string Filepath = @"C:\Users\sdkca\Desktop\path-to-file\pdf-sample.pdf";
// The name of the PDF that will be printed (just to be shown in the print queue)
string Filename = "pdf-sample.pdf";
// The name of the printer that you want to use
// Note: Check step 1 from the B alternative to see how to list
// the names of all the available printers with C#
string PrinterName = "Brother HL-3172CDW series Printer";
// Create an instance of the Printer
IPrinter printer = new Printer();
// Print the file
printer.PrintRawFile(PrinterName, Filepath, Filename);
}

Если вы выполнили предыдущий код и файл существует, принтер теперь должен выполнить свою работу.

Ссылка на основную публикацию
Adblock
detector