it-swarm.com.de

Konvertieren Sie HTML in PDF in .NET

Ich möchte ein PDF generieren, indem ich HTML-Inhalte an eine Funktion übergebe. Ich habe iTextSharp dafür verwendet, aber es funktioniert nicht gut, wenn es auf Tabellen stößt und das Layout nur unordentlich wird.

Gibt es einen besseren Weg?

393
SandHurst

Update: Ich würde jetzt empfehlen PupeteerSharp über wkhtmltopdf.

Versuchen Sie wkhtmtopdf . Es ist das beste Tool, das ich bisher gefunden habe.

Für .NET können Sie diese kleine Bibliothek verwenden, um das Befehlszeilenprogramm wkhtmtopdf einfach aufzurufen.

184
Marko

BEARBEITEN: Neuer VorschlagHTML-Renderer für PDF mit PdfSharp

(Nachdem Sie wkhtmltopdf ausprobiert und vorgeschlagen haben, es zu vermeiden)

HtmlRenderer.PdfSharp ist ein 100% vollständig C # -verwalteter Code, einfach zu verwenden, threadsicher und vor allem KOSTENLOS ( Neue BSD-Lizenz ) Lösung.

Verwendungszweck

  1. Download HtmlRenderer.PdfSharp Nuget-Paket.
  2. Verwenden Sie die Beispielmethode.

    public static Byte[] PdfSharpConvert(String html)
    {
        Byte[] res = null;
        using (MemoryStream ms = new MemoryStream())
        {
            var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(html, PdfSharp.PageSize.A4);
            pdf.Save(ms);
            res = ms.ToArray();
        }
        return res;
    }
    

Eine sehr gute Alternative Ist eine kostenlose Version von iTextSharp

Bis zur Version 4.1.6 wurde iTextSharp unter der LGPL-Lizenz lizenziert und Versionen bis 4.16 (oder möglicherweise auch Gabeln) sind als Pakete verfügbar und können frei verwendet werden. Natürlich kann jemand die fortgesetzte 5+ kostenpflichtige Version verwenden.

Ich habe versucht, wkhtmltopdf Lösungen in mein Projekt zu integrieren und hatte einige Hürden.

Ich persönlich würde es aus folgenden Gründen vermeiden, wkhtmltopdf-basierte Lösungen für Hosted Enterprise-Anwendungen zu verwenden.

  1. Zunächst ist wkhtmltopdf in C++ implementiert, nicht in C #, und es treten verschiedene Probleme beim Einbetten in Ihren C # -Code auf, insbesondere beim Wechseln zwischen 32-Bit- und 64-Bit-Builds Ihres Projekts. Musste verschiedene Problemumgehungen ausprobieren, einschließlich der bedingten Projekterstellung usw. usw., um "ungültige Formatausnahmen" auf verschiedenen Computern zu vermeiden.
  2. Wenn Sie Ihre eigene virtuelle Maschine verwalten, ist dies in Ordnung. Wenn Ihr Projekt jedoch in einer eingeschränkten Umgebung wie ( Azure ausgeführt wird (Mit Azure ist dies tatsächlich nicht möglich, wie vom Diener-Penchin erwähnt author ), Elastic Beanstalk etc) Es ist ein Albtraum, diese Umgebung nur zu konfigurieren, damit wkhtmltopdf funktioniert.
  3. wkhtmltopdf erstellt Dateien auf Ihrem Server, sodass Sie die Benutzerberechtigungen verwalten und Schreibzugriff auf den Speicherort gewähren müssen, auf dem wkhtmltopdf ausgeführt wird.
  4. Wkhtmltopdf wird als eigenständige Anwendung ausgeführt, daher wird es nicht von Ihrem IIS Anwendungspool verwaltet. Sie müssen es also entweder als Dienst auf einem anderen Computer hosten, oder es treten Verarbeitungsspitzen und Speicherverbrauch auf Ihrem Produktionsserver auf.
  5. Es verwendet temporäre Dateien, um das PDF zu generieren, und in Fällen wie AWS EC2, die eine sehr langsame Datenträger-Ein-/Ausgabe haben, ist dies ein großes Leistungsproblem.
  6. Der am meisten gehasste Fehler "DLL 'wkhtmltox.dll' kann nicht geladen werden", der von vielen Benutzern gemeldet wurde.

--- PRE Edit Section ---

Für alle, die PDF aus HTML in einfacheren Anwendungen/Umgebungen generieren möchten, hinterlasse ich meinen alten Beitrag als Vorschlag.

di.Pechkin

https://www.nuget.org/packages/TuesPechkin/

oder speziell für MVC Webanwendungen (Aber ich denke, Sie können es in jeder .net-Anwendung verwenden)

Rotativa

https://www.nuget.org/packages/Rotativa/

Beide verwenden die Binärdatei wkhtmtopdf zum Konvertieren von HTML in PDF. Wobei die Webkit-Engine zum Rendern der Seiten verwendet wird, sodass sie auch CSS-Stylesheets analysieren kann.

Sie bieten eine benutzerfreundliche nahtlose Integration in C #.

Rotativa kann auch direkt PDFs aus jeder beliebigen Razor Ansicht erstellen.

Zusätzlich verwalten sie für reale Webanwendungen auch die Threadsicherheit usw.

178

Die meisten Konverter von HTML inPDF basieren aufIE, um das HTML-Parsing und -Rendering durchzuführen. Dies kann zu Problemen führen, wenn der Benutzer seinen Internet Explorer aktualisiert. Hier ist eine, die nicht auf IE angewiesen ist.

Der Code sieht ungefähr so ​​aus:

EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);

Wie bei vielen anderen Konvertern können Sie Text, Dateinamen oder URL übergeben. Das Ergebnis kann in einer Datei oder einem Stream gespeichert werden.

29
Jason

Ich habe kürzlich einen PoC bezüglich der Konvertierung von HTML inPDF durchgeführt und wollte meine Ergebnisse teilen.

Mein Favorit bei weitem ist OpenHtmlToPdf

Vorteile dieses Tools:

  • Sehr gute HTML-Kompatibilität (z. B. war es das einzige Tool in meinem Beispiel, das Tabellenüberschriften korrekt wiederholte, wenn eine Tabelle mehrere Seiten umfasste)
  • Fließende API
  • Free und OpenSource ( Creative Commons Attribution 3.0-Lizenz )
  • Erhältlich über NuGet

Andere getestete Werkzeuge:

27
Markus

Ich kann NReco nur empfehlen. Es hat die kostenlose und kostenpflichtige Version und ist es wirklich wert. Es verwendet wkhtmtopdf im Hintergrund, aber Sie benötigen nur eine Assembly. Fantastisch.

Anwendungsbeispiel:

Installieren Sie über NuGet .

var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);

Haftungsausschluss: Ich bin nicht der Entwickler, nur ein Fan des Projekts :)

22
Kim Tranjan

Winnovative eine .Net PDF Bibliothek anbieten, die HTML-Eingabe unterstützt. Sie bieten eine unbegrenzte kostenlose Testversion . Je nachdem, wie Sie Ihr Projekt bereitstellen möchten, ist dies möglicherweise ausreichend.

13
Stewart

Essential PDF kann verwendet werden, um HTML in PDF konvertieren : C # -Beispiel . Das hier verlinkte Beispiel basiert auf ASP.NET, die Bibliothek kann jedoch in Windows Forms, WPF, ASP.NET Webforms und ASP.NET MVC verwendet werden. Die Bibliothek bietet die Möglichkeit, verschiedene HTML-Rendering-Engines zu verwenden: Internet Explorer (Standard) und WebKit (beste Ausgabe).

Die gesamte Steuerungssuite ist kostenlos (auch für kommerzielle Anwendungen) über das Programm Community-Lizenz erhältlich, sofern Sie dazu berechtigt sind. Die Community-Lizenz ist das vollständige Produkt ohne Einschränkungen oder Wasserzeichen.

Hinweis: Ich arbeite für Syncfusion.

8
Davis Jebaraj

Ich habe ExpertPDF Html ​​To Pdf Converter verwendet. Macht einen anständigen Job. Leider ist es nicht kostenlos.

7
charpdevel0p3r

Es gibt auch eine neue webbasierte App zur Dokumentenerstellung - DocRaptor.com . Scheint einfach zu bedienen, und es gibt eine kostenlose Option.

7
Paul

Wenn Sie nicht wirklich eine echte .Net PDF-Bibliothek benötigen, gibt es zahlreiche kostenlose HTML-Tools für PDF , von denen viele über einen Befehl ausgeführt werden können -Linie.

Eine Lösung wäre, eine davon auszuwählen und dann in C # einen dünnen Wrapper darum zu schreiben. ZB wie in dieses Tutorial .

6
Stewart

2018's Update, und benutzen wir die Standard HTML + CSS = PDF Gleichung!

Es gibt gute Nachrichten für HTML-to-PDF-Anforderungen. Wie diese Antwort zeigte , wird der W3C-Standard css-break- das Problem lösen . .. Es handelt sich um eine Kandidatenempfehlung mit dem Plan, nach Tests 2017 oder 2018 eine endgültige Empfehlung zu erstellen.

Als nicht so Standard gibt es Lösungen mit Plugins für C #, wie durch print-css.rocks gezeigt.

6
Peter Krauss

Unten sehen Sie ein Beispiel für die Konvertierung von HTML + CSS in PDF mithilfe von iTextSharp (iTextSharp + itextsharp.xmlworker).

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;


byte[] pdf; // result will be here

var cssText = File.ReadAllText(MapPath("~/css/test.css"));
var html = File.ReadAllText(MapPath("~/css/test.html"));

using (var memoryStream = new MemoryStream())
{
        var document = new Document(PageSize.A4, 50, 50, 60, 60);
        var writer = PdfWriter.GetInstance(document, memoryStream);
        document.Open();

        using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
        {
            using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
            {
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
            }
        }

        document.Close();

        pdf = memoryStream.ToArray();
}
4
Sergey Malyutin

ABCpdf.NET (http://www.websupergoo.com/abcpdf-5.htm)

Wir verwenden und empfehlen.

Sehr gute Komponente, konvertiert nicht nur eine Webseite in PDF wie ein Bild, sondern konvertiert auch wirklich Text, Bild, Formatierung usw.

Es ist nicht kostenlos, aber es ist billig.

Es hängt von allen anderen Anforderungen ab, die Sie haben.

Eine wirklich einfache, aber nicht einfach zu implementierende Lösung besteht darin, ein WebBrowser-Steuerelement zum Laden des HTML-Codes zu verwenden und dann mit der Print-Methode auf einem lokal installierten PDF Drucker zu drucken. Es stehen mehrere kostenlose PDF Drucker zur Verfügung und das WebBrowser-Steuerelement ist Teil des .Net-Frameworks.

BEARBEITEN: Wenn Sie Html ist XHtml können Sie PDFizer verwenden, um die Arbeit zu erledigen.

3
Rune Grimstad

Ich fand die folgende Bibliothek effektiver bei der Konvertierung von HTML in PDF.
Nuget : https://www.nuget.org/packages/Select.HtmlToPdf/

PDF Vision ist gut. Sie müssen jedoch über das volle Vertrauen verfügen, um es zu verwenden. Ich habe bereits eine E-Mail gesendet und gefragt, warum mein HTML-Code nicht auf dem Server konvertiert wird, aber auf localhost funktioniert es einwandfrei.

3
Mike

Sie müssen eine kommerzielle Bibliothek verwenden, wenn Sie ein perfektes HTML-Rendering im PDF-Format benötigen.

ExpertPdf Html To Pdf Converter ist sehr einfach zu bedienen und unterstützt die neuesten HTML5/CSS3. Sie können entweder eine ganze URL in ein PDF konvertieren:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromUrl(url);

oder ein HTML-String:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromHtmlString(html, baseUrl);

Sie haben auch die Möglichkeit, das generierte PDF-Dokument direkt in einem Stream von Dateien auf der Festplatte zu speichern.

2
charpdevel0p3r

Ich bin der Autor des Rotativa-Pakets. Es ermöglicht die Erstellung von PDF Dateien direkt aus Rasiereransichten:

https://www.nuget.org/packages/Rotativa/

Die Verwendung ist einfach, und Sie haben die vollständige Kontrolle über das Layout, da Sie mit Daten aus Ihrem Model- und ViewBag-Container Rasiermesseransichten verwenden können.

Ich habe unter Azure eine SaaS -Version entwickelt. Es macht es noch einfacher, es von WebApi oder einer .Net-App, einem Dienst, einer Azure-Website oder einem Azure-Webjob aus zu verwenden, unabhängig davon, ob .Net ausgeführt wird.

http://www.rotativahq.com/

Kostenlose Konten zur Verfügung.

2
Giorgio Bozio

Ich habe auch vor einiger Zeit danach gesucht. Ich bin auf HTMLDOC http://www.easysw.com/htmldoc/ gestoßen, eine kostenlose Open-Source-Befehlszeilen-App, die eine HTML-Datei als Argument verwendet und ein PDFausspuckt. _ davon. Es hat für mein Nebenprojekt ziemlich gut funktioniert, aber es hängt alles davon ab, was Sie tatsächlich brauchen.

Das Unternehmen, das die kompilierten Binärdateien herstellt, kann sie jedoch kostenlos herunterladen, aus dem Quellcode kompilieren und verwenden. Ich habe es geschafft, eine ziemlich aktuelle Revision (für Version 1.9) zu kompilieren, und ich beabsichtige, in ein paar Tagen ein Binär-Installationsprogramm dafür zu veröffentlichen. Wenn Sie also interessiert sind, kann ich einen Link dazu bereitstellen, sobald ich ihn veröffentliche.

Bearbeiten (25.02.2014): Scheint, als wären die Dokumente und die Site nach http://www.msweet.org/projects.php?Z1 verschoben worden

2
enriquein

Hier ist ein Wrapper für wkhtmltopdf.dll von pruiz

Und ein Wrapper für wkhtmltopdf.exe von Codaxy
- auch auf Nuget .

1
Garfield

Dies ist eine freie Bibliothek und funktioniert sehr einfach: OpenHtmlToPdf

string timeStampForPdfName = DateTime.Now.ToString("yyMMddHHmmssff");

string serverPath = System.Web.Hosting.HostingEnvironment.MapPath("~/FolderName");
string pdfSavePath = Path.Combine(@serverPath, "FileName" + timeStampForPdfName + ".FileExtension");


//OpenHtmlToPdf Library used for Performing PDF Conversion
var pdf = Pdf.From(HTML_String).Content();

//FOr writing to file from a ByteArray
 File.WriteAllBytes(pdfSavePath, pdf.ToArray()); // Requires System.Linq
1

Als Vertreter der HiQPdf-Software halte ich HiQPdf HTML to PDF converter for .NET für die beste Lösung. Es enthält die fortschrittlichste HTML5-, CSS3-, SVG- und JavaScript-Rendering-Engine auf dem Markt. Es gibt auch eine kostenlose Version der HTML to PDF-Bibliothek , mit der Sie kostenlos bis zu 3 PDF Seiten erstellen können. Der minimale C # -Code zum Erstellen eines PDF als Byte [] aus einer HTML-Seite lautet:

HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// set PDF page size, orientation and margins
htmlToPdfConverter.Document.PageSize = PdfPageSize.A4;
htmlToPdfConverter.Document.PageOrientation = PdfPageOrientation.Portrait;
htmlToPdfConverter.Document.Margins = new PdfMargins(0);

// convert HTML to PDF 
byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory(url);

Ausführlichere Beispiele für ASP.NET und MVC finden Sie unter HiQPdf HTML to PDF Converter examples repository .

1
HiQPdf

Das beste Tool, das ich gefunden und zum Generieren von PDF von Javascript und Stilen gerenderten Ansichten oder HTML-Seiten verwendet habe, ist phantomJS.

Laden Sie die EXE-Datei mit der Funktion rasterize.js herunter, die sich im Stammverzeichnis von exe des Beispielordners befindet, und fügen Sie sie in die Lösung ein.

Es erlaubt Ihnen sogar, die Datei in einem beliebigen Code herunterzuladen, ohne diese Datei zu öffnen, und es erlaubt Ihnen auch, die Datei herunterzuladen, wenn die Stile und speziell jquery angewendet werden.

Folgender Code generiert eine PDF Datei:

public ActionResult DownloadHighChartHtml()
{
    string serverPath = Server.MapPath("~/phantomjs/");
    string filename = DateTime.Now.ToString("ddMMyyyy_hhmmss") + ".pdf";
    string Url = "http://wwwabc.com";

    new Thread(new ParameterizedThreadStart(x =>
    {
        ExecuteCommand(string.Format("cd {0} & E: & phantomjs rasterize.js {1} {2} \"A4\"", serverPath, Url, filename));
                           //E: is the drive for server.mappath
    })).Start();

    var filePath = Path.Combine(Server.MapPath("~/phantomjs/"), filename);

    var stream = new MemoryStream();
    byte[] bytes = DoWhile(filePath);

    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Image.pdf");
    Response.OutputStream.Write(bytes, 0, bytes.Length);
    Response.End();
    return RedirectToAction("HighChart");
}



private void ExecuteCommand(string Command)
{
    try
    {
        ProcessStartInfo ProcessInfo;
        Process Process;

        ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);

        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = false;

        Process = Process.Start(ProcessInfo);
    }
    catch { }
}


private byte[] DoWhile(string filePath)
{
    byte[] bytes = new byte[0];
    bool fail = true;

    while (fail)
    {
        try
        {
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
            }

            fail = false;
        }
        catch
        {
            Thread.Sleep(1000);
        }
    }

    System.IO.File.Delete(filePath);
    return bytes;
}
1
Shan Khan

PDFmyURL hat kürzlich eine .NET-Komponente für die Konvertierung von Webseiten/HTML in PDF veröffentlicht. Dies hat eine sehr benutzerfreundliche Oberfläche, zum Beispiel:

PDFmyURL pdf = new PDFmyURL("yourlicensekey");
pdf.ConvertURL("http://www.example.com", Application.StartupPath + @"\example.pdf");

Dokumentation: PDFmyURL .NET-Komponentendokumentation

Haftungsausschluss: Ich arbeite für das Unternehmen, das PDFmyURL besitzt

0
user1914292

Wenn Sie bereits eine itextsharp-DLL verwenden und keine Drittanbieter-DLLs (Plugins) hinzufügen müssen, können Sie Ihre HTML-Datei problemlos in eine PDF-Datei konvertieren.

Einige CSS funktionieren nicht, sie sind nterstütztes CSS
Vollständige Erklärung mit Referenzbeispiel Klicken Sie hier


        MemoryStream memStream = new MemoryStream();
        TextReader xmlString = new StringReader(outXml);
        using (Document document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, memStream);
            //document.SetPageSize(iTextSharp.text.PageSize.A4);
            document.Open();
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(outXml);
            MemoryStream ms = new MemoryStream(byteArray);
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, ms, System.Text.Encoding.UTF8);
            document.Close();
        }

        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.BinaryWrite(memStream.ToArray());
        Response.End();
        Response.Flush();
0
Merbin Joe

Ok, mit diesen Technologien ....

Der Quellcode kann von hier heruntergeladen werden. Er benötigt nant

0
jjchiw

Wenn Sie möchten, dass der Benutzer das PDF der gerenderten Seite im Browser herunterlädt, ist die einfachste Lösung für das Problem

window.print(); 

auf der Client-Seite wird der Benutzer aufgefordert, das PDF der aktuellen Seite zu speichern. Sie können das Erscheinungsbild von PDF-Dateien auch anpassen, indem Sie einen Verknüpfungsstil festlegen

<link rel="stylesheet" type="text/css" href="print.css" media="print">

print.css wird beim Drucken auf den HTML-Code angewendet.

Einschränkung

Sie können die Datei nicht auf dem Server speichern. Benutzer Aufforderung zum Drucken der Seite, als er die Seite manuell speichern musste. Die Seite muss in einem Tab gerendert werden.

0

Ein weiterer Trick, den Sie mit dem WebBrowser-Steuerelement ausführen können, ist der vollständige Arbeitscode

Zuweisen von URL zum Textfeld-Steuerelement in meinem Fall

  protected void Page_Load(object sender, EventArgs e)
{

   txtweburl.Text = "https://www.google.com/";

 }

Unten finden Sie Code zum Generieren eines Bildschirms mit einem Thread

  protected void btnscreenshot_click(object sender, EventArgs e)
  {
    //  btnscreenshot.Visible = false;
    allpanels.Visible = true;
    Thread thread = new Thread(GenerateThumbnail);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();

}

private void GenerateThumbnail()
{
    //  btnscreenshot.Visible = false;
    WebBrowser webrowse = new WebBrowser();
    webrowse.ScrollBarsEnabled = false;
    webrowse.AllowNavigation = true;
    string url = txtweburl.Text.Trim();
    webrowse.Navigate(url);
    webrowse.Width = 1400;
    webrowse.Height = 50000;

    webrowse.DocumentCompleted += webbrowse_DocumentCompleted;
    while (webrowse.ReadyState != WebBrowserReadyState.Complete)
    {
        System.Windows.Forms.Application.DoEvents();
    }
}

Im folgenden Code speichere ich die PDF-Datei nach dem Download

        private void webbrowse_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // btnscreenshot.Visible = false;
    string folderPath = Server.MapPath("~/ImageFiles/");

    WebBrowser webrowse = sender as WebBrowser;
    //Bitmap bitmap = new Bitmap(webrowse.Width, webrowse.Height);

    Bitmap bitmap = new Bitmap(webrowse.Width, webrowse.Height, PixelFormat.Format16bppRgb565);

    webrowse.DrawToBitmap(bitmap, webrowse.Bounds);


    string Systemimagedownloadpath = System.Configuration.ConfigurationManager.AppSettings["Systemimagedownloadpath"].ToString();
    string fullOutputPath = Systemimagedownloadpath + Request.QueryString["VisitedId"].ToString() + ".png";
    MemoryStream stream = new MemoryStream();
    bitmap.Save(fullOutputPath, System.Drawing.Imaging.ImageFormat.Jpeg);



    //generating pdf code 
     Document pdfDoc = new Document(new iTextSharp.text.Rectangle(1100f, 20000.25f));
     PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
     pdfDoc.Open();
     iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(fullOutputPath);   
     img.ScaleAbsoluteHeight(20000);
     img.ScaleAbsoluteWidth(1024);     
     pdfDoc.Add(img);
     pdfDoc.Close();
     //Download the PDF file.
     Response.ContentType = "application/pdf";
     Response.AddHeader("content-disposition", "attachment;filename=ImageExport.pdf");
     Response.Cache.SetCacheability(HttpCacheability.NoCache);
     Response.Write(pdfDoc);
     Response.End();


}

Sie können auch auf meinen ältesten Beitrag verweisen, um weitere Informationen zu erhalten: Die Navigation zur Webseite wurde abgebrochen, um eine Nachricht im asp.net-Webformular zu erhalten

0

Mit Winnovative HTML to PDF converter können Sie einen HTML-String in eine einzelne Zeile konvertieren

byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlString, baseUrl);

Die Basis-URL wird verwendet, um die Bilder aufzulösen, auf die durch relative URLs in einer HTML-Zeichenfolge verwiesen wird. Alternativ können Sie vollständige URLs in HTML verwenden oder Bilder mit src = "data: image/png" als Bild-Tag einbetten.

Bei der Beantwortung von "fubaar" -Benutzerkommentaren zu Winnovative converter ist eine Korrektur erforderlich. Der Konverter verwendet IE nicht als Rendering-Engine. Tatsächlich hängt es nicht von installierter Software ab und das Rendering ist mit der WebKit-Engine kompatibel.

0
Winnovative

Ein weiterer Vorschlag ist es, die Lösung von https://grabz.it zu versuchen.

Sie bieten eine nette .NET-API, um Screenshots zu erfassen und auf einfache und flexible Weise zu bearbeiten.

Um es in Ihrer App verwenden zu können, müssen Sie zuerst Schlüssel + Geheimnis und Download das .NET SDK (kostenlos) herunterladen.

Nun ein kurzes Beispiel für die Verwendung.

Um die API zu verwenden, müssen Sie zunächst eine Instanz der GrabzItClient-Klasse erstellen und Ihren Anwendungsschlüssel und das Anwendungsgeheimnis von Ihrem GrabzIt-Konto an den Konstruktor übergeben, wie im folgenden Beispiel gezeigt:

//Create the GrabzItClient class
//Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
private GrabzItClient grabzIt = GrabzItClient.Create("Sign in to view your Application Key", "Sign in to view your Application Secret");

Um den HTML-Code in PDF zu konvertieren, müssen Sie nur Folgendes tun:

grabzIt.HTMLToPDF("<html><body><h1>Hello World!</h1></body></html>");

Sie können auch in ein Bild konvertieren:

grabzIt.HTMLToImage("<html><body><h1>Hello World!</h1></body></html>");     

Als nächstes müssen Sie das Bild speichern. Sie können eine der beiden verfügbaren Speichermethoden verwenden, Save, wenn das öffentlich zugängliche Rückruf-Handle verfügbar ist, und SaveTo, wenn nicht. Überprüfen Sie die Dokumentation für Details.

0
Johnny

Sie können auch Spire überprüfen, um mit diesem einfachen Code HTML to PDF zu erstellen

 string htmlCode = "<p>This is a p tag</p>";

//use single thread to generate the pdf from above html code
Thread thread = new Thread(() =>
{ pdf.LoadFromHTML(htmlCode, false, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();

// Save the file to PDF and preview it.
pdf.SaveToFile("output.pdf");
System.Diagnostics.Process.Start("output.pdf");

Ausführlicher Artikel: Konvertieren von HTML in PDF in asp.net C #

0
Satinder singh

Anstatt HTML direkt in PDF zu analysieren, können Sie eine Bitmap Ihrer HTML-Seite erstellen und dann die Bitmap in Ihre PDF einfügen, indem Sie beispielsweise iTextSharp verwenden.

Im Folgenden finden Sie einen Code zum Abrufen einer Bitmap einer URL. Ich habe es irgendwo hier auf SO gefunden. Wenn ich die Quelle finde, werde ich es verlinken.

public System.Drawing.Bitmap HTMLToImage(String strHTML)
{
    System.Drawing.Bitmap myBitmap = null;

    System.Threading.Thread myThread = new System.Threading.Thread(delegate()
    {
        // create a hidden web browser, which will navigate to the page
        System.Windows.Forms.WebBrowser myWebBrowser = new System.Windows.Forms.WebBrowser();
        // we don't want scrollbars on our image
        myWebBrowser.ScrollBarsEnabled = false;
        // don't let any errors shine through
        myWebBrowser.ScriptErrorsSuppressed = true;
        // let's load up that page!    
        myWebBrowser.Navigate("about:blank");

        // wait until the page is fully loaded
        while (myWebBrowser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
            System.Windows.Forms.Application.DoEvents();

        myWebBrowser.Document.Body.InnerHtml = strHTML;

        // set the size of our web browser to be the same size as the page
        int intScrollPadding = 20;
        int intDocumentWidth = myWebBrowser.Document.Body.ScrollRectangle.Width + intScrollPadding;
        int intDocumentHeight = myWebBrowser.Document.Body.ScrollRectangle.Height + intScrollPadding;
        myWebBrowser.Width = intDocumentWidth;
        myWebBrowser.Height = intDocumentHeight;
        // a bitmap that we will draw to
        myBitmap = new System.Drawing.Bitmap(intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding);
        // draw the web browser to the bitmap
        myWebBrowser.DrawToBitmap(myBitmap, new System.Drawing.Rectangle(0, 0, intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding));
    });
    myThread.SetApartmentState(System.Threading.ApartmentState.STA);
    myThread.Start();
    myThread.Join();

    return myBitmap;
}
0
Jimmy Mattsson

Probieren Sie diese PDF Duo .Net Konvertierungskomponente zum Konvertieren HTML in PDF von ASP.NET Anwendung ohne mit zusätzlichen DLLs.

Sie können die HTML-Zeichenfolge oder -Datei übergeben oder streamen, um die PDF-Datei zu generieren. Verwenden Sie den folgenden Code (Beispiel C #):

string file_html = @"K:\hdoc.html";   
string file_pdf = @"K:\new.pdf";   
try   
{   
    DuoDimension.HtmlToPdf conv = new DuoDimension.HtmlToPdf();   
    conv.OpenHTML(file_html);   
    conv.SavePDF(file_pdf);   
    textBox4.Text = "C# Example: Converting succeeded";   
}   

Info + C #/VB-Beispiele finden Sie unter: http://www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx

0
Constantine