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

Par Titanfall , le 4 mai 2019 - 7 minutes de lecture

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

Votre commentaire sera révisé par les administrateurs si besoin.