Работа с печатью PDF - Фасады
Печать PDF файла на принтер по умолчанию с использованием настроек принтера и страницы
Сначала документ преобразуется в изображение, а затем печатается на принтере. Мы создаем экземпляр класса PdfViewer, который позволяет печатать PDF файл на принтер по умолчанию, используя метод BindPdf для документа, и делаем определенные настройки. В нашем примере мы используем формат A4, портретную ориентацию. В printerSettings, в первую очередь, указываем имя принтера, на который мы печатаем. В противном случае он будет печатать на принтер по умолчанию. Далее указываем количество копий, которые нам нужны.
public static void PrintingPDFFile()
{
// Создать объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открыть входной PDF файл
viewer.BindPdf(_dataDir + "sample.pdf");
// Установить атрибуты для печати
viewer.AutoResize = true; // Печатать файл с подогнанным размером
viewer.AutoRotate = true; // Печатать файл с подогнанным поворотом
viewer.PrintPageDialog = false; // Не выводить диалог с номером страницы при печати
// Создать объекты для настроек принтера и страницы и PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();
// Установить имя принтера
ps.PrinterName = prtdoc.PrinterSettings.PrinterName;
// Установить размер страницы (если необходимо)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Установить поля страницы (если необходимо)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Печатать документ, используя настройки принтера и страницы
viewer.PrintDocumentWithSettings(pgs, ps);
// Закрыть PDF файл после печати
viewer.Close();
}
Для отображения диалогового окна печати попробуйте использовать следующий фрагмент кода:
public static void PrintingPDFDisplayPrintDialog()
{
// Создать объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открыть входной PDF файл
viewer.BindPdf(_dataDir + "sample.pdf");
// Установить атрибуты для печати
viewer.AutoResize = true; // Печать файла с измененным размером
viewer.AutoRotate = true; // Печать файла с измененным поворотом
// Создать объекты для настроек принтера, страницы и документа для печати
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings
{
// Установить размер страницы (если требуется)
PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169),
// Установить поля страницы (если требуется)
Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0)
};
System.Windows.Forms.PrintDialog printDialog = new System.Windows.Forms.PrintDialog();
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// Код для печати документа здесь
// Печать документа с использованием настроек принтера и страницы
System.Drawing.Printing.PrinterSettings ps = printDialog.PrinterSettings;
viewer.PrintDocumentWithSettings(pgs, ps);
}
// Закрыть PDF файл после печати
viewer.Close();
}
Печать PDF на виртуальный принтер
Существуют принтеры, которые печатают в файл. Мы задаем имя виртуального принтера и, по аналогии с предыдущим примером, выполняем настройки.
public static void PrintingPDFToSoftPrinter()
{
// Создаем объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открываем входной PDF файл
viewer.BindPdf(_dataDir + "sample.pdf");
// Устанавливаем параметры для печати
viewer.AutoResize = true; // Печать файла с подогнанным размером
viewer.AutoRotate = true; // Печать файла с подогнанным поворотом
viewer.PrintPageDialog = false; // Не выводить диалог номера страницы при печати
viewer.PrintAsImage = false;
// Создаем объекты для настроек принтера и страницы и PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Устанавливаем имя принтера
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Или устанавливаем PDF принтер
//ps.PrinterName = "Adobe PDF";
// Устанавливаем размер страницы (если требуется)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Устанавливаем поля страницы (если требуется)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Печатаем документ с использованием настроек принтера и страницы
viewer.PrintDocumentWithSettings(pgs, ps);
// Закрываем PDF файл после печати
viewer.Close();
}
Скрытие диалогового окна печати
Aspose.PDF для .NET позволяет скрыть диалоговое окно печати. Для этого используйте метод PrintPageDialog.
Следующий фрагмент кода показывает, как скрыть диалоговое окно печати.
public static void PrintingPDFHidePrintDialog()
{
// Создать объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открыть входной PDF файл
viewer.BindPdf(_dataDir + "sample.pdf");
// Установить атрибуты для печати
viewer.AutoResize = true; // Печатать файл с подогнанным размером
viewer.AutoRotate = true; // Печатать файл с подогнанным вращением
viewer.PrintPageDialog = false; // Не показывать диалоговое окно с номером страницы при печати
// Создать объекты для настроек принтера и страницы и PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Установить имя принтера XPS/PDF
ps.PrinterName = "OneNote for Windows 10";
// Установить размер страницы (если требуется)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Установить поля страницы (если требуется)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Печатать документ, используя настройки принтера и страницы
viewer.PrintDocumentWithSettings(pgs, ps);
// Закрыть PDF файл после печати
viewer.Close();
}
Печать цветного PDF в файл XPS в оттенках серого
Цветной PDF-документ можно напечатать на XPS-принтере в оттенках серого, используя PdfViewer. Для этого нужно использовать свойство PdfViewer.PrintAsGrayscale и установить его в true. Следующий фрагмент кода демонстрирует реализацию свойства PdfViewer.PrintAsGrayscale.
public static void PrintingPDFasGrayscale()
{
// Создать объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открыть входной PDF файл
viewer.BindPdf(_dataDir + "sample.pdf");
// Установить атрибуты для печати
viewer.AutoResize = true; // Печать файла с подогнанным размером
viewer.AutoRotate = true; // Печать файла с подогнанным поворотом
viewer.PrintPageDialog = false; // Не выводить диалоговое окно с номером страницы при печати
viewer.PrintAsGrayscale = false;
// Создать объекты для настроек принтера и страницы и PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Установить имя XPS/PDF принтера
ps.PrinterName = "OneNote for Windows 10";
// Установить размер страницы (если требуется)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Установить поля страницы (если требуется)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Напечатать документ, используя настройки принтера и страницы
viewer.PrintDocumentWithSettings(pgs, ps);
// Закрыть PDF файл после печати
viewer.Close();
}
PDF to PostScript conversion
Класс PdfViewer предоставляет возможность печати PDF документов, и с помощью этого класса мы также можем конвертировать PDF файлы в формат PostScript. Чтобы преобразовать PDF файл в PostScript, сначала установите любой PS принтер и просто распечатайте файл с помощью PdfViewer.
Следующий фрагмент кода показывает, как распечатать и конвертировать PDF в формат PostScript.
public static void PrintingPDFToPostScript()
{
// Создать объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открыть входной PDF файл
viewer.BindPdf(_dataDir + "sample.pdf");
// Установить атрибуты для печати
viewer.AutoResize = true; // Печать файла с измененным размером
viewer.AutoRotate = true; // Печать файла с измененным поворотом
viewer.PrintPageDialog = false; // Не отображать диалог номера страницы при печати
viewer.PrintAsImage = false;
// Создать объекты для настроек принтера и страницы и PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Установить имя XPS/PDF принтера
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Установить имя выходного файла и атрибут PrintToFile
ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
ps.PrintToFile = true;
// Установить размер страницы (если необходимо)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Установить поля страницы (если необходимо)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Печать документа с использованием настроек принтера и страницы
viewer.PrintDocumentWithSettings(pgs, ps);
// Закрыть PDF файл после печати
viewer.Close();
}
Проверка статуса задания на печать
PDF-файл может быть распечатан на физическом принтере, а также с помощью Microsoft XPS Document Writer, без отображения диалога печати, с использованием класса PdfViewer. При печати больших PDF-файлов процесс может занять много времени, поэтому пользователь может не быть уверен в том, завершился ли процесс печати или возникла проблема. Чтобы определить статус задания на печать, используйте свойство PrintStatus. Следующий фрагмент кода показывает, как распечатать PDF-файл в XPS-файл и получить статус печати.
public static void CheckingPrintJobStatus()
{
// Создать объект PdfViewer
PdfViewer viewer = new PdfViewer();
// Открыть входной PDF-файл
viewer.BindPdf(_dataDir + "sample1.pdf");
// Установить атрибуты для печати
viewer.AutoResize = true; // Печать файла с настроенным размером
viewer.AutoRotate = true; // Печать файла с настроенной ориентацией
viewer.PrintPageDialog = false; // Не отображать диалог номера страницы при печати
viewer.PrintAsImage = false;
// Создать объекты для настроек принтера и страницы и PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Установить имя принтера XPS/PDF
ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
// Установить имя выходного файла и атрибут PrintToFile
ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
ps.PrintToFile = true;
// Установить размер страницы (если необходимо)
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
// Установить поля страницы (если необходимо)
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
// Печать документа с использованием настроек принтера и страницы
viewer.PrintDocumentWithSettings(pgs, ps);
// Проверить статус печати
if (viewer.PrintStatus != null && viewer.PrintStatus is Exception ex)
{
Console.WriteLine(ex.Message);
}
else
{
// Ошибок не найдено. Задание на печать выполнено успешно
Console.WriteLine("Печать завершена без проблем..");
}
// Закрыть PDF-файл после печати
viewer.Close();
}
struct PrintingJobSettings
{
public int ToPage { get; set; }
public int FromPage { get; set; }
public string OutputFile { get; set; }
public System.Drawing.Printing.Duplex Mode { get; set; }
}
Печать страниц в режимах Simplex и Duplex
В конкретной задаче печати страницы PDF документа могут быть напечатаны либо в режиме Duplex, либо в режиме Simplex, но вы не можете печатать одни страницы как simplex, а другие как duplex в рамках одной печатной задачи. Тем не менее, для выполнения этого требования можно использовать разные диапазоны страниц и объект PrintingJobSettings. Следующий фрагмент кода показывает, как напечатать некоторые страницы PDF файла в режиме Simplex, а некоторые страницы в режиме Duplex.
public static void PrintingPagesInSimplexAndDuplexMode()
{
int printingJobIndex = 0;
string inPdf = _dataDir + "sample-8page.pdf";
string output = _dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings
{
FromPage = 1,
ToPage = 3,
OutputFile = output + "sample_1_3.xps",
Mode = Duplex.Default
};
printingJobs.Add(printingJob1);
PrintingJobSettings printingJob2 = new PrintingJobSettings
{
FromPage = 4,
ToPage = 6,
OutputFile = output + "sample_4_6.xps",
Mode = Duplex.Simplex
};
printingJobs.Add(printingJob2);
PrintingJobSettings printingJob3 = new PrintingJobSettings
{
FromPage = 7,
ToPage = 7,
OutputFile = output + "sample_7.xps",
Mode = Duplex.Default
};
printingJobs.Add(printingJob3);
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(inPdf);
viewer.AutoResize = true;
viewer.AutoRotate = true;
viewer.PrintPageDialog = false;
PrinterSettings ps = new PrinterSettings();
PageSettings pgs = new PageSettings();
ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
ps.PrintToFile = true;
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage;
ps.Duplex = printingJobs[printingJobIndex].Mode;
ps.PrintRange = PrintRange.SomePages;
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
viewer.EndPrint += (sender, args) =>
{
if (++printingJobIndex < printingJobs.Count)
{
ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
ps.FromPage = printingJobs[printingJobIndex].FromPage;
ps.ToPage = printingJobs[printingJobIndex].ToPage;
ps.Duplex = printingJobs[printingJobIndex].Mode;
viewer.PrintDocumentWithSettings(pgs, ps);
}
};
viewer.PrintDocumentWithSettings(pgs, ps);
}