Imprimer un fichier PDF à partir d'ASP.NET directement sur l'imprimante par défaut sans boîte de dialogue d'impression – Bien choisir son serveur d impression
Author: Titanfall —
Short summary: Création / édition de contrôleurs Créez un nouveau contrôleur et nommez-le WebClientPrintAPIController puis copiez / collez le code suivant: Importe Neodynamic.SDK.Web Contrôleurs d'espace de noms Classe publique WebClientPrintAPIController Hérite contrôleur 'GET: WebClientPrintAPI Fonction Index () As ActionResult Vue de retour () Fonction de fin '********************************** ' NOTE IMPORTANTE 'Dans cet exemple, nous stockons des éléments […]
Quick overview
- Site
- Tutos GameServer
- Canonical URL
- https://tutos-gameserver.fr/2019/05/04/imprimer-un-fichier-pdf-a-partir-dasp-net-directement-sur-limprimante-par-defaut-sans-boite-de-dialogue-dimpression-bien-choisir-son-serveur-d-impression/
- LLM HTML version
- https://tutos-gameserver.fr/2019/05/04/imprimer-un-fichier-pdf-a-partir-dasp-net-directement-sur-limprimante-par-defaut-sans-boite-de-dialogue-dimpression-bien-choisir-son-serveur-d-impression/llm
- LLM JSON version
- https://tutos-gameserver.fr/2019/05/04/imprimer-un-fichier-pdf-a-partir-dasp-net-directement-sur-limprimante-par-defaut-sans-boite-de-dialogue-dimpression-bien-choisir-son-serveur-d-impression/llm.json
- Manifest
- https://tutos-gameserver.fr/llm-endpoints-manifest.json
- Estimated reading time
- 6 minutes (335 seconds)
- Word count
- 1116
Key points
- Création / édition de contrôleurs Créez un nouveau contrôleur et nommez-le WebClientPrintAPIController puis copiez / collez le code suivant: Importe Neodynamic.SDK.Web Contrôleurs d'espace de noms Classe publique WebClientPrintAPIController Hérite contrôleur 'GET: WebClientPrintAPI Fonction Index () As ActionResult Vue de retour () Fonction de fin '********************************** ' NOTE IMPORTANTE 'Dans cet exemple, nous stockons des éléments liés aux utilisateurs (comme 'la liste des imprimantes et si elles ont le WCPP 'utilitaire client installé) dans le cache de l'application 'partie objet d'ASP.NET MAIS vous pouvez le changer en 'un autre stockage différent (comme une base de données ou un serveur de fichiers)!
- 'qui sera requis dans les scénarios de Load Balacing '********************************** Public Sub ProcessRequest () 'obtenir l'identifiant de session Dim sessionID As String = (Si (HttpContext.Request ("sid") n'est pas rien, HttpContext.Request ("sid"), rien)) 'obtenir une chaîne de requête Dim queryString As String = HttpContext.Request.Url.Query Essayer 'Déterminer et obtenir le type de demande Dim prType As RequestType = WebClientPrint.GetProcessRequestType (queryString) Si prType = RequestType.GenPrintScript OrElse prType = RequestType.GenWcppDetectScript alors 'Laissez WebClientPrint générer le script demandé Dim script As Byte () = WebClientPrint.GenerateScript (Url.Action ("ProcessRequest", "WebClientPrintAPI", rien, HttpContext.Request.Url.Scheme), queryString) HttpContext.Response.ContentType = "text / javascript" HttpContext.Response.BinaryWrite (script) HttpContext.Response.End () ElseIf prType = RequestType.ClientSetWcppVersion Then 'Cette demande est un ping de l'utilitaire WCPP 'donc stocke l'ID de session indiquant qu'il a installé le WCPP 'stocke également la version de WCPP si disponible Dim wcppVersion As String = HttpContext.Request ("wcppVer") Si String.IsNullOrEmpty (wcppVersion), alors wcppVersion = "1.0.0.0" Fin si HttpContext.Application.Set (ID de session & "wcppInstalled", wcppVersion) ElseIf prType = RequestType.ClientSetInstalledPrinters Then 'Utilitaire WCPP envoie les imprimantes installées côté client 'so stocke cette information avec l'ID de session spécifié Dim printers As String = HttpContext.Request ("imprimantes") Si String.IsNullOrEmpty (printers) = False Then printers = System.Text.Encoding.UTF8.GetString (Convert.FromBase64String (imprimantes)) Fin si HttpContext.Application.Set (ID de session et "imprimantes", imprimantes) ElseIf prType = RequestType.ClientGetWcppVersion Then 'renvoie la version de WCPP pour le sid spécifié, le cas échéant Dim sidWcppVersion As Boolean = (HttpContext.Application (sessionID & "wcppInstalled") n'est pas rien) HttpContext.Response.ContentType = "text / plain" Si (sidWcppVersion) Alors HttpContext.Response.Write (HttpContext.Application (ID de session & "wcppInstalled").
- ToString ()) Fin si HttpContext.Response.End () ElseIf prType = RequestType.ClientGetInstalledPrinters Then 'renvoie les imprimantes installées pour le sid spécifié, le cas échéant Dim sidHasPrinters As Boolean = (HttpContext.Application (sessionID & "printers") n'est pas rien) HttpContext.Response.ContentType = "text / plain" Si (sidHasPrinters) Alors HttpContext.Response.Write (HttpContext.Application (ID de session et "imprimantes").
- ToString ()) Fin si HttpContext.Response.End () Fin si Catch ex As Exception HttpContext.Response.StatusCode = 500 HttpContext.Response.ContentType = "text / plain" HttpContext.Response.Write (ex.Message + "- StackTrace:" + ex.StackTrace) HttpContext.Response.End () Fin essayer End Sub Classe de fin End Namespace Modifier le AccueilContrôleur au code suivant: Classe publique HomeController Hérite de System.Web.Mvc.Controller Fonction Index () As ActionResult ViewData ("WCPPDetectionScript") = Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript (Url.Action ("ProcessRequest", "WebClientPrintAPI", Aucune, HttpContext.Request.Uquest.Url.SrlemeScheme), HttpContext.Session.
Structured content
Création / édition de contrôleurs Créez un nouveau contrôleur et nommez-le WebClientPrintAPIController puis copiez / collez le code suivant:
Importe Neodynamic.SDK.Web
Contrôleurs d'espace de noms Classe publique WebClientPrintAPIController Hérite contrôleur
'GET: WebClientPrintAPI Fonction Index () As ActionResult Vue de retour () Fonction de fin
'********************************** ' NOTE IMPORTANTE 'Dans cet exemple, nous stockons des éléments liés aux utilisateurs (comme 'la liste des imprimantes et si elles ont le WCPP 'utilitaire client installé) dans le cache de l'application 'partie objet d'ASP.NET MAIS vous pouvez le changer en 'un autre stockage différent (comme une base de données ou un serveur de fichiers)! 'qui sera requis dans les scénarios de Load Balacing '**********************************
Public Sub ProcessRequest () 'obtenir l'identifiant de session Dim sessionID As String = (Si (HttpContext.Request ("sid") n'est pas rien, HttpContext.Request ("sid"), rien))
'obtenir une chaîne de requête Dim queryString As String = HttpContext.Request.Url.Query
Essayer 'Déterminer et obtenir le type de demande Dim prType As RequestType = WebClientPrint.GetProcessRequestType (queryString)
Si prType = RequestType.GenPrintScript OrElse prType = RequestType.GenWcppDetectScript alors 'Laissez WebClientPrint générer le script demandé Dim script As Byte () = WebClientPrint.GenerateScript (Url.Action ("ProcessRequest", "WebClientPrintAPI", rien, HttpContext.Request.Url.Scheme), queryString)
HttpContext.Response.ContentType = "text / javascript" HttpContext.Response.BinaryWrite (script) HttpContext.Response.End ()
ElseIf prType = RequestType.ClientSetWcppVersion Then 'Cette demande est un ping de l'utilitaire WCPP 'donc stocke l'ID de session indiquant qu'il a installé le WCPP 'stocke également la version de WCPP si disponible Dim wcppVersion As String = HttpContext.Request ("wcppVer") Si String.IsNullOrEmpty (wcppVersion), alors wcppVersion = "1.0.0.0" Fin si
HttpContext.Application.Set (ID de session & "wcppInstalled", wcppVersion)
ElseIf prType = RequestType.ClientSetInstalledPrinters Then 'Utilitaire WCPP envoie les imprimantes installées côté client 'so stocke cette information avec l'ID de session spécifié Dim printers As String = HttpContext.Request ("imprimantes") Si String.IsNullOrEmpty (printers) = False Then printers = System.Text.Encoding.UTF8.GetString (Convert.FromBase64String (imprimantes)) Fin si
HttpContext.Application.Set (ID de session et "imprimantes", imprimantes)
ElseIf prType = RequestType.ClientGetWcppVersion Then 'renvoie la version de WCPP pour le sid spécifié, le cas échéant Dim sidWcppVersion As Boolean = (HttpContext.Application (sessionID & "wcppInstalled") n'est pas rien)
HttpContext.Response.ContentType = "text / plain" Si (sidWcppVersion) Alors HttpContext.Response.Write (HttpContext.Application (ID de session & "wcppInstalled"). ToString ()) Fin si HttpContext.Response.End ()
ElseIf prType = RequestType.ClientGetInstalledPrinters Then 'renvoie les imprimantes installées pour le sid spécifié, le cas échéant Dim sidHasPrinters As Boolean = (HttpContext.Application (sessionID & "printers") n'est pas rien)
HttpContext.Response.ContentType = "text / plain" Si (sidHasPrinters) Alors HttpContext.Response.Write (HttpContext.Application (ID de session et "imprimantes"). ToString ()) Fin si HttpContext.Response.End ()
Fin si Catch ex As Exception HttpContext.Response.StatusCode = 500 HttpContext.Response.ContentType = "text / plain" HttpContext.Response.Write (ex.Message + "- StackTrace:" + ex.StackTrace) HttpContext.Response.End () Fin essayer
End Sub
Classe de fin End Namespace
Modifier le AccueilContrôleur au code suivant:
Classe publique HomeController Hérite de System.Web.Mvc.Controller
Fonction Index () As ActionResult ViewData ("WCPPDetectionScript") = Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript (Url.Action ("ProcessRequest", "WebClientPrintAPI", Aucune, HttpContext.Request.Uquest.Url.SrlemeScheme), HttpContext.Session.
Vue de retour () Fonction de fin
Fonction PrintPDF () As ActionResult
Vue de retour () Fonction de fin
Classe de fin
Ajouter un nouveau contrôleur et nommez-le PrintPDFController et collez le code suivant:
Importe Neodynamic.SDK.Web
Contrôleurs d'espace de noms Classe publique PrintPDFController Hérite contrôleur
Fonction Index () As ActionResult
ViewData ("WCPScript") = Neodynamic.SDK.Web.WebClientPrint.CreateScript (Url.Action ("ProcessRequest", "WebClientPrintAPI", Aucune, HttpContext.Request.Url.Scheme), Url.Action ("PrintFILE", "PrintPDF" ", Nothing, HttpContext.Request.Url.Scheme), HttpContext.Session.SessionID)
Vue de retour () Fonction de fin
Fichier d'impression secondaire public (useDefaultPrinter As String, nomImprimante As String)
'IMPORTANT: pour les clients Windows, Adobe Reader doit être installé côté client. 'chemin complet du fichier PDF à imprimer Dim pdfFilePath As String = "c: myDocument.pdf"
'créer un nom de fichier temporaire pour notre fichier PDF ... Dim fileName As String = "MyFile-" + Guid.NewGuid (). ToString ("N") + System.IO.Path.GetExtension (pdfFilePath) 'Créer un objet PrintFile avec le fichier PDF Dim fichier comme nouvelle PrintFile (pdfFilePath, fileName) 'Créez un ClientPrintJob et renvoyez-le au client! Dim cpj en tant que nouveau ClientPrintJob () 'set file to print ... cpj.PrintFile = fichier
If (useDefaultPrinter = "coché" OrElse printerName = "null") Alors cpj.ClientPrinter = New DefaultPrinter () Autre cpj.ClientPrinter = Nouveau InstalledPrinter (System.Web.HttpUtility.UrlDecode (printerName)) Fin si
System.Web.HttpContext.Current.Response.ContentType = "application / octet-stream" System.Web.HttpContext.Current.Response.BinaryWrite (cpj.GetContent ()) System.Web.HttpContext.Current.Response.End ()
End Sub Classe de fin End Namespace
Création / édition de vues La vue par défaut permet de détecter si l’utilitaire WebClientPrint Processor (WCPP) est installé sur la machine cliente. Modifier le Vues / partagées / _Layout.vbhtml déposer et ajouter la section suivante au CORPS: Assurez-vous que cette Voir les liens vers jQuery 1.4.1+ fichier!
...
@RenderSection ("scripts", requis: False)
...
Modifier le Vues / Accueil / Index.vbhtml Fichier et copier / coller le code suivant:
@Code ViewData ("Title") = "Page d'accueil" Code de fin
Détection de l'utilitaire WCPP côté client ... S'il vous plaît attendez quelques secondes ...
# 1 Installez le processeur WebClientPrint (WCPP)! WCPP est une application native (sans aucune dépendance!) qui gère tous les travaux d'impression généré par le Composant WebClientPrint for ASP.NET côté serveur. La WCPP est responsable de l’ensemble du processus d’impression et peut être installé sur Windows, Linux, Mac et Raspberry Pi! Téléchargez et installez WCPP à partir du site Web Neodynamic # 2 Après avoir installé WCPP ... Vous pouvez aller tester la page d'impression ...
scripts de section
@ * Script de détection WCPP généré par HomeController * @
@ Html.Raw (ViewData ("WCPPDetectionScript"))
}
Section de fin
Ajoutez une nouvelle vue avec le nom suivant et sous de tels dossiers: Views / PrintPDF / Index.vbhtml Ensuite, copiez / collez le code suivant:
Imprimer le fichier PDF
Imprimer sur l'imprimante par défaut ou...
Cliquez pour charger et sélectionner l'une des imprimantes installées!
Sélectionnez une imprimante installée:
scripts de section @ * Enregistrez le code de script WebClientPrint généré par PrintPDFController. * @
@ Html.Raw (ViewData ("WCPScript"))
section @end
Click to rate this post! [Total: 0 Average: 0]
Topics and keywords
Themes: Serveur d'impression
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.