跳過到頁腳內容
使用IRONPDF

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

在現代 .NET 應用程式中,對記憶體中的 PDF 檔案進行操作是一個常見的需求。 無論您是從 Web API 接收多個 PDF 文件、從資料庫 BLOB 列檢索它們,還是處理從伺服器上傳的文件,您通常都需要將多個 PDF 位元組數組合併到一個 PDF 文件中,而無需存取文件系統。 在本文中,我們將了解IronPDF如何透過其直覺的 API 以程式設計方式合併 PDF,從而使 PDF合併變得異常簡單。

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 1 - IronPDF

為什麼不能直接連接 PDF 檔案位元組數組?

與文字檔案不同,PDF 文件具有複雜的內部結構,包含交叉引用表、物件定義和特定的格式要求。 簡單地將兩個 PDF 檔案作為位元組數組連接起來會破壞文件結構,導致生成的 PDF 文件無法讀取。因此,像 IronPDF 這樣的專業PDF 庫至關重要——它們理解 PDF 規範,能夠在保持文件完整性的同時正確合併 PDF 文件。 根據Stack Overflow論壇的討論,嘗試直接連接位元組數組是開發人員在嘗試合併 PDF 內容時常犯的錯誤。

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 2 - 功能

如何設定 IronPDF 以合併 PDF 文件?

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

Install-Package IronPdf

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 3 - 安裝 從 Pixabay 上傳

或將圖片拖放到這裡。

新增必要的 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

對於生產伺服器環境,請套用您的許可證金鑰以存取所有功能,無需密碼限制:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 4 - 跨平台相容性

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

var PDF = PdfDocument.Merge(
    PdfDocument.FromBytes(pdfBytes1),
    PdfDocument.FromBytes(pdfBytes2));
var PDF = PdfDocument.Merge(
    PdfDocument.FromBytes(pdfBytes1),
    PdfDocument.FromBytes(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);
    // 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);
    // 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.FromBytes()方法將每個位元組陣列載入到 PdfDocument 物件中。 Merge()方法將兩個 PDF 文件合併成一個新的 PDF,保留所有內容、格式和表單欄位。

輸入

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 5 - 範例 PDF 輸入 1

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 6 - 範例 PDF 輸入 2

輸出

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 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 Web 應用程式中尤其有價值,因為在處理多個 PDF 文件時,需要保持響應式請求處理。 該方法傳回一個Task<byte[]>使呼叫者能夠在不阻塞主執行緒的情況下等待結果。 上述程式碼確保在處理大型 PDF 檔案操作時實現高效的記憶體管理。

輸出

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 8 - 非同步合併 PDF 輸出

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

處理多個 PDF 檔案時,請使用清單進行批次處理。 簡而言之,此解決方案可讓您將任意數量的 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 物件列表,並將它們全部合併到一個操作中以建立一個新文件。 資源清理很重要——在 PDF 合併後釋放單一 PdfDocument 物件有助於有效管理記憶體和資源,尤其是在處理大量或大型 PDF 檔案時。 產生的位元組數組的長度取決於所有來源 PDF 文件中的頁數。

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

請務必將 PDF 操作放在 try-catch 區塊中,以處理因 PDF 檔案損壞或受密碼保護而可能出現的異常。 使用 using 語句或明確釋放 PdfDocument 物件可以防止記憶體洩漏。 對於大規模操作,請考慮採用分頁或串流處理方法,而不是同時將整個文件載入到記憶體中。

在處理多個 PDF 文件中的選定頁面時,您也可以在合併之前提取特定的 PdfPage 頁面實例。 IronPDF全面的錯誤處理機制確保了在測試環境和生產環境中都能實現穩健的生產部署。 如果您熟悉其他 PDF 庫,您會發現 IronPDF 的 API 特別直觀,易於匯入並在您的專案中使用。

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 9 - 如何在 C# 中合併兩個 PDF 位元組數組 - IronPDF

結論

IronPDF 簡化了在 C# 中從位元組數組合並 PDF 文件的複雜任務,提供了一個簡潔的 API,可以自動處理 PDF 文件結構的複雜細節。 無論您是在建立文件管理系統、處理 API 回應、處理附件的文件上傳,還是處理資料庫存儲,IronPDF 的合併 PDF 功能都能無縫整合到您的 .NET 應用程式中。

該庫支援非同步操作和記憶體高效處理,使其成為桌面和伺服器應用程式的實用解決方案。 您可以編輯、轉換和儲存 PDF 文件,而無需將臨時文件寫入磁碟。 如果想提問或尋找更多答案,請造訪我們的論壇或網站。

準備好在您的應用程式中下載並實現 PDF 合併功能了嗎? 立即開始免費試用,或瀏覽全面的API 文檔,了解 IronPDF 的全部功能,包括HTML 轉 PDF 、PDF 表單處理和數位簽章。 我們的網站提供了所有 System.IO 流程操作的完整參考文件。

如何在 C# 中使用 IronPDF 合併兩個 PDF 位元組數組:圖 10 - 許可

常見問題解答

如何在 C# 中合併兩個 PDF 字節陣列?

您可以使用 IronPDF 在 C# 中合併兩個 PDF 字節陣列。它可讓您輕鬆地將儲存為位元組陣列的多個 PDF 檔案合併為單一 PDF 文件,而無需將其儲存至磁碟。

使用 IronPDF 合併 PDF 位元組有哪些好處?

IronPDF 通過提供直觀的 API 簡化了合併 PDF 字節陣列的過程。它能在記憶體中有效率地處理 PDF,非常適合從資料庫或 Web 服務擷取 PDF 的應用程式。

IronPDF 是否可以在不將 PDF 檔案儲存至磁碟的情況下合併 PDF 檔案?

是的,IronPDF 可以合併 PDF 檔案,而無需將其儲存至磁碟。它可直接從位元組陣列處理 PDF 檔案,因此適用於以記憶體為基礎的作業。

是否可以使用 IronPDF 合併從網路服務接收的 PDF 檔案?

絕對可以IronPDF 可以合併從 Web 服務以位元組陣列接收的 PDF 檔案,允許與遠端 PDF 來源無縫整合。

在 C# 中合併 PDF 字節陣列的常見應用是什麼?

一個常見的應用程式是將從資料庫擷取的多個 PDF 文件合併為單一 PDF 檔案,然後在 C# 應用程式中處理或顯示。

IronPDF 是否支持在内存中处理 PDF?

是的,IronPDF 支援在記憶體中處理 PDF,這對於需要在無中間磁碟儲存的情況下快速處理 PDF 檔案的應用程式來說非常重要。

IronPDF 如何處理從資料庫合併 PDF?

IronPdf 可處理從資料庫合併 PDF 的工作,讓您直接處理 PDF 位元組陣列,省去暫存檔案的需要。

IronPDF 可以將多個 PDF 檔案合併為一個嗎?

是的,IronPDF 可以透過合併多個 PDF 檔案的位元組陣列,將它們合併為一個 PDF 檔案,提供一種簡化的方法來建立複合式 PDF 文件。

Curtis Chau
技術作家

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

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