10 Stimmen

PDF aus ASP.NET aus rohem HTML/CSS-Inhalt generieren?

Ich versende E-Mails, an die Rechnungen im PDF-Format angehängt sind. Ich bin bereits - an anderer Stelle in der Anwendung - erstellen die Rechnungen in einer .aspx-Seite. Ich möchte Server.Execute verwenden, um die HTML-Ausgabe zurückzugeben und daraus ein PDF zu generieren. Andernfalls müsste ich ein Reporting-Tool verwenden, um die Rechnung in ein PDF zu "zeichnen". Das ist aus vielen Gründen problematisch, nicht zuletzt, weil ich bei jeder kleinen Änderung sowohl die .aspx-Seite als auch den Bericht aktualisieren müsste. Was ist zu tun...

0 Stimmen

5voto

Es gibt keine Möglichkeit, ein PDF aus einem HTML-String direkt in .NET zu erzeugen, aber es gibt eine Reihe von Drittanbieter-Steuerelementen, die gut funktionieren.

Ich habe damit Erfolg gehabt: http://www.html-to-pdf.net und dies: http://www.htmltopdfasp.net

Die wichtigsten Fragen, die gestellt werden müssen, sind:

  1. Wird sie im Vergleich zu den 3 wichtigsten Browsern korrekt wiedergegeben? IE, FF und Safari/Chrome?
  2. Kann es CSS gut verarbeiten?
  3. Verfügt das Steuerelement über eine eigene Rendering-Engine? Wenn ja, lassen Sie sie verschwinden. Sie wollen nicht eine hausgemachte Rendering-Engine vertrauen - die Browser haben ein schwieriges genug Problem immer alles Pixel perfekt.
  4. Welche Abhängigkeiten sind für die Kontrolle durch Dritte erforderlich? Je weniger, desto besser.

Es gibt noch ein paar andere, aber die befassen sich mit ActiveX-Anzeigen und dergleichen.

3voto

Wir verwenden dafür ein Produkt namens ABCPDF, das hervorragend funktioniert.

http://www.websupergoo.com/abcpdf-1.htm

2voto

crb Punkte 8099

Das klingt wie ein Job für Prinz . Es kann aus HTML und CSS eine PDF-Datei erzeugen, die Sie dann Ihren Benutzern präsentieren können. Es unterstützt CSS3 besser als die meisten Webbrowser (zu den Mitarbeitern gehört Håkon Wium Lie, der Erfinder von CSS).

Siehe die Proben besonders die für Wikipedia-Seiten, wegen der schönen Ausgabe, die es erzeugen kann. Es gibt auch eine interessante Google Tech Talk mit den Autoren.

Editar: Es gibt eine .NET-Wrapper verfügbar.

0 Stimmen

Dieses Produkt sieht gut aus, aber es ist nicht wirklich gut gebaut, um mit einer .NET-Anwendung verpackt zu werden. Sieht so aus, als hätten sie eine .dll, die man zumindest einpacken kann.

0 Stimmen

Ich kann nicht sagen, dass ich es ausprobiert habe - ich habe es mit MindTouch Deki verwendet, das die .exe direkt aufruft. Was ich sagen kann, ist, dass die Ausgabe großartig ist - es ist mehr wie LaTeX als CutePDF vom Internet Explorer :)

1 Stimmen

Das Logo, das sie auf die erste Seite eines jeden Dokuments kleben, gefällt mir nicht.

2voto

c-sharp Punkte 553

wkhtmltopdf ist eine kostenlose und coole Exe, um pdf aus html zu erzeugen. Es ist in C++ geschrieben. Aber nReco htmltopdf ist eine Wrapper-Dotnet-Bibliothek für dieses großartige Tool. Ich implementiert mit dieser Dotnet-Bibliothek und es war einfach so gut es tut alles durch seine eigene Sie müssen nur html als Datenquelle geben.

/// <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>");
}

Die obige Funktion ist ein Auszug aus dem unten verlinkten Beitrag, in dem sie im Detail erklärt wird. HTML zu PDF in ASP.Net

0 Stimmen

NReco.LT (für .NET Core) ist ein kostenpflichtiges Paket und erfordert eine kommerzielle Lizenz

2voto

EvoPdf Punkte 523

Die ursprüngliche Frage bezieht sich auf die Konvertierung einer anderen aspx-Seite, die eine Rechnung enthält, in ein PDF-Dokument. Die Rechnung verwendet wahrscheinlich einige Sitzungsdaten und der Benutzer schlägt vor, die Server.Execute() um den HTML-Code der Rechnungsseite zu erhalten und diesen Code dann in PDF zu konvertieren. Eine direkte Konvertierung der URL der Rechnungsseite ist nicht möglich, da bei der Konvertierung eine neue Sitzung erstellt würde und die Sitzungsdaten verloren gehen würden.

Dies ist eigentlich eine gute Technik, um Sitzungsdaten während der Konvertierung zu erhalten, die in Konvertieren einer HTML-Seite in PDF in derselben Sitzung ASP.NET Demo der EvoPdf-Bibliothek. Der vollständige C#-Code zum Abrufen der von der Rechnungsseite gerenderten HTML-Zeichenfolge und zum Konvertieren dieser Zeichenfolge in PDF lautet:

// 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();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X