迁移指南 如何用 C# 从 RawPrint 迁移到 IronPDF Curtis Chau 已发布:2026年2月1日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 从RawPrint迁移到IronPDF可将您的文档工作流程从低级打印机字节传输转变为全面的 PDF 创建和打印解决方案。 本指南提供了一个完整的、循序渐进的迁移路径,使您能够使用高级 API 创建、处理和打印 PDF,而无需手动管理打印机句柄。 为什么要从RawPrint迁移到 IronPDF? 了解 RawPrint RawPrint 是一组可将原始数据直接发送到打印机的实现。 对于需要绕过传统打印机驱动程序直接向打印机传输命令的应用程序来说,这是必不可少的。 该功能在使用专用打印机(如使用 ZPL(斑马编程语言)或 EPL(Eltron 编程语言)的标签创建器)时尤其有用。 RawPrint 的优势之一是可以简单地将数据流直接发送到打印机。 对于针对视窗特定环境并需要直接进行打印机通信的开发人员,RawPrint 提供了绕过驱动程序或图形界面等中间层的高效途径。 但是,RawPrint 并非 PDF 库,它只是将数据推送到打印机。 这一基本限制使其成为大多数文档生成场景的错误选择。 核心问题:无法创建 PDF 文件 RawPrint 有明显的局限性,不适合现代文档工作流程: 1.不支持 PDF 创建:RawPrint仅专注于数据传输,缺乏 PDF 创建、渲染或操作功能。 2.非常底层:由于直接处理原始字节,开发人员必须深入了解打印机的命令语言,因此不太适合简单的文档打印任务。 3.平台特定:它依赖于视窗打印后台处理程序,限制了其跨平台适用性。 4.无文档处理:仅进行字节传输,不具备渲染功能。 5.控制有限:打印作业配置选项最少。 RawPrint与IronPDF对比 特征 RawPrint IronPDF 功能性 直接向打印机发送原始打印数据 全面的 PDF 创建和操作 使用案例 标签等专业印刷 一般文件管理和创建 平台依赖性 针对 Windows 跨平台 复杂性 低级,需要打印机命令知识 高级、用户友好的 API PDF 创建 否 是 从 HTML 创建 PDF 否 是 从 URL 创建 PDF 否 是 编辑/修改 PDF 文件 否 是 合并/拆分 PDF 文件 否 是 打印现有 PDF 文件 是(原始字节) 是(高级应用程序接口) 打印控制 基本的 全部选项 适用于 直接访问打印机的需求 网络和桌面应用程序中与 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"; $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; $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); } } $vbLabelText $csharpLabel After (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"); } } $vbLabelText $csharpLabel 本例展示了基本的架构差异。RawPrint需要 60 多行代码,从 winspool.Drv 导入多个 DLL,手动管理打印机句柄(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)"); } } } $vbLabelText $csharpLabel After (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"); } } $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); } } $vbLabelText $csharpLabel After (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"); } } $vbLabelText $csharpLabel RawPrint 甚至需要手动 PCL/PostScript 命令("\x1B&l0O\x1B(s0p16.66h8.5v0s0b3T")才能进行基本格式化。 开发人员必须深入理解打印机的命令语言。 IronPdf 使用标准 HTML 和 CSS 进行格式化--完全支持复杂的布局、字体、颜色和图像,无需打印机特定知识。 功能对比摘要 特征 RawPrint IronPDF PDF 创建 HTML 至 PDF 否 是 URL 至 PDF 否 是 从零开始 否 是 PDF 操作 合并 PDF 否 是 拆分 PDF 否 是 添加水印 否 是 编辑现有内容 否 是 打印 打印 PDF 是(原始) 是(高级) 打印对话框 否 是 多份 有限的 是 DPI 控制 否 是 双工 否 是 平台 视窗 是 是 Linux 否 是 MacOS 否 是 多克 否 是 其他 安全性 否 是 数字签名 否 是 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"); $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 }); $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"); $vbLabelText $csharpLabel 迁移清单 迁移前 识别所有RawPrint使用情况( SendBytesToPrinter 、 OpenPrinter等) 应用程序中使用的文档打印机名称 注意任何可以合并的外部 PDF 创建代码 从ironpdf.com获取IronPDF许可证密钥 代码更新 移除RawPrint包: dotnet remove package RawPrint 安装 IronPdf 包: dotnet add package IronPdf 将原始打印替换为pdf.Print() 移除手动句柄管理( OpenPrinter 、 ClosePrinter等) 将 PDF 创建和打印整合到一个工作流程中 在应用程序启动时添加许可证初始化 测试 测试打印目标打印机 验证打印质量 测试多个副本 测试静音打印 如有需要,进行跨平台验证 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多 已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多 如何用 C# 从 Rotativa 迁移到 IronPDF如何用 C# 从 QuestPDF 迁移到...
已发布2026年2月1日 如何用 C# 从 ZetPDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 ZetPDF 到 IronPDF 的迁移。从基于坐标的库转换到现代的 HTML 到 PDF 解决方案。包括 HTML 转换、合并 PDF 和移除 PDFSharp 依赖性的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 Scryber.Core 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 Scryber.Core 迁移到 IronPDF 的方法。从自定义 XML/HTML 解析转换到现代 Chromium 渲染器。包括 HTML 转换、URL 呈现和替换专有绑定的代码示例。 阅读更多
已发布2026年2月1日 如何用 C# 从 XFINIUM.PDF 迁移到 IronPDF 通过这本完整的 C# 指南,掌握从 XFINIUM.PDF 到 IronPDF 的迁移。从基于坐标的手动定位切换到声明式 HTML/CSS 渲染。包括替换图形基元和自动布局的代码示例。 阅读更多