Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de RawPrint a IronPDF en C#

Migrar de RawPrinta IronPDF: Guía completa de migración a C

La migración de RawPrintaIronPDFtransforma su flujo de trabajo documental de una transmisión de bytes de impresora de bajo nivel a una solución completa de creación e impresión de PDF. Esta guía proporciona una ruta de migración completa, paso a paso, que le permite crear, manipular e imprimir PDF con API de alto nivel en lugar de la gestión manual de la impresora.

Por qué migrar de RawPrinta IronPDF

Entender RawPrint

RawPrint es una colección de implementaciones que permiten enviar datos sin procesar directamente a una impresora. Es esencial para las aplicaciones que requieren la transmisión directa de comandos a las impresoras, evitando los controladores de impresora convencionales. Esta funcionalidad es especialmente útil en escenarios en los que se emplean impresoras especializadas, como creadores de etiquetas que utilizan ZPL (Zebra Programming Language) o EPL (Eltron Programming Language).

Uno de los puntos fuertes de RawPrintes su sencillez a la hora de enviar flujos de datos directamente a una impresora. Para los desarrolladores que se dirijan a entornos específicos de Windowsy necesiten una comunicación directa con la impresora, RawPrintofrece una vía eficaz que evita capas intermedias como controladores o interfaces gráficas.

Sin embargo, RawPrintNO es una biblioteca PDF, sólo envía datos a las impresoras. Esta limitación fundamental lo convierte en la elección equivocada para la mayoría de los escenarios de generación de documentos.

El problema principal: no hay creación de PDF

RawPrint tiene notables limitaciones que lo hacen inadecuado para los flujos de trabajo documentales modernos:

  1. Sin creación de PDF: RawPrintse centra únicamente en la transmisión de datos, careciendo de funcionalidades para la creación, renderizado o manipulación de PDF.

  2. Muy bajo nivel: al tratar directamente con bytes sin procesar, los desarrolladores deben tener un profundo conocimiento del lenguaje de comandos de la impresora, lo que la hace menos adecuada para tareas sencillas de impresión de documentos.

  3. específico de la plataforma: depende de los spoolers de impresión de Windows, lo que limita su aplicabilidad multiplataforma.

  4. Sin procesamiento de documentos: Solo transmisión de bytes sin capacidad de renderizado.

  5. Control limitado: Mínimas opciones de configuración de trabajos de impresión.

Comparación entre RawPrinte IronPDF

CaracterísticaRawPrintIronPDF
FuncionalidadEnvía datos de impresión sin procesar directamente a la impresoraCreación y manipulación integral de PDF
Caso prácticoImpresión especializada, como etiquetasGestión y creación general de documentos
Dependencia de la plataformaEspecífico de WindowsPlataforma cruzada
ComplejidadBajo nivel, requiere conocimientos de comandos de impresoraAPI de alto nivel y fácil de usar
Creación de PDFNo
Crear PDF a partir de HTMLNo
Crear PDF a partir de URLNo
Editar/Modificar PDFNo
Fusionar/Dividir PDFNo
Imprimir PDF existenteSí (bytes brutos)Sí (API de alto nivel)
Control de impresiónBásicoOpciones completas
Ideal paraNecesidades de acceso directo a la impresoraTareas relacionadas con PDF en aplicaciones web y de escritorio
FlexibilidadLimitado debido al manejo de bytes sin procesarExtensa con múltiples funcionalidades

A diferencia de RawPrint,IronPDFofrece una API robusta y versátil para manejar PDFs de forma integral. IronPDF, un nombre consolidado en el entorno .NET, permite a los desarrolladores crear, editar y convertir archivos PDF sin esfuerzo en todas las plataformas.

Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una compatibilidad entre plataformas que RawPrintno puede ofrecer.


Antes de empezar

Prerrequisitos

  1. <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acceso a NuGet: Capacidad para instalar paquetes NuGet
  3. Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com

Cambios en el paquete NuGet

# Remove RawPrint
dotnet remove package RawPrint

# Install IronPDF
dotnet add package IronPdf
# Remove RawPrint
dotnet remove package RawPrint

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuración de licencias

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Buscar el uso de RawPrint

# Identify all RawPrintusage
grep -r "using RawPrint" --include="*.cs" .
grep -r "Printer\|SendBytesToPrinter" --include="*.cs" .
# Identify all RawPrintusage
grep -r "using RawPrint" --include="*.cs" .
grep -r "Printer\|SendBytesToPrinter" --include="*.cs" .
SHELL

Referencia completa de la API

Cambios en el espacio de nombres

// Before: RawPrint(Windows interop)
using System.Runtime.InteropServices;
using System.Drawing.Printing;

// After: IronPDF
using IronPdf;
// Before: RawPrint(Windows interop)
using System.Runtime.InteropServices;
using System.Drawing.Printing;

// After: IronPDF
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Core API Mappings

RawPrintIronPDFNotas
<código>Printer.SendBytesToPrinter()</códigopdf.Print()Impresión de alto nivel
<código>Printer.OpenPrinter()</códigoN/ANo es necesario
<código>Printer.ClosePrinter()</códigoN/AAutomático
<código>Printer.StartDocPrinter()</códigoN/AAutomático
<código>Printer.WritePrinter()</códigoN/AAutomático
<código>Printer.EndDocPrinter()</códigoN/AAutomático
N/A<código>ChromePdfRenderer</códigoCreación de PDF
N/APdfDocument.Merge()Fusionar PDF
N/A<código>pdf.ApplyWatermark()</códigoAñadir marcas de agua

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a PDF

Antes (RawPrint):

// NuGet: Install-Package System.Drawing.Common
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Text;

class RawPrinterHelper
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public class DOCINFOA
    {
        [MarshalAs(UnmanagedType.LPStr)] public string pDocName;
        [MarshalAs(UnmanagedType.LPStr)] public string pOutputFile;
        [MarshalAs(UnmanagedType.LPStr)] public string pDataType;
    }

    [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

    [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool ClosePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

    [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndDocPrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool StartPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten);

    public static bool SendStringToPrinter(string szPrinterName, string szString)
    {
        IntPtr pBytes;
        Int32 dwCount;
        dwCount = szString.Length;
        pBytes = Marshal.StringToCoTaskMemAnsi(szString);
        IntPtr hPrinter;
        if (OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero))
        {
            DOCINFOA di = new DOCINFOA();
            di.pDocName = "HTML Document";
            di.pDataType = "RAW";
            if (StartDocPrinter(hPrinter, 1, di))
            {
                if (StartPagePrinter(hPrinter))
                {
                    Int32 dwWritten;
                    WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                    EndPagePrinter(hPrinter);
                }
                EndDocPrinter(hPrinter);
            }
            ClosePrinter(hPrinter);
            Marshal.FreeCoTaskMem(pBytes);
            return true;
        }
        return false;
    }
}

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        // RawPrintcannot directly convert HTML to PDF
        // It sends raw data to printer, no PDF generation capability
        RawPrinterHelper.SendStringToPrinter("Microsoft Print to PDF", html);
    }
}
// NuGet: Install-Package System.Drawing.Common
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Text;

class RawPrinterHelper
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public class DOCINFOA
    {
        [MarshalAs(UnmanagedType.LPStr)] public string pDocName;
        [MarshalAs(UnmanagedType.LPStr)] public string pOutputFile;
        [MarshalAs(UnmanagedType.LPStr)] public string pDataType;
    }

    [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);

    [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool ClosePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di);

    [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndDocPrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool StartPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool EndPagePrinter(IntPtr hPrinter);

    [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
    public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten);

    public static bool SendStringToPrinter(string szPrinterName, string szString)
    {
        IntPtr pBytes;
        Int32 dwCount;
        dwCount = szString.Length;
        pBytes = Marshal.StringToCoTaskMemAnsi(szString);
        IntPtr hPrinter;
        if (OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero))
        {
            DOCINFOA di = new DOCINFOA();
            di.pDocName = "HTML Document";
            di.pDataType = "RAW";
            if (StartDocPrinter(hPrinter, 1, di))
            {
                if (StartPagePrinter(hPrinter))
                {
                    Int32 dwWritten;
                    WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                    EndPagePrinter(hPrinter);
                }
                EndDocPrinter(hPrinter);
            }
            ClosePrinter(hPrinter);
            Marshal.FreeCoTaskMem(pBytes);
            return true;
        }
        return false;
    }
}

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        // RawPrintcannot directly convert HTML to PDF
        // It sends raw data to printer, no PDF generation capability
        RawPrinterHelper.SendStringToPrinter("Microsoft Print to PDF", html);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este ejemplo demuestra la diferencia arquitectónica fundamental. RawPrintrequiere más de 60 líneas de código con múltiples importaciones de DLL de winspool.Drv, gestión manual de la impresora (OpenPrinter, StartDocPrinter, WritePrinter, EndDocPrinter, ClosePrinter) y gestión de memoria, y aún así no puede crear un PDF. Solo envía datos sin procesar a la impresora, sin capacidad de renderizado.

IronPDF realiza la tarea en 5 líneas: crea un ChromePdfRenderer, llama a RenderHtmlAsPdf(), y SaveAs(). Consulte la documentación HTML a PDF para ver ejemplos completos.

Ejemplo 2: Conversión de URL a PDF

Antes (RawPrint):

// NuGet: Install-Package System.Drawing.Common
using System;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;

class RawPrinterHelper
{
    // ... (same DLL imports as above) ...

    public static bool SendStringToPrinter(string szPrinterName, string szString)
    {
        IntPtr pBytes = Marshal.StringToCoTaskMemAnsi(szString);
        IntPtr hPrinter;
        if (OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero))
        {
            DOCINFOA di = new DOCINFOA();
            di.pDocName = "Web Page";
            di.pDataType = "RAW";
            if (StartDocPrinter(hPrinter, 1, di))
            {
                if (StartPagePrinter(hPrinter))
                {
                    Int32 dwWritten;
                    WritePrinter(hPrinter, pBytes, szString.Length, out dwWritten);
                    EndPagePrinter(hPrinter);
                }
                EndDocPrinter(hPrinter);
            }
            ClosePrinter(hPrinter);
            Marshal.FreeCoTaskMem(pBytes);
            return true;
        }
        return false;
    }
}

class Program
{
    static void Main()
    {
        // RawPrintcannot render web pages - only sends raw text/data
        // This would just print HTML source code, not rendered content
        using (WebClient client = new WebClient())
        {
            string htmlSource = client.DownloadString("https://example.com");
            // This prints raw HTML, not a rendered PDF
            RawPrinterHelper.SendStringToPrinter("Microsoft Print to PDF", htmlSource);
            Console.WriteLine("Raw HTML sent to printer (not rendered)");
        }
    }
}
// NuGet: Install-Package System.Drawing.Common
using System;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;

class RawPrinterHelper
{
    // ... (same DLL imports as above) ...

    public static bool SendStringToPrinter(string szPrinterName, string szString)
    {
        IntPtr pBytes = Marshal.StringToCoTaskMemAnsi(szString);
        IntPtr hPrinter;
        if (OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero))
        {
            DOCINFOA di = new DOCINFOA();
            di.pDocName = "Web Page";
            di.pDataType = "RAW";
            if (StartDocPrinter(hPrinter, 1, di))
            {
                if (StartPagePrinter(hPrinter))
                {
                    Int32 dwWritten;
                    WritePrinter(hPrinter, pBytes, szString.Length, out dwWritten);
                    EndPagePrinter(hPrinter);
                }
                EndDocPrinter(hPrinter);
            }
            ClosePrinter(hPrinter);
            Marshal.FreeCoTaskMem(pBytes);
            return true;
        }
        return false;
    }
}

class Program
{
    static void Main()
    {
        // RawPrintcannot render web pages - only sends raw text/data
        // This would just print HTML source code, not rendered content
        using (WebClient client = new WebClient())
        {
            string htmlSource = client.DownloadString("https://example.com");
            // This prints raw HTML, not a rendered PDF
            RawPrinterHelper.SendStringToPrinter("Microsoft Print to PDF", htmlSource);
            Console.WriteLine("Raw HTML sent to printer (not rendered)");
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Render a live website directly to PDF with full CSS, JavaScript, and images
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Website rendered to PDF successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        // Render a live website directly to PDF with full CSS, JavaScript, and images
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("Website rendered to PDF successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

RawPrint no puede procesar páginas web, sólo envía texto/datos sin procesar. El método RawPrintdescarga el código fuente HTML y lo envía directamente a la impresora, con lo que se imprime código HTML sin procesar, no contenido renderizado. La función RenderUrlAsPdf() deIronPDFcaptura la página web completamente renderizada con CSS, JavaScript e imágenes. Más información en nuestros tutoriales.

Ejemplo 3: Formato del documento

Antes (RawPrint):

// NuGet: Install-Package System.Drawing.Common
using System;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Text;

class RawPrinterHelper
{
    // ... (same DLL imports) ...

    public static bool SendBytesToPrinter(string szPrinterName, byte[] pBytes)
    {
        IntPtr pUnmanagedBytes = Marshal.AllocCoTaskMem(pBytes.Length);
        Marshal.Copy(pBytes, 0, pUnmanagedBytes, pBytes.Length);
        IntPtr hPrinter;
        if (OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero))
        {
            DOCINFOA di = new DOCINFOA();
            di.pDocName = "Raw Document";
            di.pDataType = "RAW";
            if (StartDocPrinter(hPrinter, 1, di))
            {
                if (StartPagePrinter(hPrinter))
                {
                    Int32 dwWritten;
                    WritePrinter(hPrinter, pUnmanagedBytes, pBytes.Length, out dwWritten);
                    EndPagePrinter(hPrinter);
                }
                EndDocPrinter(hPrinter);
            }
            ClosePrinter(hPrinter);
            Marshal.FreeCoTaskMem(pUnmanagedBytes);
            return true;
        }
        return false;
    }
}

class Program
{
    static void Main()
    {
        // RawPrintrequires manual PCL/PostScript commands for formatting
        string pclCommands = "\x1B&l0O\x1B(s0p16.66h8.5v0s0b3T";
        string text = "Plain text document - limited formatting";
        byte[] data = Encoding.ASCII.GetBytes(pclCommands + text);
        RawPrinterHelper.SendBytesToPrinter("HP LaserJet", data);
    }
}
// NuGet: Install-Package System.Drawing.Common
using System;
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System.Text;

class RawPrinterHelper
{
    // ... (same DLL imports) ...

    public static bool SendBytesToPrinter(string szPrinterName, byte[] pBytes)
    {
        IntPtr pUnmanagedBytes = Marshal.AllocCoTaskMem(pBytes.Length);
        Marshal.Copy(pBytes, 0, pUnmanagedBytes, pBytes.Length);
        IntPtr hPrinter;
        if (OpenPrinter(szPrinterName, out hPrinter, IntPtr.Zero))
        {
            DOCINFOA di = new DOCINFOA();
            di.pDocName = "Raw Document";
            di.pDataType = "RAW";
            if (StartDocPrinter(hPrinter, 1, di))
            {
                if (StartPagePrinter(hPrinter))
                {
                    Int32 dwWritten;
                    WritePrinter(hPrinter, pUnmanagedBytes, pBytes.Length, out dwWritten);
                    EndPagePrinter(hPrinter);
                }
                EndDocPrinter(hPrinter);
            }
            ClosePrinter(hPrinter);
            Marshal.FreeCoTaskMem(pUnmanagedBytes);
            return true;
        }
        return false;
    }
}

class Program
{
    static void Main()
    {
        // RawPrintrequires manual PCL/PostScript commands for formatting
        string pclCommands = "\x1B&l0O\x1B(s0p16.66h8.5v0s0b3T";
        string text = "Plain text document - limited formatting";
        byte[] data = Encoding.ASCII.GetBytes(pclCommands + text);
        RawPrinterHelper.SendBytesToPrinter("HP LaserJet", data);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial; margin: 40px; }
                    h1 { color: #2c3e50; font-size: 24px; }
                    p { line-height: 1.6; color: #34495e; }
                    .highlight { background-color: yellow; font-weight: bold; }
                </style>
            </head>
            <body>
                <h1>Formatted Document</h1>
                <p>This is a <span class='highlight'>beautifully formatted</span> document with CSS styling.</p>
                <p>Complex layouts, fonts, colors, and images are fully supported.</p>
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("formatted.pdf");
        Console.WriteLine("Formatted PDF created successfully");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = @"
            <html>
            <head>
                <style>
                    body { font-family: Arial; margin: 40px; }
                    h1 { color: #2c3e50; font-size: 24px; }
                    p { line-height: 1.6; color: #34495e; }
                    .highlight { background-color: yellow; font-weight: bold; }
                </style>
            </head>
            <body>
                <h1>Formatted Document</h1>
                <p>This is a <span class='highlight'>beautifully formatted</span> document with CSS styling.</p>
                <p>Complex layouts, fonts, colors, and images are fully supported.</p>
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("formatted.pdf");
        Console.WriteLine("Formatted PDF created successfully");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

RawPrint requiere comandos PCL/PostScript manuales ("\x1B&l0O\x1B(s0p16.66h8.5v0s0b3T") incluso para el formateo básico. Los desarrolladores deben conocer en profundidad el lenguaje de comandos de la impresora.IronPDFutiliza HTML y CSS estándar para el formateo: los diseños, fuentes, colores e imágenes complejos son totalmente compatibles sin necesidad de conocimientos específicos de impresión.


Resumen comparativo de características

CaracterísticaRawPrintIronPDF
Creación de PDF
HTML a PDFNo
URL a PDFNo
Crear desde ceroNo
Manipulación de PDF
Fusionar PDFNo
Dividir PDFNo
Añadir marcas de aguaNo
Editar existenteNo
Impresión
Imprimir PDFSí (en bruto)Sí (alto nivel)
Imprimir diálogoNo
Múltiples copiasLimitado
Control de PPPNo
DúplexNo
Plataforma
Windows
LinuxNo
macOSNo
DockerNo
Otros
SeguridadNo
Firmas digitalesNo
PDF/ANo

Nuevas capacidades tras la migración

Tras migrar a IronPDF, obtendrá funciones que RawPrintno puede ofrecer:

Fusión de PDF

var pdfs = pdfFiles.Select(f => PdfDocument.FromFile(f)).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("complete.pdf");
var pdfs = pdfFiles.Select(f => PdfDocument.FromFile(f)).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("complete.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Imprimir con ajustes

var pdf = PdfDocument.FromFile("report.pdf");

pdf.Print(new PrintOptions
{
    PrinterName = "HP LaserJet",
    NumberOfCopies = 2,
    DPI = 300,
    GrayScale = false
});
var pdf = PdfDocument.FromFile("report.pdf");

pdf.Print(new PrintOptions
{
    PrinterName = "HP LaserJet",
    NumberOfCopies = 2,
    DPI = 300,
    GrayScale = false
});
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Crear e imprimir en un solo flujo de trabajo

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
    <h1>Invoice #12345</h1>
    <p>Customer: John Doe</p>
    <p>Amount: $150.00</p>
");

// Print directly
pdf.Print("HP LaserJet");

// Or save first
pdf.SaveAs("invoice.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
    <h1>Invoice #12345</h1>
    <p>Customer: John Doe</p>
    <p>Amount: $150.00</p>
");

// Print directly
pdf.Print("HP LaserJet");

// Or save first
pdf.SaveAs("invoice.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Lista de comprobación de la migración

Pre-Migración

  • [Identifique todos los usos de RawPrint(SendBytesToPrinter, OpenPrinter, etc.)
  • [ ] Documente los nombres de impresoras utilizados en su aplicación
  • [ ] Tenga en cuenta cualquier código externo de creación de PDF que pueda consolidarse
  • [ ] Obtenga la clave de licencia deIronPDFen ironpdf.com

Actualizaciones de código

  • [Eliminar el paquete RawPrint: dotnet remove paquete RawPrint
  • [ ] Instalar el paquete IronPdf: dotnet add package IronPdf
  • [ ] Sustituir la impresión en bruto por pdf.Print()
  • [ ] Eliminar la gestión manual de manijas (OpenPrinter, ClosePrinter, etc.)
  • [ ] Consolidar la creación e impresión de PDF en un único flujo de trabajo
  • [ ] Añadir inicialización de licencia al inicio de la aplicación

Pruebas

  • [ ] Impresión de prueba en impresoras de destino
  • [ ] Verificar la calidad de impresión
  • [ ] Probar varias copias
  • [ ] Prueba de impresión silenciosa
  • [Verificación multiplataforma si es necesario

Conclusión

La elección entre RawPrinteIronPDFdepende en gran medida de las tareas y objetivos específicos que un desarrollador pretenda alcanzar. Mientras que RawPrintofrece ventajas especializadas de bajo nivel necesarias para la comunicación directa con impresoras (como impresoras de etiquetas que utilizan ZPL o EPL),IronPDFproporciona una solución versátil de alto nivel adecuada para tareas generales de manipulación de PDF y creación de documentos.

Los cambios clave en esta migración son:

  1. Arquitectura: Transmisión de bytes de bajo nivel → API PDF de alto nivel
  2. Complejidad: 60+ líneas con importaciones DLL → 5 líneas de código
  3. Capacidades: Sólo impresión → Crear, editar, fusionar, dividir, imprimir
  4. Formato: Comandos PCL/PostScript manuales → HTML/CSS estándar
  5. Plataforma: Solo Windows→ Multiplataforma
  6. Gestión de Manejos: Manual (OpenPrinter/ClosePrinter) → Automático
  7. Renderización de URL: Fuente HTML sin procesar → Páginas completamente renderizadas
  8. Control de impresión: Básico → Opciones completas (copias, PPP, dúplex)

De este modo, los desarrolladores pueden seleccionar estratégicamente la biblioteca que se ajuste a sus necesidades tecnológicas y a las limitaciones del proyecto, garantizando que sus aplicaciones sean eficientes y robustas para el manejo de documentos.

Explore la documentación completa de IronPDF, tutoriales y guía de impresión para acelerar su migración a RawPrint.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más