c# - exportar - Generar PDF basado en código HTML(iTextSharp, PDFSharp?)
iron pdf c# example (9)
¿Habéis oído hablar de this ? Puede que esté respondiendo muy tarde pero creo que ayuda. Es muy simple y funciona bien.
var htmlContent = String.Format("<body>Hello world: {0}</body>",
DateTime.Now);
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
var pdfBytes = htmlToPdf.GeneratePdf(htmlContent);
Edit : Vine aquí con la pregunta de convertir el código HTML a PDF usando ''PDFSharp'' y descubrí que ''PDFSharp'' no puede hacerlo. Luego me enteré de NReco y funcionó para mí, así que sentí que podría ayudar a alguien como yo.
¿La biblioteca PDFSharp puede, como iTextSharp , generar archivos PDF * teniendo en cuenta el formato HTML * ? (negrita (fuerte), espaciado (br), etc.)
Anteriormente utilicé iTextSharp y manejé de manera aproximada (código a continuación):
string encodingMetaTag = "<meta http-equiv=/"Content-Type/" content=/"text/html; charset=utf-8/" />";
string htmlCode = "text <div> <b> bold </ b> or <u> underlined </ u> <div/>";
var sr = new StringReader (encodingMetaTag + htmlCode);
var pdfDoc = new Document (PageSize.A4, 10f, 10f, 10f, 0f);
var = new HTMLWorker htmlparser (pdfDoc);
PdfWriter.GetInstance (pdfDoc, HttpContext.Current.Response.OutputStream);
pdfDoc.Open ();
htmlparser.Parse (sr);
pdfDoc.Close ();
incorporado en el formulario HTML apropiado a un documento PDF relacionado con el objeto de clase HTMLWorker ... ¿y qué con PDFSharp ? ¿Tiene PDFSharp una solución similar ?
Antigua pregunta pero ninguna de las anteriores funcionó para mí. Luego probé el método generatepdf
de HtmlRenderer en combinación de pdfsharp . Espero que ayude: debe instalar un nuget llamado HtmlRenderer.pdfsharp
.
var doc = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf("Your html in a string",PageSize.A4);
PdfPage page = new PdfPage();
XImage img = XImage.FromGdiPlusImage(bitmap);
doc.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
xgr.DrawImage(img, 0, 0);
doc.Save(Server.MapPath("test.pdf"));
doc.Close();
En un proyecto que desarrollé el año pasado utilicé wkhtmltopdf ( http://wkhtmltopdf.org/ ) para generar pdf desde html, luego leí el archivo y se lo devolví al usuario.
Funciona bien para mí y podría ser una idea para ti ...
Le recomendaré NReco.PdfGenerator porque tiene licencia gratuita y de pago y es fácil de instalar desde nuget.
Página principal: this
Documentación: https://www.nrecosite.com/doc/NReco.PdfGenerator/
Si desea crear PDF desde el archivo html intente:
String html = File.ReadAllText("main.html");
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
htmlToPdf.GeneratePdf(html, null, "C:/Users/Tmp/Desktop/mapa.pdf");
No, PDFsharp actualmente no incluye código para analizar archivos HTML.
Sé que esta pregunta es antigua, pero aquí hay una manera limpia de hacerlo ...
Puedes usar HtmlRenderer combinado con PDFSharp para lograr esto:
Bitmap bitmap = new Bitmap(1200, 1800);
Graphics g = Graphics.FromImage(bitmap);
HtmlRenderer.HtmlContainer c = new HtmlRenderer.HtmlContainer();
c.SetHtml("<html><body style=''font-size:20px''>Whatever</body></html>");
c.PerformPaint(g);
PdfDocument doc = new PdfDocument();
PdfPage page = new PdfPage();
XImage img = XImage.FromGdiPlusImage(bitmap);
doc.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(doc.Pages[0]);
xgr.DrawImage(img, 0, 0);
doc.Save(@"C:/test.pdf");
doc.Close();
Algunas personas informan que la imagen final se ve un poco borrosa, aparentemente debido al anti-aliasing automático. Aquí hay un mensaje sobre cómo solucionarlo: http://forum.pdfsharp.com/viewtopic.php?f=2&t=1811&start=0
Sé que hay una pregunta muy antigua, pero me doy cuenta de que no hay nadie que diga realmente un método preciso para convertir un HTML en un PDF. Según mi prueba, descubrí que necesita el siguiente código para hacerlo con éxito.
Bitmap bitmap = new Bitmap(790, 1800);
Graphics g = Graphics.FromImage(bitmap);
XGraphics xg = XGraphics.FromGraphics(g, new XSize(bitmap.Width, bitmap.Height));
TheArtOfDev.HtmlRenderer.PdfSharp.HtmlContainer c = new TheArtOfDev.HtmlRenderer.PdfSharp.HtmlContainer();
c.SetHtml("Your html in a string here");
PdfDocument pdf = new PdfDocument();
PdfPage page = new PdfPage();
XImage img = XImage.FromGdiPlusImage(bitmap);
pdf.Pages.Add(page);
XGraphics xgr = XGraphics.FromPdfPage(pdf.Pages[0]);
c.PerformLayout(xgr);
c.PerformPaint(xgr);
xgr.DrawImage(img, 0, 0);
pdf.Save("test.pdf");
Hay otra forma de hacerlo, pero es posible que tenga problemas con el tamaño.
PdfDocument pdf = PdfGenerator.GeneratePdf(text, PageSize.A4);
pdf.Save("test.pdf");
Si necesita un análisis simple en su aplicación y tiene control sobre la entrada html, puede escribir su propia biblioteca para esto.
He creado uno en uno de mis proyectos, pero desafortunadamente aún no se puede compartir debido a las características personalizadas relacionadas con una aplicación específica.
Básicamente, debe seguir la siguiente lógica para implementar HTML básico en PDF:
- HTML simple de análisis de etiquetas
- Cree una lógica para reconocer los estilos comunes, es decir, negrita, cursiva, izquierda, centro, etc. y cree la clase PDFSharp con estas propiedades y asigne a Para, que se agregarán como atributos de estilo en HTML
- Manejar etiquetas de tabla y agregar filas y columnas en PDF
- Etiquetas de párrafo para añadir párrafos.
He dado una visión general muy amplia de la lógica basada en mi implementación.
Puede que tengas una idea mucho mejor :)
También puede consultar: Escribir contenido de la tabla HTML en un documento PDF usando iTextSharp en asp.net
HTML Renderer para PDF usando PdfSharp puede generar un PDF desde un HTML
- como una imagen, o
- como texto
Antes de insertarlo en el PDF.
Para renderizar como una imagen, por favor consulte el código de la respuesta de Diego.
Para renderizar como texto, por favor consulte el siguiente código:
static void Main(string[] args)
{
string html = File.ReadAllText(@"C:/Temp/Test.html");
PdfDocument pdf = PdfGenerator.GeneratePdf(html, PageSize.A4, 20, null, OnStylesheetLoad, OnImageLoadPdfSharp);
pdf.Save(@"C:/Temp/Test.pdf");
}
public static void OnImageLoadPdfSharp(object sender, HtmlImageLoadEventArgs e)
{
var imgObj = Image.FromFile(@"C:/Temp/Test.png");
e.Callback(XImage.FromGdiPlusImage(imgObj));
}
public static void OnStylesheetLoad(object sender, HtmlStylesheetLoadEventArgs e)
{
e.SetStyleSheet = @"h1, h2, h3 { color: navy; font-weight:normal; }";
}
Código HTML
<html>
<head>
<title></title>
<link rel="Stylesheet" href="StyleSheet" />
</head>
<body>
<h1>Images
<img src="ImageIcon" />
</h1>
</body>
</html>