如何在 C# 中從 RawPrint 轉移到 IronPDF
從RawPrint轉移到 IronPdf:完整的 C# 遷移指南。
從RawPrint轉換到IronPDF可將您的文件工作流程從低階的印表機位元組傳輸轉換為全面的 PDF 建立與列印解決方案。 本指南提供完整的逐步遷移路徑,讓您可以使用高階 API 來建立、處理和列印 PDF,而不需要手動管理印表機句柄。
為什麼要從RawPrint轉移到 IronPDF?
瞭解 RawPrint。
RawPrint 是一系列實作的集合,可將原始資料直接傳送至印表機。 對於需要繞過傳統印表機驅動程式,直接將指令傳輸至印表機的應用程式而言,這是不可或缺的。 此功能在使用專用印表機的情況下尤其有用,例如使用 ZPL(Zebra 程式語言)或 EPL(Eltron 程式語言)的標籤製作器。
RawPrint 的優勢之一在於其直接將資料串流傳送至印表機的簡易性。 對於針對視窗特定環境並需要直接印表機通訊的開發人員而言,RawPrint 提供了一個有效的途徑,繞過驅動程式或圖形介面等中介層。
然而,RawPrint 並非 PDF 圖書館 - 它只是將資料推送至印表機。 這一基本限制使其成為大多數文件生成場景的錯誤選擇。
核心問題:無法建立 PDF
RawPrint 有顯著的限制,使其不適合現代文件工作流程:
1.無 PDF 創作:RawPrint 只專注於資料傳輸,缺乏 PDF 建立、渲染或處理的功能。
2.Very Low-Level: 由於直接處理原始位元組,開發人員必須深入瞭解印表機的指令語言,因此不太適合直接的文件列印工作。
3.特定平台:它依賴於視窗列印 spooler,限制了它的跨平台適用性。
4.無文件處理:只有位元組傳輸,沒有渲染功能。
5.有限控制:最少的列印工作組態選項。
RawPrint與IronPDF的比較
| 特點 | RawPrint | IronPDF |
|---|---|---|
| 功能性 | 直接將原始列印資料傳送至印表機 | 全面的 PDF 建立與操作 |
| 使用個案 | 專業印刷,如標籤 | 一般文件管理與建立 |
| 平台依賴性 | Windows 專用 | 跨平台 |
| 複雜性 | 低階,需要印表機指令知識 | 高層級、使用者友善的 API |
| PDF製作 | 無 | 是 |
| 從 HTML 建立 PDF | 無 | 是 |
| 從 URL 建立 PDF | 無 | 是 |
| 編輯/修改 PDF 文件 | 無 | 是 |
| 合併/分割 PDF 文件 | 無 | 是 |
| 列印現有 PDF 文件 | 是 (原始位元組) | 是 (高階 API) |
| 列印控制。 | 基本的 | 完整選項 |
| 適用對象 | 直接印表機存取需求 | 網頁和桌面應用程式中與 PDF 相關的工作 |
| 彈性 | 由於原始位元組處理的限制 | 廣泛的多種功能 |
與RawPrint形成強烈對比的是,IronPDF 提供了強大且多功能的 API,可全面處理 PDF。 作為 .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()<br | <編碼>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 to 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 | 無 | 是 |
| 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");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 add package 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、雙面)
開發人員因此可以策略性地選擇符合其技術需求和專案限制的函式庫,確保他們的應用程式在文件處理上既有效率又穩健。






