フッターコンテンツにスキップ
IRONPDFの使用

C#でPDFバイト配列をマージする方法

Merging PDF Files Programmatically with IronPDF

メモリ内のPDFファイルを扱うことは、現代の.NETアプリケーションにおいて一般的な要件です。 ウェブAPIから複数のPDFファイルを受け取ったり、データベースのBLOB列から取得したり、サーバーからアップロードされたファイルを処理したりする際に、ファイルシステムに触れることなく、複数のPDFバイト配列を単一のPDFドキュメントに結合する必要がよくあります。 この記事では、IronPDFがPDFをプログラムで結合するための直感的なAPIを使用して、PDFの結合をいかに簡単にするかを学びます。

なぜPDFファイルのバイト配列を単純に連結できないのか?

テキストファイルとは異なり、PDFドキュメントには、クロスリファレンステーブル、オブジェクト定義、特定のフォーマット要件など、複雑な内部構造があります。 バイト配列としての2つのPDFファイルを単純に連結するだけでは、ドキュメント構造が破損し、読めないPDFファイルになります。これが、PDF仕様を理解し、PDFファイルの完全性を維持しながら正確に結合するために、IronPDFのような専門のPDFライブラリが必要である理由です。 Stack Overflowのフォーラムディスカッションによれば、PDFコンテンツを結合しようとする際に、開発者がよく犯すエラーが直接のバイト配列連結の試行です。

IronPDFを設定してPDFを結合する方法

NuGetパッケージマネージャーを使用してIronPDFを.NETプロジェクトにインストールしてください。

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およびクラウドネイティブアプリケーションにとって実用的なソリューションです。

IronPDFを使用してC#で2つの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

ここにバイト配列データから2つの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

このメソッドは、入力パラメータとして2つのPDFバイト配列を受け入れます。 PdfDocument.FromFile()メソッドは、各バイト配列をPdfDocumentオブジェクトにロードします。名前にもかかわらず、このメソッドはバイト配列を完全に処理します。 Merge()メソッドは、すべてのコンテンツ、フォーマット、およびフォームフィールドを保持して、両方のPDFドキュメントを単一の新しいPDFに結合します。 C#でPDFバイト配列を結合する方法: 図5 - サンプルPDF入力1

入力

C#でPDFバイト配列を結合する方法: 図6 - サンプルPDF入力2

C#でPDFバイト配列を結合する方法: 図7 - 2つのPDFバイト配列の出力を結合する

出力

より多くの制御を行うためには、新しいMemoryStreamを直接使用することもできます。

両方のPDFファイルに同じ名前のフォームフィールドが含まれている場合、IronPDFはアンダースコアを追加して名前の競合を自動的に処理します。

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

最後に、BinaryDataプロパティは、結合されたPDFをバイト配列形式の新しいドキュメントとして返します。 結果を他のメソッドに渡すには、このバイト配列を単に返せば済みます。必要がなければディスクに保存する必要はありません。 ## より良いパフォーマンスのための非同期結合を実装する方法

サーバー上で大きなPDFファイルや高いリクエストボリュームを処理するアプリケーションでは、非同期操作がスレッドのブロックを防ぎます。

次のコードは、PDFドキュメントを非同期的に結合する方法を示しています。 この非同期実装は、PDFの結合操作をTask.Run()でラップし、バックグラウンドスレッドで実行できるようにします。

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ドキュメントを処理しながら、リクエスト処理の応答性を維持したいASP.NET Webアプリケーションに特に有用です。 メソッドはTask<byte[]>を返し、呼び出し元がメインスレッドをブロックせずに結果を待機できるようにします。 上記のコードは、大きなPDFファイル操作での効率的なメモリ管理を保証します。 C#でPDFバイト配列を結合する方法: 図8 - 非同期結合のPDF出力

出力

複数のPDFファイルを効率的に結合する方法

複数のPDFファイルを処理する場合、Listを使用してバッチ処理を行ってください。

このソリューションは、任意の数のPDFドキュメントを1つの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

まず入力を検証して、リストがデータを含んでいることを確認します。 LINQのSelect()メソッドを使用して、各バイト配列をPdfDocumentオブジェクトに変換します。 Merge()メソッドはPdfDocumentオブジェクトのListを受け入れ、すべてを単一操作で結合して新しいドキュメントを作成します。 リソースのクリーンアップは重要です - PDFの結合後、個々のPdfDocumentオブジェクトを破棄することで、特に多数または大規模なPDFファイルを処理する際に、メモリとリソースを効果的に管理します。 結果のバイト配列の長さは、すべてのソースPDFドキュメントのページに依存します。 ## 生産用途におけるベストプラクティスとは?

PDF操作を常にtry-catchブロックでラップし、破損したまたはパスワード保護されたPDFファイルからの潜在的な例外を処理します。

usingステートメントを使用したり、PdfDocumentオブジェクトを明示的に破棄したりして、メモリリークを防ぎます。 大規模な操作では、すべてのドキュメントを同時にメモリにロードするのではなく、ページネーションまたはストリーミングアプローチを実装することを検討してください。 複数のPDFドキュメントから選択したページを操作するときは、結合前に特定のPdfPageインスタンスを抽出することもできます。

IronPDFの包括的なエラーハンドリングは、テスト環境および本番環境での堅牢な本番導入を保証します。 他のPDFライブラリに慣れている場合、IronPDFのAPIは特に直感的で、プロジェクトにインポートして使用しやすいです。 C#でPDFバイト配列を結合する方法: 図9

IronPDFは、C#でバイト配列からPDFファイルを結合するという複雑な作業を簡素化し、PDFドキュメントの構造を自動的に取り扱うクリーンなAPIを提供します。

結論

ドキュメント管理システムを構築する、APIレスポンスを処理する、添付ファイル付きのファイルアップロードを処理する、またはデータベースストレージを操作する場合でも、IronPDFのPDF結合機能は.NETアプリケーションにスムーズに統合されます。 ライブラリは非同期操作とメモリ効率の良い処理をサポートしており、デスクトップおよびサーバーアプリケーションの両方にとって実用的なソリューションです。

一時ファイルをディスクに書き込むことなく、PDFファイルを編集、変換、保存することができます。 質問を投稿したり、追加の回答を見つけたい場合は、フォーラムまたはウェブサイトをご覧ください。 アプリケーションにPDF結合をダウンロードして実装する準備はできましたか?

無料トライアルを開始するか、包括的なAPIドキュメントを参照して、HTMLからPDF変換、PDFフォームの処理、デジタル署名などのIronPDFの完全な機能セットを発見してください。 私たちのサイトには、すべてのSystem.IOストリーム操作の完全なリファレンスドキュメントがあります。 ライセンス

Licensing

よくある質問

PDFバイト配列をC#でどのようにマージできますか?

IronPDFを利用することで、C#でPDFバイト配列をマージできます。このライブラリは、プログラムで複数のPDFファイルを組み合わせるための簡単な方法を提供し、PDFドキュメントを効率的に取り扱うことができます。

PDFのマージにIronPDFを使用する利点は何ですか?

IronPDFは、強力で使いやすいツールを提供することによってPDFのマージプロセスを簡略化します。マージ、分割、PDFの修正などの様々な機能をサポートし、C#でのPDFドキュメントの取り扱いに最適な選択です。

物理ファイルとして保存せずにPDFファイルをマージすることは可能ですか?

はい、IronPDFでは、物理ファイルとして保存することなく、メモリ内で直接PDFファイルをマージすることが可能です。PDFデータを効率的に取り扱うためにバイト配列を使用します。

IronPDFは、大きなPDFファイルのマージに対応できますか?

IronPDFは、マージプロセス中に大きなPDFファイルを効率的に処理するように設計されており、開発者が大規模なドキュメントを扱う際のパフォーマンス問題に直面しないようにしています。

IronPDFを使用してのPDFマージに対応しているプログラミング環境はどれですか?

IronPDFは、C#を含む様々な.NET環境をサポートしており、異なるプログラミングセットアップ内での開発者にとって使いやすく、シームレスなPDFマージが可能です。

IronPDFは暗号化されたPDFファイルのマージをサポートしていますか?

はい、IronPDFは暗号化されたPDFファイルを扱うことができ、必要な許可と資格情報が提供されている限り、それらをマージおよび操作するオプションを提供します。

IronPDFはマージされたPDFドキュメントの整合性をどのように保証していますか?

IronPDFはマージされたPDFドキュメントの元の品質と形式を維持し、マージプロセス全体でファイルの整合性と外観が保持されるようにしています。

IronPDFは異なるページサイズと向きのPDFをマージできますか?

IronPDFは、様々なページサイズと向きを持つPDFをマージすることができ、最終ドキュメントを自動的に調整して一貫性とプロフェッショナルなレイアウトを維持します。

PDFバイト配列をマージするためにIronPDFを使用する前提条件は何ですか?

PDFバイト配列をマージするためにIronPDFを使用するには、.NET開発環境をセットアップし、プロジェクトにIronPDFライブラリをインストールする必要があります。

IronPDFを使用するための例やドキュメントはありますか?

IronPDFのウェブサイトには、様々な機能についてのステップバイステップのガイドやコードスニペットを提供する包括的なドキュメントと例があり、PDFバイト配列のマージも含まれています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。