2016-11-08 1 views
0

J'écris un service Web en C# en utilisant NReco.PdfConverter et wkhtml qui convertirait des pages Web en fichiers PDF.Obtenez le HTML + CSS + JS entier de la page, et envoyez-le à un service Web

Les pages Web (sur SharePoint) requièrent une autorisation et contiennent également un formulaire que l'utilisateur doit remplir. Par conséquent, le service Web ne peut pas simplement accéder à l'URL de cette page et le télécharger.

Les fichiers JavaScript et CSS sont également importants pour le rendu correct du formulaire, y compris des dizaines de fichiers JS et feuilles de style de SharePoint.

Jusqu'à présent, ma meilleure idée est la suivante:

  • Lorsque l'utilisateur clique sur « Générer PDF », JavaScript convertira toute la page en cours en une seule chaîne (annexant les fichiers CSS et les fichiers JS ligne); Cette chaîne au service Web en utilisant $.ajax().

  • En utilisant NReco.PdfConverter, il est trivial de convertir cette chaîne en PDF et l'enregistrer dans le fichier:

    var converter = new HtmlToPdfConverter 
    { 
        Margins = new PageMargins 
        { 
         Top = 0, 
         Bottom = 0, 
         Left = 0, 
         Right = 0 
        }, 
        CustomWkHtmlArgs = "--print-media-type" 
    }; 
    converter.GeneratePdf(htmlContent); 
    

Comment peut-on aborder l'idée même de générer un code HTML d'une page (y compris l'état des cases à cocher, du texte à l'intérieur des formulaires, etc.) dans le navigateur?

Est-ce quelque chose de terriblement compliqué? Est-ce que quelqu'un est au courant d'une autre solution?

Répondre

1

Vous pouvez passer cookies d'autorisation (ou en-tête) en utilisant l'option wkhtmltopdf appropriée, par exemple (si l'authentification WebForms est utilisé):

var pdfGen = new HtmlToPdfConverter(); 
pdfGen.CustomWkHtmlArgs = String.Format(" --cookie {0} {1} ", 
    FormsAuthentication.FormsCookieName, 
    Request.Cookies[FormsAuthentication.FormsCookieName]); 
pdfGen.GeneratePdfFromFile("your_sharepoint_web_page_url", null, "output.pdf"); 

--- MISE À JOUR ---

pour HTTP Basic Auth :

pdfGen.CustomWkHtmlArgs = String.Format(" --username {0} --password {1}", username, pwd); 
+0

travaillé avec CustomWkHtmlArgs = "LOGIN --username --password PASS" – K48

+0

J'ai ajouté extrait de code pour auth de base à la réponse –