마이그레이션 가이드 RawPrint에서 IronPDF로의 마이그레이션 방법 (C#) 커티스 차우 업데이트됨:2월 1, 2026 다운로드 IronPDF NuGet 다운로드 DLL 다운로드 윈도우 설치 프로그램 무료 체험 시작하기 LLM용 사본 LLM용 사본 LLM용 마크다운 형식으로 페이지를 복사하세요 ChatGPT에서 열기 ChatGPT에 이 페이지에 대해 문의하세요 제미니에서 열기 제미니에게 이 페이지에 대해 문의하세요 Grok에서 열기 Grok에게 이 페이지에 대해 문의하세요 혼란 속에서 열기 Perplexity에게 이 페이지에 대해 문의하세요 공유하다 페이스북에 공유하기 트위터에 공유하기 LinkedIn에 공유하기 URL 복사 이메일로 기사 보내기 RawPrint에서 IronPDF로의 이전은 낮은 수준의 프린터 바이트 전송에서 포괄적인 PDF 생성 및 인쇄 솔루션으로 문서 워크플로를 변환합니다. 이 가이드는 고급 API를 통해 수동 프린터 핸들 관리를 대신하여 PDF를 생성, 조작 및 인쇄할 수 있는 완전한 단계별 마이그레이션 경로를 제공합니다. 왜 RawPrint에서 IronPDF로 마이그레이션하는가 RawPrint이해하기 RawPrint는 원시 데이터를 프린터로 직접 보내는 구현 모음입니다. 일반적인 프린터 드라이버를 우회하여 프린터에 직접 명령을 전송해야 하는 애플리케이션에 필수적입니다. 이 기능은 ZPL(Zebra Programming Language)이나 EPL(Eltron Programming Language)을 사용하는 라벨 생성기와 같은 특수 프린터를 사용하는 시나리오에서 특히 유용합니다. RawPrint의 한 가지 강점은 데이터 스트림을 프린터로 직접 보내는 데 있어 간단하다는 것입니다. Windows특정 환경을 목표로 하고 직접적인 프린터 통신이 필요한 개발자에게 RawPrint는 드라이버나 그래픽 인터페이스 같은 중간 계층을 우회하는 효율적인 경로를 제공합니다. 하지만, RawPrint는 PDF 라이브러리가 아니며, 단지 프린터에 데이터를 전송할 뿐입니다. 이 근본적인 제한은 대부분의 문서 생성 시나리오에서 잘못된 선택임을 의미합니다. 핵심 문제: PDF 생성 불가 RawPrint에는 현대 문서 워크플로에 적합하지 않은 주요 제한이 있습니다: PDF 생성 불가: RawPrint는 단순히 데이터 전송에 집중되어 있으며, PDF 생성, 렌더링, 또는 조작 기능이 부족합니다. 아주 낮은 수준: 원시 바이트를 직접 처리함으로써, 개발자는 프린터의 명령 언어에 대한 깊은 이해가 필요하며, 이는 간단한 문서 인쇄 작업에 덜 적합합니다. 플랫폼 의존성: Windows인쇄 스풀러에 의존하여, 크로스 플랫폼 적용 가능성을 제한합니다. 문서 처리 불가: 렌더링 기능 없이 바이트 전송만 가능. 제어 제한: 최소한의 인쇄 작업 구성 옵션. RawPrintvsIronPDF비교 기능 RawPrint IronPDF 기능 프린터로 원시 인쇄 데이터를 직접 전송 포괄적인 PDF 생성 및 조작 사용 사례 라벨과 같은 특수 인쇄 일반 문서 관리 및 생성 플랫폼 의존성 Windows 전용 크로스 플랫폼 복잡성 낮은 수준으로, 프린터 명령 지식 필요 고급 사용자 친화적 API PDF 생성 아니요 예 HTML에서 PDF 생성 아니요 예 URL에서 PDF 생성 아니요 예 PDF 편집/수정 아니요 예 PDF 병합/분할 아니요 예 기존 PDF 인쇄 예 (원시 바이트) 예 (고급 API) 인쇄 제어 기초적인 전체 옵션 이상적임 직접적인 프린터 접근 필요 웹 및 데스크톱 앱에서 PDF 관련 작업 유연성 원시 바이트 처리로 인해 제한됨 다양한 기능 제공 RawPrint에 비해 IronPDF는 PDF를 포괄적으로 처리하는 강력하고 다양한 API를 제공합니다. .NET 환경에서 확립된 이름으로서, IronPDF는 개발자가 플랫폼 간에 손쉽게 PDF를 생성, 편집 및 변환할 수 있게 합니다. 2025년 및 2026년까지 .NET 10 및 C# 14 채택을 계획하고 있는 팀에게는, IronPDF가 RawPrint가 제공할 수 없는 크로스 플랫폼 호환성을 제공합니다. 시작하기 전에 필수 조건 .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+ NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력 IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요 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 라이선스 구성 // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; ' Add at application startup IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY" $vbLabelText $csharpLabel RawPrint사용 찾기 # Identify allRawPrintusage grep -r "using RawPrint" --include="*.cs" . grep -r "Printer\|SendBytesToPrinter" --include="*.cs" . # Identify allRawPrintusage grep -r "using RawPrint" --include="*.cs" . grep -r "Printer\|SendBytesToPrinter" --include="*.cs" . SHELL 완전한 API 참조 네임스페이스 변경 // 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; Imports System.Runtime.InteropServices Imports System.Drawing.Printing ' After: IronPDF Imports IronPdf $vbLabelText $csharpLabel 핵심 API 매핑 RawPrint IronPDF 노트 Printer.SendBytesToPrinter() pdf.Print() 고수준 인쇄 Printer.OpenPrinter() 해당 없음 필요 없음 Printer.ClosePrinter() 해당 없음 자동 Printer.StartDocPrinter() 해당 없음 자동 Printer.WritePrinter() 해당 없음 자동 Printer.EndDocPrinter() 해당 없음 자동 해당 없음 ChromePdfRenderer PDF 생성 해당 없음 PdfDocument.Merge() PDF 병합 해당 없음 pdf.ApplyWatermark() 워터마크 추가 코드 마이그레이션 예제 예제 1: HTML에서 PDF로 변환 이전 (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); } } Imports System Imports System.Drawing Imports System.Drawing.Printing Imports System.Runtime.InteropServices Imports System.Text Class RawPrinterHelper <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> Public Class DOCINFOA <MarshalAs(UnmanagedType.LPStr)> Public pDocName As String <MarshalAs(UnmanagedType.LPStr)> Public pOutputFile As String <MarshalAs(UnmanagedType.LPStr)> Public pDataType As String End Class <DllImport("winspool.Drv", EntryPoint:="OpenPrinterA", SetLastError:=True, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function OpenPrinter(<MarshalAs(UnmanagedType.LPStr)> szPrinter As String, ByRef hPrinter As IntPtr, pd As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function ClosePrinter(hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterA", SetLastError:=True, CharSet:=CharSet.Ansi, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function StartDocPrinter(hPrinter As IntPtr, level As Integer, <[In], MarshalAs(UnmanagedType.LPStruct)> di As DOCINFOA) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function EndDocPrinter(hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function StartPagePrinter(hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function EndPagePrinter(hPrinter As IntPtr) As Boolean End Function <DllImport("winspool.Drv", EntryPoint:="WritePrinter", SetLastError:=True, ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> Public Shared Function WritePrinter(hPrinter As IntPtr, pBytes As IntPtr, dwCount As Integer, ByRef dwWritten As Integer) As Boolean End Function Public Shared Function SendStringToPrinter(szPrinterName As String, szString As String) As Boolean Dim pBytes As IntPtr Dim dwCount As Integer dwCount = szString.Length pBytes = Marshal.StringToCoTaskMemAnsi(szString) Dim hPrinter As IntPtr If OpenPrinter(szPrinterName, hPrinter, IntPtr.Zero) Then Dim di As New DOCINFOA() di.pDocName = "HTML Document" di.pDataType = "RAW" If StartDocPrinter(hPrinter, 1, di) Then If StartPagePrinter(hPrinter) Then Dim dwWritten As Integer WritePrinter(hPrinter, pBytes, dwCount, dwWritten) EndPagePrinter(hPrinter) End If EndDocPrinter(hPrinter) End If ClosePrinter(hPrinter) Marshal.FreeCoTaskMem(pBytes) Return True End If Return False End Function End Class Class Program Shared Sub Main() Dim html As String = "<html><body><h1>Hello World</h1></body></html>" ' RawPrint cannot directly convert HTML to PDF ' It sends raw data to printer, no PDF generation capability RawPrinterHelper.SendStringToPrinter("Microsoft Print to PDF", html) End Sub End Class $vbLabelText $csharpLabel 이후 (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"); } } Imports IronPdf Imports System Class Program Shared Sub Main() Dim renderer = New ChromePdfRenderer() Dim html As String = "<html><body><h1>Hello World</h1></body></html>" Dim pdf = renderer.RenderHtmlAsPdf(html) pdf.SaveAs("output.pdf") Console.WriteLine("PDF created successfully") End Sub End Class $vbLabelText $csharpLabel 이 예제는 근본적인 아키텍처 차이를 보여줍니다. RawPrint는 winspool.Drv로부터 여러 DLL 가져오기를 포함하여 60개 이상의 코드 줄, 수동 프린터 핸들 관리 (OpenPrinter, StartDocPrinter, WritePrinter, EndDocPrinter, ClosePrinter) 및 메모리 마샬링이 필요하며 여전히 PDF를 생성할 수 없습니다. 렌더링 기능 없이 원시 데이터를 프린터로 전송할 뿐입니다. IronPDF는 작업을 5개 줄로 완료합니다: ChromePdfRenderer 생성, RenderHtmlAsPdf() 호출 및 SaveAs(). HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요. 예제 2: URL에서 PDF로 변환 이전 (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)"); } } } Imports System Imports System.Net Imports System.Runtime.InteropServices Imports System.Text Class RawPrinterHelper ' ... (same DLL imports as above) ... Public Shared Function SendStringToPrinter(szPrinterName As String, szString As String) As Boolean Dim pBytes As IntPtr = Marshal.StringToCoTaskMemAnsi(szString) Dim hPrinter As IntPtr If OpenPrinter(szPrinterName, hPrinter, IntPtr.Zero) Then Dim di As New DOCINFOA() di.pDocName = "Web Page" di.pDataType = "RAW" If StartDocPrinter(hPrinter, 1, di) Then If StartPagePrinter(hPrinter) Then Dim dwWritten As Integer WritePrinter(hPrinter, pBytes, szString.Length, dwWritten) EndPagePrinter(hPrinter) End If EndDocPrinter(hPrinter) End If ClosePrinter(hPrinter) Marshal.FreeCoTaskMem(pBytes) Return True End If Return False End Function End Class Class Program Shared Sub Main() 'RawPrintcannot render web pages - only sends raw text/data ' This would just print HTML source code, not rendered content Using client As New WebClient() Dim htmlSource As String = 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)") End Using End Sub End Class $vbLabelText $csharpLabel 이후 (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"); } } Imports IronPdf Imports System Class Program Shared Sub Main() Dim renderer = New ChromePdfRenderer() ' Render a live website directly to PDF with full CSS, JavaScript, and images Dim pdf = renderer.RenderUrlAsPdf("https://example.com") pdf.SaveAs("webpage.pdf") Console.WriteLine("Website rendered to PDF successfully") End Sub End Class $vbLabelText $csharpLabel RawPrint는 웹 페이지를 렌더링할 수 없으며, 원시 텍스트/데이터만 전송합니다.RawPrint접근 방식은 HTML 소스를 다운로드하여 프린터로 직접 보내기 때문에 렌더링된 콘텐츠가 아닌 원시 HTML 코드가 인쇄됩니다. IronPDF의 RenderUrlAsPdf()는 CSS, JavaScript 및 이미지를 포함한 완전히 렌더링된 웹페이지를 캡처합니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요. 예제 3: 문서 형식화 이전 (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); } } Imports System Imports System.Drawing.Printing Imports System.Runtime.InteropServices Imports System.Text Class RawPrinterHelper ' ... (same DLL imports) ... Public Shared Function SendBytesToPrinter(szPrinterName As String, pBytes As Byte()) As Boolean Dim pUnmanagedBytes As IntPtr = Marshal.AllocCoTaskMem(pBytes.Length) Marshal.Copy(pBytes, 0, pUnmanagedBytes, pBytes.Length) Dim hPrinter As IntPtr If OpenPrinter(szPrinterName, hPrinter, IntPtr.Zero) Then Dim di As New DOCINFOA() di.pDocName = "Raw Document" di.pDataType = "RAW" If StartDocPrinter(hPrinter, 1, di) Then If StartPagePrinter(hPrinter) Then Dim dwWritten As Integer WritePrinter(hPrinter, pUnmanagedBytes, pBytes.Length, dwWritten) EndPagePrinter(hPrinter) End If EndDocPrinter(hPrinter) End If ClosePrinter(hPrinter) Marshal.FreeCoTaskMem(pUnmanagedBytes) Return True End If Return False End Function End Class Class Program Shared Sub Main() 'RawPrint requires manual PCL/PostScript commands for formatting Dim pclCommands As String = ChrW(&H1B) & "&l0O" & ChrW(&H1B) & "(s0p16.66h8.5v0s0b3T" Dim text As String = "Plain text document - limited formatting" Dim data As Byte() = Encoding.ASCII.GetBytes(pclCommands & text) RawPrinterHelper.SendBytesToPrinter("HP LaserJet", data) End Sub End Class $vbLabelText $csharpLabel 이후 (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"); } } Imports IronPdf Imports System Class Program Shared Sub Main() Dim renderer = New ChromePdfRenderer() Dim html As String = " <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>" Dim pdf = renderer.RenderHtmlAsPdf(html) pdf.SaveAs("formatted.pdf") Console.WriteLine("Formatted PDF created successfully") End Sub End Class $vbLabelText $csharpLabel RawPrint는 기본 서식 설정을 위해서도 수동 PCL/PostScript 명령 ("\x1B&l0O\x1B(s0p16.66h8.5v0s0b3T")이 필요합니다. 개발자는 프린터의 명령어 언어에 대한 깊은 이해가 필요합니다. IronPDF는 형식을 위해 표준 HTML 및 CSS를 사용하며, 복잡한 레이아웃, 글꼴, 색상 및 이미지를 프린터 특정 지식 없이도 완벽히 지원합니다. 기능 비교 요약 기능 RawPrint IronPDF :PDF 생성: HTML to PDF 아니요 예 URL을 PDF로 변환 아니요 예 처음부터 생성 아니요 예 :PDF 조작: PDF 병합 아니요 예 PDF 분할 아니요 예 워터마크 추가 아니요 예 기존 편집 아니요 예 :인쇄: PDF 인쇄 예 (원시) 예 (고급) 인쇄 대화상자 아니요 예 여러 부 제한적 예 DPI 제어 아니요 예 양면 아니요 예 :플랫폼: Windows 예 예 Linux 아니요 예 macOS 아니요 예 Docker 아니요 예 :기타: 보안 아니요 예 디지털 서명 아니요 예 PDF/A 아니요 예 이동 후 새로운 기능 IronPDF로 마이그레이션한 후에는 RawPrint가 제공할 수 없는 기능을 갖게 됩니다: 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"); Dim pdfs = pdfFiles.Select(Function(f) PdfDocument.FromFile(f)).ToList() Dim merged = PdfDocument.Merge(pdfs) merged.SaveAs("complete.pdf") $vbLabelText $csharpLabel 설정과 함께 인쇄하기 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 }); Dim pdf = PdfDocument.FromFile("report.pdf") pdf.Print(New PrintOptions With { .PrinterName = "HP LaserJet", .NumberOfCopies = 2, .DPI = 300, .GrayScale = False }) $vbLabelText $csharpLabel 하나의 워크플로우에서 만들고 인쇄하기 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"); Dim renderer = New ChromePdfRenderer() Dim 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") $vbLabelText $csharpLabel 마이그레이션 체크리스트 사전 마이그레이션 모든RawPrint사용 식별 (SendBytesToPrinter, OpenPrinter 등) 애플리케이션에서 사용된 프린터 이름을 문서화합니다. 통합할 수 있는 외부 PDF 생성 코드를 기록합니다. ironpdf.com에서IronPDF라이선스 키 획득 코드 업데이트 -RawPrint패키지 제거: dotnet remove package RawPrint IronPdf Install-Package: dotnet add package IronPdf 원시 인쇄를 pdf.Print()으로 교체 수동 핸들 관리 제거 (OpenPrinter, ClosePrinter 등) PDF 생성 및 인쇄를 하나의 워크플로우로 통합합니다. 애플리케이션 시작 시 라이선스 초기화 추가 테스트 대상 프린터로 인쇄 테스트를 수행합니다. 인쇄 품질을 확인합니다. 여러 부본을 테스트합니다. 무음 인쇄를 테스트합니다. 필요 시 크로스 플랫폼 검증을 수행합니다. 커티스 차우 지금 바로 엔지니어링 팀과 채팅하세요 기술 문서 작성자 커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다. 커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다. 관련 기사 업데이트됨 2월 1, 2026 C#에서 ZetPDF에서 IronPDF로 마이그레이션하는 방법 이 완전한 C# 가이드로 ZetPDF에서 IronPDF로의 마이그레이션을 마스터하세요. 좌표 기반 라이브러리에서 현대적인 HTML-to-PDF 솔루션으로 전환하십시오. HTML 변환, PDF 병합 및 PDFSharp 종속성 제거에 대한 코드 예제가 포함되어 있습니다. 더 읽어보기 업데이트됨 2월 1, 2026 Scryber.Core에서 IronPDF로의 마이그레이션 방법 (C#) 이 완벽한 C# 가이드를 통해 Scryber.Core에서 IronPDF로의 마이그레이션을 완전히 이해하십시오. 사용자 지정 XML/HTML 파싱에서 현대적인 Chromium 렌더러로 전환하십시오. HTML 변환, URL 렌더링 및 독점 바인딩 교체를 위한 코드 예제가 포함됩니다. 더 읽어보기 업데이트됨 2월 1, 2026 C#에서 XFINIUM.PDF에서 IronPDF로 마이그레이션하는 방법 이 완전한 C# 가이드로 XFINIUM.PDF에서 IronPDF로의 마이그레이션을 마스터하세요. 수동적인 좌표 기반 위치에서 선언적인 HTML/CSS 렌더링으로 전환하십시오. 그래픽 프리미티브 교체 및 자동 레이아웃에 대한 코드 예제가 포함되어 있습니다. 더 읽어보기 Rotativa에서 IronPDF로의 마이그레이션 방법 (C#)QuestPDF에서 IronPDF로의 마이...
업데이트됨 2월 1, 2026 C#에서 ZetPDF에서 IronPDF로 마이그레이션하는 방법 이 완전한 C# 가이드로 ZetPDF에서 IronPDF로의 마이그레이션을 마스터하세요. 좌표 기반 라이브러리에서 현대적인 HTML-to-PDF 솔루션으로 전환하십시오. HTML 변환, PDF 병합 및 PDFSharp 종속성 제거에 대한 코드 예제가 포함되어 있습니다. 더 읽어보기
업데이트됨 2월 1, 2026 Scryber.Core에서 IronPDF로의 마이그레이션 방법 (C#) 이 완벽한 C# 가이드를 통해 Scryber.Core에서 IronPDF로의 마이그레이션을 완전히 이해하십시오. 사용자 지정 XML/HTML 파싱에서 현대적인 Chromium 렌더러로 전환하십시오. HTML 변환, URL 렌더링 및 독점 바인딩 교체를 위한 코드 예제가 포함됩니다. 더 읽어보기
업데이트됨 2월 1, 2026 C#에서 XFINIUM.PDF에서 IronPDF로 마이그레이션하는 방법 이 완전한 C# 가이드로 XFINIUM.PDF에서 IronPDF로의 마이그레이션을 마스터하세요. 수동적인 좌표 기반 위치에서 선언적인 HTML/CSS 렌더링으로 전환하십시오. 그래픽 프리미티브 교체 및 자동 레이아웃에 대한 코드 예제가 포함되어 있습니다. 더 읽어보기