如何用 C# 从 RawPrint 迁移到 IronPDF
从RawPrint迁移到 IronPdf:完整的 C# 迁移指南
从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无法提供的跨平台兼容性。
开始之前
前提条件
1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.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许可配置
// 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查找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" .完整的 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;IRON VB CONVERTER ERROR developers@ironsoftware.com核心 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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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本例展示了基本的架构差异。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)");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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.comRawPrint 不能呈现网页,只能发送原始文本/数据。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);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (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.comRawPrint 甚至需要手动 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");IRON VB CONVERTER ERROR developers@ironsoftware.com使用设置打印
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在一个工作流程中创建和打印
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迁移清单
迁移前
- [ ] 确定所有RawPrint使用(
SendBytesToPrinter、OpenPrinter等)。 - [ ] 应用程序中使用的文档打印机名称
- [ ] 注意任何可以合并的外部 PDF 创建代码
- [ ] 从 ironpdf.com 获取IronPDF许可证密钥
代码更新
- [ ] 删除RawPrint软件包:<代码>dotnet 删除RawPrint软件包</代码
- [ ] 安装 IronPdf 软件包:<代码>dotnet 添加软件包 IronPdf</ 代码
- [ ] 使用<代码>pdf.Print()</代码替换原始打印
- [ ] 删除手动句柄管理(
OpenPrinter、ClosePrinter等)。 - [将 PDF 创建和打印整合到单一工作流程中
- [ ] 在应用程序启动时添加许可证初始化
测试
- [ ] 测试打印到目标打印机
- [ ] 验证打印质量
- [ ] 测试多份副本
- [ ] 测试无声打印
- [ ] 需要时进行跨平台验证
结论
在RawPrint和IronPDF之间做出选择在很大程度上取决于开发人员旨在实现的具体任务和目标。RawPrint提供直接打印机通信(如使用 ZPL 或 EPL 的标签打印机)所需的低级专业优势,而IronPDF则提供适合一般 PDF 处理和文档创建任务的通用高级解决方案。
本次迁移的主要变化有 1.架构:低级字节传输 → 高级 PDF API 2.复杂性:60 多行 DLL 导入 → 5 行代码 3.能力:仅打印 → 创建、编辑、合并、分割、打印 4.格式:手动 PCL/PostScript 命令 → 标准 HTML/CSS 5.平台:仅限视窗→ 跨平台 6.手柄管理:手动(OpenPrinter/ClosePrinter)→自动 7.URL 渲染:原始 HTML 源 → 完全呈现的页面 8.打印控制:基本 → 完整选项(副本、DPI、双面打印)
因此,开发人员可以根据自己的技术需求和项目限制,战略性地选择库,确保他们的应用程序在文档处理方面既高效又强大。






