2009-02-20 59 views
10

Estoy enviando correos electrónicos que tienen facturas adjuntas como archivos PDF. Ya estoy, en otra parte de la aplicación, creando las facturas en una página .aspx. Me gustaría usar Server.Execute para devolver el HTML de salida y generar un PDF a partir de eso. De lo contrario, tendría que usar una herramienta de informes para "dibujar" la factura en un PDF. Eso suena por muchas razones, una de las más importantes es que tendría que actualizar tanto la página .aspx como el informe para cada cambio menor. Qué hacer ...¿Generar PDF desde ASP.NET desde contenido HTML/CSS sin formato?

+0

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

Respuesta

5

No hay forma de generar un PDF desde una cadena HTML directamente dentro de .NET, pero hay varios controles de terceros que funcionan bien. éxito

que he tenido con éste: http://www.html-to-pdf.net y esto: http://www.htmltopdfasp.net

Las preguntas importantes son:

  1. Qué se representan correctamente en comparación con los 3 principales navegadores: Internet Explorer, FF y Safari/Chrome?
  2. ¿Se adapta bien a CSS?
  3. ¿El control tiene su propio motor de renderizado? Si es así, bórrelo. No desea confiar en un motor de renderizado interno: los navegadores tienen un problema bastante difícil para que todo sea perfecto.
  4. ¿Qué dependencias requiere el control de terceros? Cuanto menos, mejor.

Hay algunos otros, pero se ocupan de las pantallas ActiveX y tal.

+0

El enlace htmltopdfasp no funciona. – prograde

1

Siempre que pueda asegurarse de utilizar el XHTML adecuado, también puede usar un producto como Alt-Soft's Xml2PDF para convertir XML (XHTML) en PDF mediante XSLT/XSL-FO.

¡Se requiere una curva de aprendizaje para dominar, pero funciona muy bien una vez que la has "conseguido"!

Marc

+0

Licencia estándar: US $ 1,495 – Junto

+0

@Junto: sí - entonces - crear software cuesta dinero - por lo que la herramienta no es solo ** GRATIS ** - sino que ** ES ** una versión de estación de trabajo Xml2Pdf gratis, también –

+0

@marc -s Por supuesto, cuesta dinero, pero tampoco está de más divulgar que se trata de un producto pago y se requiere la licencia estándar para generar archivos PDF a partir de contenido HTML. – Junto

2

Esto suena como un trabajo para Prince. Puede tomar HTML y CSS y generar un PDF, que luego puede presentar a sus usuarios. Es compatible con CSS3 mejor que la mayoría de los navegadores web (el personal incluye Håkon Wium Lie, el inventor de CSS).

Consulte el samples, especialmente los de las páginas de Wikipedia, para la hermosa salida que puede generar. También hay un interesante Google Tech Talk con los autores.

Editar: Hay una .NET wrapper disponible.

+0

Este producto se ve bien, pero no está bien diseñado para ser empaquetado con una aplicación .NET. Parece que tienen un .dll que puedes envolver al menos. –

+0

No puedo decir que lo haya intentado, lo he usado con MindTouch Deki, que llama directamente al .exe.Lo que puedo decir es que el resultado es magnífico: es más parecido a LaTeX que a CutePDF de Internet Explorer :) – crb

+1

No cavar el logotipo que insertan en la primera página de cada documento – Levitikon

1

Dado que se está produciendo la respuesta, puede utilizar una herramienta como Report.NET: http://sourceforge.net/projects/report/

estoy de acuerdo con las respuestas que dicen que no se puede convertir directamente desde la salida a PDF, sin embargo, como se puede "re -llamar "la página y obtener el HTML como una secuencia y convertirlo. Sin embargo, no estoy seguro de qué herramienta desearía usar para hacer esto. En otras palabras, es posible, pero no estoy seguro de que valga la pena. Las libs de creación de PDF, como Informe.NET, a pesar de que obligan a reutilizar un poco de lógica y ninguna convergencia automática, es más fácil.

No he probado este componente, pero he escuchado cosas buenas de los que sí lo han hecho. El modelo se parece más a HTML, pero no estoy seguro de que puede simplemente enviar un ASPX rendida ante él para crear PDF: http://www.websupergoo.com/abcpdf-8.htm

0

me gustaría ir una ruta diferente. Suponiendo que está usando SQL Server, use SSRS y genere el PDF de esa manera.

1

Si intentas encontrar algún software html to pdf a través de GOOGLE obtendrás un montón de estas cosas. Hay alrededor de 10 líderes, pero la mayoría usa IE dlls en modo de fondo. Solo dos de ellos usan su propio motor de análisis. Pruebe el componente PDF Duo .NET en su proyecto ASP.NET si desea crear un PDF programáticamente. Es un componente liviano para una generación de facturas PDF en frío, informes, p.

+0

Licencia del sitio: US $ 1170 – Junto

2

wkhtmltopdf es un exe gratuito y genial para generar pdf desde html. Está escrito en C++. Pero nReco htmltopdf es una biblioteca dotnet envoltura para esta herramienta impresionante. Implementé el uso de esta biblioteca de dotnet y fue tan bueno que lo hace todo por sí solo, solo debe proporcionar html como fuente de datos.

/// <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 función anterior es un extracto de la publicación del enlace a continuación que lo explica en detalle. HTML to PDF in ASP.Net

2

La pregunta inicial es sobre la conversión de otra página aspx que contiene una factura a un documento PDF. La factura probablemente está utilizando algunos datos de sesión y el usuario sugiere usar Server.Execute() para obtener el código HTML de la página de factura y luego convertir ese código a PDF. La conversión directa de la URL de la factura no es posible porque se crearía una nueva sesión durante la conversión y se perderían los datos de la sesión.

Esta es una buena técnica para conservar los datos de sesión durante la conversión que se aplica en Convert a HTML Page to PDF in Same Session ASP.NET Demo de la biblioteca EvoPdf. El código completo en C# para obtener la cadena HTML representado por la página de la factura y para convertir esa cadena a PDF es:

// 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

Una solución mínima posible el uso de Server.Execute() para obtener el código HTML de la página de la factura y convertir ese código a un PDF utilizando winnovative html to pdf api for .net es:

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

puede utilizar PDFsharp o iTextSharp para convertir hTML a PDF. PDFSharp no es gratis.

Cuestiones relacionadas