2009-02-06 9 views
2

J'exporte le contenu HTML au format PDF.Le fichier ne commence pas par '% PDF-'

System.IO.StringWriter sWriter = new System.IO.StringWriter(); 

    System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(sWriter); 

    Response.Buffer = true; 
    FormId.RenderControl(htmlWriter); 
    Response.ContentType = "application/pdf"; 
    // Added appropriate headers 
    Response.AddHeader("Content-Disposition", "inline; filename=XXX.pdf"); 
    Response.AddHeader("Content-Length", htmlWriter.ToString().Length.ToString()); 
    Response.Output.Write(sWriter.ToString()); 

    Response.Flush(); 
    Response.Close(); 

FORMID est mon passé Div du contenu ..

Je reçois l'erreur "Le fichier ne commence pas par '% PDF-'"

J'ai inclus Response.Clear () La sortie ne vient pas

+0

Est-ce que sWriter vous donne réellement un fichier PDF valide? Vérifiez ses quatre premiers octets. – paxdiablo

Répondre

3

Vous êtes en train de rendre le html (div comme vous l'avez dit) avant le pdf dans le flux de sortie, de sorte que les deux sont combinés. Cela provoque toute application regardant la sortie pour l'interpréter comme un fichier corrompu. Je vais essayer de retirer les deux premières lignes:

Response.Buffer = true; 
FormId.RenderControl(htmlWriter); 

Si cela ne résout pas le problème, ajoutez un appel Response.Clear() avant tout. Cela suppose que sWriter contienne le fichier PDF au début de ce bloc de code. Dans le cas contraire, un peu plus de contexte pourrait être utile.

Un conseil: si possible, déplacez-le hors de la page vers un fichier .ashx ou autre IHttpHandler.

+0

Bon conseil, la surcharge pour un gestionnaire http est beaucoup plus faible que pour un gestionnaire de page. –

0

Effectuez un Response.Clear() avant de commencer à diffuser votre sortie.

1

Je faisais face au même problème en écrivant du contenu HTML en PDF.

J'ai finalement trouvé que le contenu HTML invalide provoque ce problème. Par exemple, <ul> étiquette sans étiquette de fermeture </ul>.

Une fois que j'ai mis les étiquettes de fermeture appropriées, cela fonctionne bien!

Questions connexes