2009-02-20 9 views
10

J'envoie des courriels qui ont des factures jointes en format PDF. Je suis déjà - ailleurs dans l'application - en train de créer les factures sur une page .aspx. Je voudrais utiliser Server.Execute pour retourner le HTML de sortie et générer un PDF à partir de cela. Sinon, je devrais utiliser un outil de reporting pour "dessiner" la facture sur un PDF. Cela souffle pour de nombreuses raisons, dont la moindre n'est pas que je devrais mettre à jour à la fois la page .aspx et le rapport pour chaque changement mineur. Que faire ...Générer un fichier PDF à partir d'ASP.NET à partir de contenu HTML/CSS brut?

+0

duplication possible de http://stackoverflow.com/questions/564650/convert-html-to-pdf-in-net –

Répondre

5

Il n'existe aucun moyen de générer un PDF à partir d'une chaîne HTML directement dans .NET, mais il existe un certain nombre de contrôles tiers qui fonctionnent bien.

J'ai eu du succès avec celui-ci: http://www.html-to-pdf.net et ceci: http://www.htmltopdfasp.net

Les questions importantes à poser sont les suivantes:

  1. -t-il rendu correct par rapport aux 3 principaux navigateurs: IE, FF et Safari/Chrome?
  2. Est-ce que ça gère bien CSS?
  3. Le contrôle possède-t-il son propre moteur de rendu? Si oui, faites-le rebondir. Vous ne voulez pas faire confiance à un moteur de rendu développé en interne - les navigateurs ont un problème assez difficile à obtenir tout pixel parfait.
  4. Quelles sont les dépendances requises par le contrôle tiers? Le moins, le mieux.

Il y en a quelques autres mais ils traitent des affichages ActiveX et autres.

+0

Le lien htmltopdfasp ne fonctionne pas. – prograde

1

Tant que vous pouvez vous assurer d'utiliser le XHTML approprié, vous pouvez également utiliser un produit comme Alt-Soft's Xml2PDF pour convertir XML (XHTML) en PDF au moyen de XSLT/XSL-FO.

Il faut un peu de courbe d'apprentissage pour maîtriser, mais ça marche très bien une fois que vous l'avez "obtenu"!

Marc

+0

Licence standard: 1 495 $ – Junto

+0

@Junto: oui - donc - le logiciel de création coûte de l'argent - donc l'outil n'est pas seulement ** GRATUIT ** - mais il y a ** IS ** une version gratuite de Xml2Pdf Workstation, aussi –

+0

@marc Bien sûr, cela coûte de l'argent, mais cela ne fait pas de mal non plus de divulguer qu'il s'agit d'un produit payant et que la licence standard est requise pour générer des fichiers PDF à partir de contenu HTML. – Junto

2

Cela ressemble à un travail pour Prince. Il peut prendre du HTML et CSS et générer un PDF, que vous pouvez ensuite présenter à vos utilisateurs. Il prend en charge CSS3 mieux que la plupart des navigateurs Web (le personnel comprend Håkon Wium Lie, l'inventeur de CSS).

Voir le samples, en particulier ceux pour les pages Wikipedia, pour la belle sortie qu'il peut générer. Il y a aussi un intéressant Google Tech Talk avec les auteurs.

Edit: Il y a un .NET wrapper disponible.

+0

Ce produit a l'air bien, mais il n'est pas vraiment bien construit pour être empaqueté avec une application .NET. On dirait qu'ils ont un .dll vous pouvez envelopper au moins. –

+0

Je ne peux pas dire que j'ai essayé - je l'ai utilisé avec MindTouch Deki, qui appelle directement le fichier .exe.Ce que je peux dire c'est que la sortie est magnifique - c'est plus comme LaTeX que CutePDF d'Internet Explorer :) – crb

+1

Ne pas creuser le logo, ils collent sur la première page de chaque document – Levitikon

1

Puisque vous produisez la réponse, vous pouvez utiliser un outil comme Report.NET: http://sourceforge.net/projects/report/

Je suis en désaccord avec les réponses qui disent que vous ne pouvez pas convertir directement de la sortie au format PDF, cependant, que vous pouvez « re -appelez "la page et obtenez le HTML comme un flux et le convertir. Cependant, je ne suis pas sûr de quel outil vous voudriez utiliser pour faire ceci. En d'autres termes, c'est possible, mais je ne suis pas sûr que cela en vaille la peine. Les bibliothèques de création PDF, comme Report.NET, même s'ils forcent à réutiliser de la logique et pas de conversion automagique, c'est plus facile.

Je n'ai pas essayé ce composant, mais j'ai entendu de bonnes choses de la part de ceux qui l'ont fait. Le modèle ressemble plus au HTML, mais je ne suis pas sûr que vous pouvez simplement lui envoyer un ASPX rendu pour créer un fichier PDF: http://www.websupergoo.com/abcpdf-8.htm

0

Je choisirais un chemin différent. En supposant que vous utilisez SQL Server, utilisez SSRS et générez le PDF de cette façon.

1

Si vous essayez de trouver du code HTML au logiciel pdf via GOOGLE vous obtiendrez une pile de ce genre de choses. Il y a environ 10 leaders mais la plupart d'entre eux utilisent des DLLs en mode arrière-plan. Juste deux d'entre eux utilisent leur propre moteur d'analyse. Veuillez essayer le composant PDF Duo .NET dans votre projet ASP.NET si vous souhaitez créer un programme PDF. Il s'agit d'un composant léger pour générer des invocations PDF, par exemple, par exemple.

+0

Licence de site: 1170 $ US – Junto

2

wkhtmltopdf est un exe gratuit et cool pour générer des pdf à partir de html. C'est écrit en C++. Mais nReco htmltopdf est une bibliothèque dotnet wrapper pour cet outil génial. J'ai mis en œuvre en utilisant cette bibliothèque dotnet et il était tellement bon qu'il fait tout par lui-même, vous avez juste besoin de donner html comme une source de données.

/// <summary> 
/// Converts html into PDF using nReco dll and wkhtmltopdf.exe. 
/// </summary>  
private byte[] ConvertHtmlToPDF() 
{ 
    HtmlToPdfConverter nRecohtmltoPdfObj = new HtmlToPdfConverter(); 
    nRecohtmltoPdfObj.Orientation = PageOrientation.Portrait; 
    nRecohtmltoPdfObj.PageFooterHtml = CreatePDFFooter(); 
    nRecohtmltoPdfObj.CustomWkHtmlArgs = "--margin-top 35 --header-spacing 0 --margin-left 0 --margin-right 0";   
    return nRecohtmltoPdfObj.GeneratePdf(CreatePDFScript() + ShowHtml() + "</body></html>"); 
} 

La fonction ci-dessus est un extrait du message de lien ci-dessous qui l'explique en détail. HTML to PDF in ASP.Net

2

La question initiale concerne la conversion d'une autre page ASPX contenant une facture en un document PDF. La facture utilise probablement certaines données de session et l'utilisateur suggère d'utiliser Server.Execute() pour obtenir le code HTML de la page de facture, puis de convertir ce code en PDF. La conversion directe de l'URL de la page de facture n'est pas possible car une nouvelle session serait créée pendant la conversion et les données de la session seraient perdues.

C'est en fait une bonne technique pour préserver les données de session pendant la conversion qui est appliquée dans Convert a HTML Page to PDF in Same Session ASP.NET Demo de la bibliothèque EvoPdf. Le code complet C# pour obtenir la chaîne HTML rendu par la page de facture et de convertir cette chaîne au format PDF est:

// Execute the invoice page and get the HTML string rendered by this page 
TextWriter outTextWriter = new StringWriter(); 
Server.Execute("Invoice.aspx", outTextWriter); 

string htmlStringToConvert = outTextWriter.ToString(); 

// Create a HTML to PDF converter object with default settings 
HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

// Use the current page URL as base URL 
string baseUrl = HttpContext.Current.Request.Url.AbsoluteUri; 

// Convert the page HTML string to a PDF document in a memory buffer 
byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, baseUrl); 

// Send the PDF as response to browser 

// Set response content type 
Response.AddHeader("Content-Type", "application/pdf"); 

// Instruct the browser to open the PDF file as an attachment or inline 
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Convert_Page_in_Same_Session.pdf; size={0}", outPdfBuffer.Length.ToString())); 

// Write the PDF document buffer to HTTP response 
Response.BinaryWrite(outPdfBuffer); 

// End the HTTP response and stop the current page processing 
Response.End(); 
0

Une solution minimale possible d'utiliser Server.Execute() pour obtenir le code HTML de la page de la facture et convertir ce code à un fichier PDF à l'aide winnovative html to pdf api for .net est:

TextWriter outTextWriter = new StringWriter(); 
Server.Execute("Invoice.aspx", outTextWriter); 

HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

byte[] pdfBytes = htmlToPdfConverter.ConvertHtml(outTextWriter.ToString(), 
      httpContext.Current.Request.Url.AbsoluteUri); 
0

Vous pouvez utiliser PdfSharp ou iTextSharp pour convertir html en pdf. PDFSharp n'est pas gratuit.