• Home
  • Blog

Archieven

  • april 2025
  • oktober 2024
  • september 2024
  • september 2023
  • maart 2022
  • maart 2021
  • september 2020
  • september 2019
  • februari 2019
  • september 2018
  • september 2016
  • september 2015
Davici
  • Home
  • Blog

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));
}

Tags

.NET Azure C# CTO Database DevOps Docker EDI Git HA IT developement director Microservices PostgreSQL Softwareontwikkeling Visual Studio Windows

Recent Posts

  • Technical Debt: een strategische aanpak voor duurzame softwareontwikkeling

  • How to set timezone in a Docker Windows Container

  • How to install fonts in a Docker Windows Container

  • Why WebView2 Applications Face Issues in the Program Files Folder (And How to Fix Them)

  • ClickOnce signing from Azure DevOps via Azure Key Vault

Tags: .NET,C#

Contact

Breda, Noord-Brabant, Nederland
info@davici.nl
K.v.K. 20099979
Twitter
LinkedIn

OVERIGE

  • Algemene Voorwaarden
  • Privacybeleid
  • Cookiebeleid

Copyright © 2025 — Davici. Alle rechten voorbehouden.

Designed by WPZOOM

Beheer toestemming
Om de beste ervaringen te bieden, gebruiken wij technologieën zoals cookies om informatie over je apparaat op te slaan en/of te raadplegen. Door in te stemmen met deze technologieën kunnen wij gegevens zoals surfgedrag of unieke ID's op deze site verwerken. Als je geen toestemming geeft of uw toestemming intrekt, kan dit een nadelige invloed hebben op bepaalde functies en mogelijkheden.
Functioneel Altijd actief
De technische opslag of toegang is strikt noodzakelijk voor het legitieme doel het gebruik mogelijk te maken van een specifieke dienst waarom de abonnee of gebruiker uitdrukkelijk heeft gevraagd, of met als enig doel de uitvoering van de transmissie van een communicatie over een elektronisch communicatienetwerk.
Voorkeuren
De technische opslag of toegang is noodzakelijk voor het legitieme doel voorkeuren op te slaan die niet door de abonnee of gebruiker zijn aangevraagd.
Statistieken
De technische opslag of toegang die uitsluitend voor statistische doeleinden wordt gebruikt. De technische opslag of toegang die uitsluitend wordt gebruikt voor anonieme statistische doeleinden. Zonder dagvaarding, vrijwillige naleving door je Internet Service Provider, of aanvullende gegevens van een derde partij, kan informatie die alleen voor dit doel wordt opgeslagen of opgehaald gewoonlijk niet worden gebruikt om je te identificeren.
Marketing
De technische opslag of toegang is nodig om gebruikersprofielen op te stellen voor het verzenden van reclame, of om de gebruiker op een site of over verschillende sites te volgen voor soortgelijke marketingdoeleinden.
Beheer opties Beheer diensten Beheer {vendor_count} leveranciers Lees meer over deze doeleinden
Bekijk voorkeuren
{title} {title} {title}