crear pdf con itextsharp con imágenes de la base de datos

Tengo un proceso donde el html se almacena en la base de datos con enlaces de imagen. las imágenes también se almacenan en db también. Creé una acción de controlador que lee la imagen de la base de datos. el camino que estoy generando es algo así como /File/Image?path=Root/test.jpg . esta ruta de la imagen está incrustada en html en la etiqueta img como logo

Estoy tratando de usar itextsharp para leer el html de la base de datos y crear un documento en pdf

 string _html = GenerateDocumentHelpers.CommissioningSheet(fleetId); string _html = GenerateDocumentHelpers.CommissioningSheet(fleetId); Document _document = new Document(PageSize.A4, 80, 50, 30, 65); MemoryStream _memStream = new MemoryStream(); PdfWriter _writer = PdfWriter.GetInstance(_document, _memStream); StringReader _reader = new StringReader(_html); HTMLWorker _worker = new HTMLWorker(_document); _document.Open(); _worker.Parse(_reader); _document.Close(); Response.Clear(); Response.AddHeader("content-disposition", "attachment; filename=Commissioning.pdf"); Response.ContentType = "application/pdf"; Response.Buffer = true; Response.OutputStream.Write(_memStream.GetBuffer(), 0, _memStream.GetBuffer().Length); Response.OutputStream.Flush(); Response.End(); return new FileStreamResult(Response.OutputStream, "application/pdf"); 

Este código me da un error de carácter ilegal. esto viene de la etiqueta de la imagen, no está reconociendo? y = caracteres, ¿hay alguna forma de que pueda renderizar este html con la etiqueta img para que cuando cree un pdf genere el html y la imagen de la base de datos y cree un pdf o si itextsharp no puede hacerlo, me puede proporcionar cualesquiera otras herramientas de código abierto de terceros que puedan realizar esta tarea?

Si la fuente de la imagen no es una URL totalmente cualificada, incluido el protocolo, iTextSharp supone que se trata de una URL basada en archivos. La solución es simplemente convertir todos los enlaces de imagen a absolutos en la forma http://sofes.miximages.com/html/001.jpg .

También puede establecer una propiedad global en el analizador que funciona de forma muy similar a la etiqueta HTML :

 //Create a provider collection to set various processing properties System.Collections.Generic.Dictionary providers = new System.Collections.Generic.Dictionary(); //Set the image base. This will be prepended to the SRC so watch your forward slashes providers.Add(HTMLWorker.IMG_BASEURL, "http://YOUR_DOMAIN"); //Bind the providers to the worker worker.SetProviders(providers); worker.Parse(reader); 

A continuación se muestra una aplicación WinForms completa de C # 2010 que se dirige a iTextSharp 5.1.2.0 que muestra cómo usar una imagen relativa y establecer su base usando el proveedor global. Todo es más o menos lo mismo que tu código, aunque utilizo un montón de instrucciones para garantizar una limpieza adecuada. Asegúrese de ver las barras diagonales inicial y final en todo, la URL base se antepone directamente solo al atributo SRC y puede terminar con barras diagonales dobles si no se realiza correctamente. Estoy metiendo un dominio aquí, pero deberías poder usar fácilmente el objeto System.Web.HttpContext.Current.Request .

 using System; using System.IO; using System.Windows.Forms; using iTextSharp.text; using iTextSharp.text.html.simpleparser; using iTextSharp.text.pdf; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string html = @""; string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "HtmlTest.pdf"); using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) { using (Document doc = new Document(PageSize.TABLOID)) { using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) { doc.Open(); using (StringReader reader = new StringReader(html)) { using (HTMLWorker worker = new HTMLWorker(doc)) { //Create a provider collection to set various processing properties System.Collections.Generic.Dictionary providers = new System.Collections.Generic.Dictionary(); //Set the image base. This will be prepended to the SRC so watch your forward slashes providers.Add(HTMLWorker.IMG_BASEURL, "http://www.vendiadvertising.com"); //Bind the providers to the worker worker.SetProviders(providers); worker.Parse(reader); } } doc.Close(); } } } this.Close(); } } }