Home / Blog / WPF PDF viewer en printing
WPF PDF viewer en printing

WPF PDF viewer en printing

Voor een project heb ik een C# .net oplossing nodig voor PDF documenten die server side gegenereerd worden en in de WPF client getoond en geprint worden. Een vereiste is dat het document in de WPF applicatie getoond wordt. En ook silent printen mogelijk is ofwel printen zonder weergave van het document.

Het Telerik  WPF control RadPdfViewer is hier uitermate geschikt voor.

http://www.telerik.com/products/wpf/pdf-viewer.aspx

Het aanbieden van een pdf document in de vorm van een byte[] ontvangen via WCF gaat eenvoudig:

 

private void ShowDocument(byte[] documentAsByteArray)
{
	Stream str = new MemoryStream(documentAsByteArray);
	pdfViewer.DocumentSource = new PdfDocumentSource(str);
}

 

Printen naar de standaardprinter zonder weergave gaat met een paar regels code:

private void PrintDocument(byte[] documentAsByteArray)
{
	Stream str = new MemoryStream(documentAsByteArray);
	var rdPdfViewerPrint = new RadPdfViewer();
	var prvdPdfPrint = new PdfFormatProvider(str, 
		Telerik.Windows.Documents.Fixed.FormatProviders.FormatProviderSettings.ReadOnDemand);
	rdPdfViewerPrint.Document = prvdPdfPrint.Import();
	rdPdfViewerPrint.Print(new PrintSettings(@"Document", true));
}

 

Printen naar een andere printer kan door gebruik te maken van de PrintDialog class

private void PrintDocument(byte[] documentAsByteArray, string printerName)
{
  Stream str = new MemoryStream(documentAsByteArray);
  var rdPdfViewerPrint = new RadPdfViewer();
  var prvdPdfPrint = new PdfFormatProvider(str, 
    Telerik.Windows.Documents.Fixed.FormatProviders.FormatProviderSettings.ReadOnDemand);
  rdPdfViewerPrint.Document = prvdPdfPrint.Import();

  var queue = new LocalPrintServer().GetPrintQueue(printerName);
 var dialog = new PrintDialog();
 dialog.PrintQueue = queue;
 var defaultPrintTicket = queue.DefaultPrintTicket;
 rdPdfViewerPrint.Print(dialog, new PrintSettings(@"Document", false));
}