Serveur d'impression
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
Sommaire
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 ...
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
Cliquez pour charger et sélectionner l'une des imprimantes installées!
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]







Commentaires
Laisser un commentaire