翻譯|行業資訊|編輯:吉煒煒|2025-08-25 14:07:01.953|閱讀 41 次
概述:在 C# 開發中,處理 PDF 的字節數組是一種常見需求。本文將通過 Spire.PDF for .NET 演示具體實現步驟。你將學習如何將字節數組轉換為 PDF,如何將 PDF 轉換為字節數組,以及如何直接在內存中使用 C# 代碼編輯 PDF。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在 C# 開發中,處理 PDF 的字節數組是一種常見需求。開發者常常需要將 PDF 文檔存儲到數據庫、通過 API 傳輸,或者完全在內存中進行處理而不依賴文件系統。在這些場景下,在 C# 中實現 PDF 與字節數組的互轉 就顯得尤為重要。
E-iceblue旗下Spire系列產品,是文檔開發組件領域的佼佼者,支持國產化信創。本文將通過 Spire.PDF for .NET 演示具體實現步驟。你將學習如何將字節數組轉換為 PDF,如何將 PDF 轉換為字節數組,以及如何直接在內存中使用 C# 代碼編輯 PDF。
加入Spire技術交流QQ群(125237868),與更多開發者一起提升文檔開發技能。
使用 byte[] 作為傳輸格式,可以避免生成臨時文件,使代碼更適配云環境和容器環境。
準備工作: 在運行示例前,請先在項目中安裝 Spire.PDF for .NET 的 NuGet 包。
Install-Package Spire.PDF
安裝完成后,即可通過 byte[] 或 Stream 加載 PDF,編輯頁面,并將結果寫回內存或磁盤,無需額外轉換器。
當上游服務(如 API 或消息隊列)傳遞一個代表 PDF 的 byte[] 時,通常需要將其還原為文檔,便于進一步處理或保存到磁盤。使用 Spire.PDF for .NET,這個過程可以直接在內存中完成,無需中間臨時文件。
應用場景與方法: 從數據庫或 API 獲取一個 byte[],在內存中構建 PdfDocument,可選地驗證一些基礎信息,然后保存為 PDF。
using Spire.Pdf; using System.IO; class Program { static void Main() { // 示例來源:從數據庫或 API 獲取的字節數組 byte[] pdfBytes = File.ReadAllBytes("Sample.pdf"); // 請替換為實際數據來源 // 1) 從字節數組加載 PDF(內存中完成) PdfDocument doc = new PdfDocument(); doc.LoadFromBytes(pdfBytes); // 2) (可選)在保存或處理前查看文檔信息 // int pageCount = doc.Pages.Count; // 3) 保存為文件 doc.SaveToFile("Output.pdf"); doc.Close(); } }下圖展示了字節數組到 PDF 的轉換流程:
代碼解析:
反向轉換時,將 PDF 轉換為 byte[] 便于寫入數據庫、緩存,或通過 HTTP 響應返回文件。Spire.PDF for .NET 支持將 PDF 保存到 MemoryStream,再通過 ToArray() 轉換為字節數組。
應用場景與方法: 加載現有 PDF,將其保存到 MemoryStream,再提取 byte[]。這種方式特別適用于 API 返回 PDF 或持久化存儲。
using Spire.Pdf; using System.IO; class Program { static void Main() { // 1) 從磁盤、網絡或資源文件加載 PDF PdfDocument doc = new PdfDocument(); doc.LoadFromFile("Input.pdf"); // 2) 保存到內存流,避免生成臨時文件 byte[] pdfBytes; using (var ms = new MemoryStream()) { doc.SaveToStream(ms); pdfBytes = ms.ToArray(); } doc.Close(); // pdfBytes 現在包含完整文檔(可直接寫入數據庫或 API 返回) // 示例:return File(pdfBytes, "application/pdf"); } }下圖展示了 PDF 轉換為字節數組的流程:
關鍵點總結:
更強大的場景是直接在內存中編輯 PDF。你可以從 byte[] 加載 PDF,添加文字或圖片、加水印、填寫表單,再將結果保存為新的 byte[]。這種無文件管道非常適合微服務。
應用場景與方法: 從字節數組加載 PDF,在第一頁添加文字標記,最后輸出新的字節數組。
using Spire.Pdf; using Spire.Pdf.Graphics; using System.Drawing; using System.IO; class Program { static void Main() { // 來源可以是數據庫、API 或文件,這里用 byte[] 表示 byte[] inputBytes = File.ReadAllBytes("Input.pdf"); // 1) 內存加載 PDF var doc = new PdfDocument(); doc.LoadFromBytes(inputBytes); // 2) 編輯:在第一頁寫入一個小標記 PdfPageBase page = doc.Pages[0]; page.Canvas.DrawString( "編輯后的PDF文檔", new PdfTrueTypeFont(new Font("HarmonyOS Sans SC", 26f), true), PdfBrushes.DarkBlue, new PointF(100, page.Size.Height - 100) ); // 3) 保存為新的字節數組 byte[] editedBytes; using (var ms = new MemoryStream()) { doc.SaveToStream(ms); editedBytes = ms.ToArray(); } doc.Close(); // editedBytes 可持久化存儲或由 API 返回 } }下圖展示了編輯后的 PDF 頁面:
要點說明:
下表總結了該 API 在字節數組處理中的優勢:
需求點 | Spire.PDF for .NET 的優勢 |
---|---|
I/O 靈活性 | 同一個 PdfDocument API 支持從文件路徑、Stream 或 byte[] 加載與保存 |
內存編輯 | 可繪制文本/圖片、管理批注/表單、添加水印等,無需臨時文件 |
服務友好 | 輕松集成到 ASP.NET 接口和后臺任務 |
處理真實文檔 | 支持多頁 PDF,可通過流控制內存消耗 |
代碼簡潔 | 避免手動字節操作和復雜互操作,簡化實現 |
本文演示了如何在 C# 中 將字節數組轉換為 PDF、如何 將 PDF 轉換為字節數組,以及如何 直接在內存中編輯 PDF。通過流和字節數組操作,可以讓 API 設計更簡潔、響應更高效,同時兼顧數據庫和云環境的適配性。Spire.PDF for .NET 提供了一套一致的無文件化工作流,既適合快速轉換,也能擴展為完整的內存文檔處理。
可以。使用 LoadFromBytes 從 byte[] 加載 PDF,然后保存到 MemoryStream 或直接在 API 中返回,無需落盤。
使用 PdfDocument.SaveToStream 方法,并調用 MemoryStream.ToArray() 獲取字節數組,再存儲為 BLOB 或傳遞給其他服務。
完全可以。先通過字節數組加載 PDF,再進行文字、圖片、水印、批注或表單填寫等編輯,最后保存為新的 byte[]。
及時釋放流、在合適的場景重用緩沖區、每個操作/線程單獨創建 PdfDocument。對于大文件,建議使用流式 I/O 控制內存使用,保證可預測性。
如需體驗 Spire.PDF for .NET 的完整功能(無評估限制),你可以免費 30 天試用授權。
————————————————————————————————————————
關于慧都科技:
慧都科技是一家行業數字化解決方案公司,長期專注于軟件、油氣與制造行業。公司基于深入的業務理解與管理洞察,以系統化的業務建模驅動技術落地,幫助企業實現智能化運營與長期競爭優勢。在軟件工程領域,我們提供開發控件、研發管理、代碼開發、部署運維等軟件開發全鏈路所需的產品,提供正版授權采購、技術選型、個性化維保等服務,幫助客戶實現技術合規、降本增效與風險可控。慧都科技E-iceblue的官方授權代理商,提供E-iceblue系列產品免費試用,咨詢,正版銷售等于一體的專業化服務。E-iceblue旗下Spire系列產品是國產文檔處理領域的優秀產品,支持國產化,幫助企業高效構建文檔處理的應用程序。
歡迎下載|體驗更多E-iceblue產品
獲取更多信息請咨詢 ;技術交流Q群(125237868)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網