c# pdf - Convertir la cadena HTML a la imagen




itextsharp from (3)

Gracias a todos por sus respuestas. HtmlRenderer la HtmlRenderer externa de HtmlRenderer (biblioteca) para lograr lo mismo y se encuentra debajo del amoghnatu.wordpress.com/2013/05/13/… para el mismo.

Aquí está el código para esto

public void ConvertHtmlToImage()
{
   Bitmap m_Bitmap = new Bitmap(400, 600);
   PointF point = new PointF(0, 0);
   SizeF maxSize = new System.Drawing.SizeF(500, 500);
   HtmlRenderer.HtmlRender.Render(Graphics.FromImage(m_Bitmap),
                                           "<html><body><p>This is a shitty html code</p>"
                                           + "<p>This is another html line</p></body>",
                                            point, maxSize);

   m_Bitmap.Save(@"C:\Test.png", ImageFormat.Png);
}

Tengo una variable de cadena que contiene el marcado HTML. Este marcado HTML básicamente representa el contenido del correo electrónico.

Ahora quiero crear una imagen a partir de este contenido de cadena que en realidad contiene el marcado HTML. No quiero crear el archivo HTML escribiendo este contenido en ellos. Solo quiero crear un archivo de imagen usando esta cadena.

Esto es lo que tengo:

string emailBody="<html><head></head><body><p>This is my text<p>...</body</html>"

¿Cómo puedo crear una imagen a partir de este contenido de cadena de emailBody ?


Intenta lo siguiente:

using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;

class Program
{
    static void Main(string[] args)
    {
        var source =  @"
        <!DOCTYPE html>
        <html>
            <body>
                <p>An image from W3Schools:</p>
                <img 
                    src=""http://www.w3schools.com/images/w3schools_green.jpg"" 
                    alt=""W3Schools.com"" 
                    width=""104"" 
                    height=""142"">
            </body>
        </html>";
        StartBrowser(source);
        Console.ReadLine();
    }

    private static void StartBrowser(string source)
    {
        var th = new Thread(() =>
        {
            var webBrowser = new WebBrowser();
            webBrowser.ScrollBarsEnabled = false;
            webBrowser.DocumentCompleted +=
                webBrowser_DocumentCompleted;
            webBrowser.DocumentText = source;
            Application.Run();
        });
        th.SetApartmentState(ApartmentState.STA);
        th.Start();
    }

    static void 
        webBrowser_DocumentCompleted(
        object sender, 
        WebBrowserDocumentCompletedEventArgs e)
    {
        var webBrowser = (WebBrowser)sender;
        using (Bitmap bitmap = 
            new Bitmap(
                webBrowser.Width, 
                webBrowser.Height))
        {
            webBrowser
                .DrawToBitmap(
                bitmap, 
                new System.Drawing
                    .Rectangle(0, 0, bitmap.Width, bitmap.Height));
            bitmap.Save(@"filename.jpg", 
                System.Drawing.Imaging.ImageFormat.Jpeg);
        }
    }
}

Nota: Los créditos deben ir a Hans Passant por su excelente answer a la pregunta Control de WebBrowser en un nuevo hilo que inspiró esta solución.


Lamento no estar de acuerdo, pero de acuerdo con las reglas para analizar un valor de color heredado publicado por @Yuhong Bao , chucknorris NO equivale a #CC0000 , sino a #C00000 , un tono de rojo muy similar pero ligeramente diferente. Usé el complemento ColorZilla de Firefox para verificar esto.

Las reglas establecen:

  • haga que la cadena tenga una longitud que sea un múltiplo de 3 agregando 0s: chucknorris0
  • separe la cuerda en 3 cuerdas de igual longitud: chuc knor ris0
  • truncar cada cadena a 2 caracteres: ch kn ri
  • mantenga los valores hexadecimales y agregue 0 donde sea necesario: C0 00 00

Pude usar estas reglas para interpretar correctamente las siguientes cadenas:

  • LuckyCharms
  • Luck
  • LuckBeALady
  • LuckBeALadyTonight
  • GangnamStyle

ACTUALIZACIÓN: los encuestados originales que dijeron que el color era #CC0000 han editado sus respuestas para incluir la corrección.







c# html asp.net