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

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

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

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

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

1voto

marc_s Punkte 701497

Solange Sie sicherstellen können, dass Sie korrektes XHTML verwenden, können Sie auch ein Produkt wie Xml2PDF von Alt-Soft zur Umwandlung von XML (XHTML) in PDF mittels XSLT/XSL-FO.

Es dauert ein bisschen, bis man es beherrscht, aber es funktioniert sehr gut, wenn man es einmal "drauf hat"!

Marc

0 Stimmen

Standard-Lizenz: 1.495 US-DOLLAR

0 Stimmen

@Junto: ja - also - Software erstellen kostet Geld - also sind die Tools nicht alle nur KOSTENLOS - aber dort IS eine kostenlose Xml2Pdf Workstation Version, auch

0 Stimmen

@marc-s Natürlich kostet es Geld, aber es schadet auch nicht, darauf hinzuweisen, dass es sich um ein kostenpflichtiges Produkt handelt und die Standardlizenz erforderlich ist, um PDFs aus HTML-Inhalten zu erzeugen.

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