3

Je voudrais convertir une page HTML + CSS en un fichier PDF. J'ai essayé wkhtmltopdf et j'ai un problème car la page à laquelle je veux accéder doit être authentifiée sur le site Web.Comment convertir une page HTML sécurisée (ASP.NET MVC 3) en PDF en utilisant wkhtmltopdf?

La page Je voudrais convertir au format PDF a l'adresse suivante: http: // [SITE]/PDFReport/33

Si je tente d'y accéder sans être authentifié, je suis redirigé vers la connexion page.

Alors, quand je l'utilise wkhtmltopdf, il convertit ma page de connexion au format PDF ...

La méthode anthentication J'utilise sur mon application ASP.NET MVC est SimpleMembership:

[Authorize] 
public ActionResult PDFReport(string id) 
{ 
} 

J'exécute wkhtmltopdf .exe avec System.Diagnostics.Process:

FileInfo tempFile = new FileInfo(Request.PhysicalApplicationPath + "\\bin\\test.pdf"); 

StringBuilder argument = new StringBuilder(); 
argument.Append(" --disable-smart-shrinking"); 
argument.Append(" --no-pdf-compression"); 
argument.Append(" " + "http://[WEBSITE]/PDFReport/33"); 
argument.Append(" " + tempFile.FullName); 

// to call the exe to convert 
using (Process p = new System.Diagnostics.Process()) 
{ 
    p.StartInfo.UseShellExecute = false; 
    p.StartInfo.CreateNoWindow = true; 
    p.StartInfo.FileName = Request.PhysicalApplicationPath + "\\bin\\wkhtmltopdf.exe"; 
    p.StartInfo.Arguments = argument.ToString(); 
    p.StartInfo.RedirectStandardOutput = true; 
    p.StartInfo.RedirectStandardError = true; 

    p.Start(); 
    p.WaitForExit(); 
} 

savez-vous comment générer le fichier PDF sans désactiver la sécurité sur cette page?

Répondre

1

J'ai eu beaucoup de problèmes avec cela récemment. En un mot, WKHTMLTOPDF est une version de Webkit (QT, je crois qu'ils l'appellent), donc quand vous demandez une page protégée par mot de passe, que le navigateur doit se connecter et stocker/référencer un cookie comme vous le feriez normalement.

L'appel brut ressemblerait à quelque chose comme ceci:

`/ chemin/wkhtmltopdf --cookie-pot my.jar --username myusername --password mypassword URL

Où:

  • my.jar est un fichier jar qui est créé et tient vos valeurs cookies
  • username est le name du champ de formulaire nom d'utilisateur et myusername est le après la valeur
  • password est le name du champ de formulaire de mot de passe et mypassword est la valeur post
  • URL est l'URL de la page de connexion

Assurez-vous d'inclure tous les autres champs de poste requis pour se connecter avec succès dans - vous voudrez probablement surveiller vos en-têtes HTTP, pas seulement regarder le formulaire. Appelez WKHTMLTOPDF à nouveau sur la page que vous cherchez à capturer avec vos paramètres normaux, y compris le --cookie-jar my.jar pour maintenir la session. Ça devrait le faire!

Cependant, j'avais encore des problèmes de ma part, mais c'était un login assez robuste (cookies multiples, sécurisé, nombreux paramètres, etc). Je travaillais avec PHP et j'avais plus de chance d'utiliser CURL - je ne suis pas sûr de savoir comment cela se répercute sur ASP.NET (peut-être cela?http://support.microsoft.com/kb/303436) mais voici ma logique si elle aide:

  • Connexion via CURL
  • page Grab HTML et stocker dans un fichier local temporaire
  • Remplacer toutes les références relatives aux images et fichiers à des références absolues (ou insérer un base tag)
  • Run plaine « de WKHTMLTOPDF ol sur le fichier temporaire
  • Supprimer des fichiers temporaires

Dans l'ensemble, c'était beaucoup plus facile de le faire de cette façon, et je me sens mieux de savoir que je m'appuie sur du vrai code plutôt que sur des paramètres dans la version 0.10 de WKHTMLTOPDF.

+0

Merci, je vais essayer cette solution de contournement. – Toc

Questions connexes