跳過到頁腳內容
使用IRONPDF

如何在 C# 中合併 PDF 位元組數組

Merging PDF Files Programmatically with IronPDF

在現代 .NET 應用程式中,處理記憶體中 PDF 文件是一個常見的需求。 無論您是從網路 API 接收多個 PDF 文件、從資料庫 BLOB 欄位中檢索它們,還是從伺服器上傳的檔案處理,您通常需要將多個 PDF 位元組陣列合併為一個 PDF 文件,而不需要觸碰檔案系統。 在本文中,我們將了解 IronPDF 如何通過其直觀的 API 編程化地使 PDF 合併變得非常簡單。

為什麼不能簡單地串聯 PDF 文件的位元組陣列?

與文本文件不同,PDF 文件具有複雜的內部結構,包括交叉引用表、物件定義和特定的格式要求。 簡單地將兩個 PDF 文件作為位元組陣列串聯會破壞文件結構,導致 PDF 文件無法閱讀。這就是為什麼像 IronPDF 這樣的專業 PDF 庫是必要的——它們了解 PDF 規範,並在保持文件完整性的同時正確地合併 PDF 文件。 根據 Stack Overflow 論壇討論,嘗試直接位元組陣列串聯是開發人員在嘗試合併 PDF 內容時常犯的錯誤。

如何設置 IronPDF 以進行 PDF 合併

在 .NET 專案中通過 NuGet 套件管理器安裝 IronPDF:

Install-Package IronPdf

添加必要的 using 語句以匯入庫:

using IronPdf;
using System.IO;  // For MemoryStream
using System.Threading.Tasks;
using IronPdf;
using System.IO;  // For MemoryStream
using System.Threading.Tasks;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

針對生產伺服器環境,應用您的許可金鑰以訪問全功能而無密碼限制:

License.LicenseKey = "YOUR-LICENSE-KEY";
License.LicenseKey = "YOUR-LICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF 支援 Windows、Linux、macOS 和 Docker 容器,是 ASP.NET Core 和雲原生應用程式的實用解決方案。

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組陣列

var pdf = PdfDocument.Merge(
    PdfDocument.FromFile(pdfBytes1), 
    PdfDocument.FromFile(pdfBytes2));
var pdf = PdfDocument.Merge(
    PdfDocument.FromFile(pdfBytes1), 
    PdfDocument.FromFile(pdfBytes2));
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

以下是從位元組陣列數據中合併兩個 PDF 文件的核心代碼範例:

public byte[] MergePdfByteArrays(byte[] firstPdf, byte[] secondPdf)
{
    // Load the first PDF file from byte array
    var pdf1 = new PdfDocument(firstPdf /* PdfData */, /* password: */ "", /* ownerPassword: */ "");
    // Load the second PDF file from byte array  
    var pdf2 = new PdfDocument(secondPdf, "", "");
    // Merge PDF documents into one PDF
    var mergedPdf = PdfDocument.Merge(pdf1, pdf2);
    // Return the combined PDF as byte array
    return mergedPdf.BinaryData;
}
public byte[] MergePdfByteArrays(byte[] firstPdf, byte[] secondPdf)
{
    // Load the first PDF file from byte array
    var pdf1 = new PdfDocument(firstPdf /* PdfData */, /* password: */ "", /* ownerPassword: */ "");
    // Load the second PDF file from byte array  
    var pdf2 = new PdfDocument(secondPdf, "", "");
    // Merge PDF documents into one PDF
    var mergedPdf = PdfDocument.Merge(pdf1, pdf2);
    // Return the combined PDF as byte array
    return mergedPdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此方法接受兩個 PDF 位元組陣列作為輸入參數。 PdfDocument.FromFile() 方法將每個位元組陣列加載到 PdfDocument 對象中; 儘管如此,此方法完美處理位元組陣列。 Merge() 方法將兩個 PDF 文件合併為一個新的 PDF,保留所有內容、格式和表單字段。

輸入

How to Merge PDF Byte Arrays in C#: 圖 5 - 範例 PDF 輸入 1

How to Merge PDF Byte Arrays in C#: 圖 6 - 範例 PDF 輸入 2

輸出

How to Merge PDF Byte Arrays in C#: 圖 7 - 合併兩個 PDF 位元組陣列輸出

為了更多控制,您還可以直接處理新的 MemoryStream

public byte[] MergePdfsWithStream(byte[] src1, byte[] src2)
{
    using (var stream = new MemoryStream())
    {
        var pdf1 = new PdfDocument(src1);
        var pdf2 = new PdfDocument(src2);
        var combined = PdfDocument.Merge(pdf1, pdf2);
        return combined.BinaryData;
    }
}
public byte[] MergePdfsWithStream(byte[] src1, byte[] src2)
{
    using (var stream = new MemoryStream())
    {
        var pdf1 = new PdfDocument(src1);
        var pdf2 = new PdfDocument(src2);
        var combined = PdfDocument.Merge(pdf1, pdf2);
        return combined.BinaryData;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

如果兩個 PDF 文件包含相同名稱的表單字段,IronPDF 通過附加下劃線自動處理命名衝突。 最後,BinaryData 屬性返回作為新的文件的組合 PDF 的位元組陣列格式。 如果需要將結果傳遞給其他方法,只需返回此位元組陣列——除非需要,否則無需保存到磁盤。

如何實現異步合併以提高性能

對於在伺服器上處理大 PDF 文件或高請求量的應用程式,異步操作可防止線程阻塞。 以下代碼顯示如何異步合併 PDF 文件:

public async Task<byte[]> MergePdfByteArraysAsync(byte[] firstPdf, byte[] secondPdf)
{
    return await Task.Run(() =>
    {
        var pdf1 = new PdfDocument(firstPdf);
        var pdf2 = new PdfDocument(secondPdf);
        var pdf = PdfDocument.Merge(pdf1, pdf2);
        return pdf.BinaryData;
    });
}
public async Task<byte[]> MergePdfByteArraysAsync(byte[] firstPdf, byte[] secondPdf)
{
    return await Task.Run(() =>
    {
        var pdf1 = new PdfDocument(firstPdf);
        var pdf2 = new PdfDocument(secondPdf);
        var pdf = PdfDocument.Merge(pdf1, pdf2);
        return pdf.BinaryData;
    });
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

此異步實現將 PDF 合併操作包裝在 Task.Run() 中,允許它在背景線程上執行。 此方法在 ASP.NET 網頁應用程式中特別有價值,您希望在處理多個 PDF 文件時保持響應性請求處理。 該方法返回 Task<byte[]>,使呼叫者能夠等待結果而不堵塞主線程。 以上代碼確保在處理大 PDF 文件操作時的有效記憶體管理。

輸出

How to Merge PDF Byte Arrays in C#: 圖 8 - 異步合併 PDF 輸出

如何有效地合併多個 PDF 文件

在處理多個 PDF 文件時,使用 List 進行批處理。 這個解決方案允許您將任意數量的 PDF 文件合併為一個 PDF:

public byte[] MergeMultiplePdfByteArrays(List<byte[]> pdfByteArrays)
{
    if (pdfByteArrays == null || pdfByteArrays.Count == 0)
        return null;
    // Convert all byte arrays to PdfDocument objects
    var pdfDocuments = pdfByteArrays
        .Select(bytes => new PdfDocument(bytes))
        .ToList();
    // Merge all PDFs in one operation
    var pdf = PdfDocument.Merge(pdfDocuments);
    // Clean up resources
    foreach (var pdfDoc in pdfDocuments)
    {
        pdfDoc.Dispose();
    }
    return pdf.BinaryData;
}
public byte[] MergeMultiplePdfByteArrays(List<byte[]> pdfByteArrays)
{
    if (pdfByteArrays == null || pdfByteArrays.Count == 0)
        return null;
    // Convert all byte arrays to PdfDocument objects
    var pdfDocuments = pdfByteArrays
        .Select(bytes => new PdfDocument(bytes))
        .ToList();
    // Merge all PDFs in one operation
    var pdf = PdfDocument.Merge(pdfDocuments);
    // Clean up resources
    foreach (var pdfDoc in pdfDocuments)
    {
        pdfDoc.Dispose();
    }
    return pdf.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

這種方法有效處理任意數量的 PDF 位元組陣列。 它首先驗證輸入以確保列表包含數據。 使用 LINQ 的 Select() 方法,它將每個位元組陣列轉換為 PdfDocument 對象。 Merge() 方法接受 PdfDocument 對象的 List,將它們合併在一個操作中以創建一個新文件。 資源清理很重要——在 PDF 合併後處置單個 PdfDocument 對象有助於有效管理記憶體和資源,特別是在處理大量或大型 PDF 文件時。 結果的位元組陣列的長度取決於所有源 PDF 文件中的頁數。

生產使用的最佳實踐是什麼?

始終將 PDF 操作包裹在 try-catch 塊中以處理損毀或受密碼保護的 PDF 文件的潛在異常。 使用 using 語句或明確處置 PdfDocument 對象以防止記憶體洩漏。 對於大規模操作,考慮實施分頁或流方法而不是一次將整個文件加載到記憶體中。

在處理多個 PDF 文件的選定頁面時,您還可以在合併之前提取特定的 PdfPage 實例。 IronPDF 的全面錯誤處理確保在測試和生產環境中的穩定部屬。 如果您對其他 PDF 庫很熟悉,您會發現 IronPDF 的 API 特別容易匯入和使用在您的專案中。

How to Merge PDF Byte Arrays in C#: 圖 9

結論

IronPDF 簡化了 C# 中從位元組陣列合併 PDF 文件的複雜任務,提供了一個處理 PDF 文件結構細節的乾淨 API。 無論您是構建文檔管理系統、處理 API 響應、處理帶附件的文件上傳,還是處理數據庫存儲,IronPDF 的合併 PDF 功能可以無縫整合到您的 .NET 應用程式中。

該庫支持異步操作和記憶體高效處理,使其成為桌面和伺服器應用程式的實用解決方案。 您可以在不寫入臨時文件到磁盤的情況下編輯、轉換和保存 PDF 文件。 欲提出問題或尋找更多答案,請訪問我們的論壇或網站。

準備好在您的應用程式中下載和實施 PDF 合併了嗎? 開始免費試用或探索全面的 API 文檔以發現 IronPDF 的完整功能集,包括 HTML 到 PDF 轉換、PDF 表單處理和數位簽名。 我們的網站為所有 System.IO 流操作提供完整的參考文檔。

授權

常見問題解答

如何使用 C# 合併 PDF 位元組數組?

您可以使用 IronPDF 在 C# 中合併 PDF 位元組數組。該程式庫提供了一種簡單的程式設計方式來合併多個 PDF 文件,從而實現高效的 PDF 文件處理。

使用 IronPDF 合併 PDF 檔案有哪些好處?

IronPDF 提供強大且易於使用的工具,簡化了 PDF 合併流程。它支援合併、分割和修改 PDF 等多種功能,是使用 C# 處理 PDF 文件的開發人員的理想選擇。

是否可以在不儲存為實體文件的情況下合併 PDF 檔案?

是的,IronPDF 允許您直接在記憶體中合併 PDF 文件,而無需將其儲存為實體文件,它使用位元組數組來高效地處理 PDF 資料。

IronPDF在合併時能否處理大型PDF文件?

IronPDF 旨在有效處理合併過程中的大型 PDF 文件,確保開發人員能夠處理大量文件而不會遇到效能問題。

IronPDF支援哪些程式環境來合併PDF檔案?

IronPDF 支援各種 .NET 環境,包括 C#,這使得在不同的程式設計環境中工作的開發人員能夠靈活地無縫合併 PDF 文件。

IronPDF是否支援合併加密的PDF文件?

是的,IronPDF 可以處理加密的 PDF 文件,只要提供必要的權限和憑證,就可以選擇合併和操作這些文件。

IronPDF 如何確保合併後的 PDF 文件的完整性?

IronPDF 能夠維持合併後的 PDF 文件的原始品質和格式,確保文件在合併過程中保持完整性和外觀。

IronPDF 能否合併頁面尺寸和方向不同的 PDF 檔案?

IronPDF 能夠合併頁面大小和方向各異的 PDF 文件,自動調整最終文件以保持一致且專業的佈局。

使用 IronPDF 合併 PDF 位元組數組有哪些前提條件?

若要使用 IronPDF 合併 PDF 位元組數組,您需要設定 .NET 開發環境,並在您的專案中安裝 IronPDF 庫。

是否有使用 IronPDF 的範例或文件可供參考?

IronPDF 網站提供了全面的文件和範例,其中包含各種功能的逐步指南和程式碼片段,包括合併 PDF 位元組數組。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。