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

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

PDFファイルをバイト配列として扱うことは、現代のC#アプリケーションで共通の要件です。 データベースからPDFドキュメントを取得したり、ウェブサービスから受信したり、メモリ内で処理したりする際に、ディスクに保存せずに複数のPDFファイルを1つのPDFにマージする機能は不可欠です。

IronPDFは、その直感的なAPIでこのプロセスを非常に簡単にします。 2つのPDFファイルまたは複数のファイルを簡単に結合し、1つのPDFとして出力する要件を達成できます。 C#でPDFバイト配列をマージする方法と、このタスクのためのさまざまなアプローチについて見ていきましょう。

PDFバイト配列とは何か、なぜマージする必要があるのか?

バイト配列は、メモリ内でPDFファイルを表す基本的なバイナリデータです。 C#でPDFドキュメントを扱う場合、PDFファイルがディスクに実在する物理ファイルではなく、バイト配列として存在するシナリオに頻繁に直面します。 特に、PDFがバイナリデータとして保存されているデータベースからドキュメントを取得する場合や、サーバー経由でREST APIからPDFドキュメントを受け取る場合に一般的です。

単純に2つのPDFバイト配列を連結するだけでは動作しません。テキストファイルとは異なり、PDFファイルにはヘッダー、参照テーブル、および特定のフォーマットを持った複雑な内部構造があります。 単にバイトを結合しようとすると、必ずエラーが発生します。 これらのバイト配列を正しく解析し、正しく結合するためには、適切なPDFライブラリが必要です。 IronPDFはこの複雑さをすべて処理し、ほんの数行のコードでPDFドキュメントをマージできるようにします。 これは、ライブラリがあなたが理解し、解決するのを助ける核となる問題です。

IronPDFを使用してPDFをマージする方法は?

IronPDFの開始は簡単です。 まず、プロジェクトにIronPDF NuGetパッケージをインストールします。

Install-Package IronPdf

インストール後、C#ファイルに以下の名前空間を追加してください。

using IronPdf;
using System.IO;
using System.Collections.Generic;
using IronPdf;
using System.IO;
using System.Collections.Generic;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ファイルを正しく扱うためのシステムおよびパス要件を理解することが重要です。 このコードはASPアプリまたはデスクトップアプリで使用できます。

C#での2つのPDFバイト配列のマージ方法:図1 - IronPDF NuGetインストールページ

IronPDFを使用した2つのPDFファイルバイト配列のマージ方法は?

C#で2つのPDFバイト配列を1つのPDFにマージする方法を示す完全な例です:

// Simulate two PDF byte arrays (in practice, these come from a database or API)
byte[] pdfBytes1 = File.ReadAllBytes("document1.pdf");
byte[] pdfBytes2 = File.ReadAllBytes("document2.pdf");

// Create PdfDocument objects from byte arrays
var pdf1 = new PdfDocument(pdfBytes1);
var pdf2 = new PdfDocument(pdfBytes2);

// Merge the two PDF documents
PdfDocument combinedPdf = PdfDocument.Merge(pdf1, pdf2);

// Convert the combined PDF back to byte array
byte[] mergedPdfBytes = combinedPdf.BinaryData;

// Save the merged PDF (optional)
File.WriteAllBytes("merged.pdf", mergedPdfBytes);
// Simulate two PDF byte arrays (in practice, these come from a database or API)
byte[] pdfBytes1 = File.ReadAllBytes("document1.pdf");
byte[] pdfBytes2 = File.ReadAllBytes("document2.pdf");

// Create PdfDocument objects from byte arrays
var pdf1 = new PdfDocument(pdfBytes1);
var pdf2 = new PdfDocument(pdfBytes2);

// Merge the two PDF documents
PdfDocument combinedPdf = PdfDocument.Merge(pdf1, pdf2);

// Convert the combined PDF back to byte array
byte[] mergedPdfBytes = combinedPdf.BinaryData;

// Save the merged PDF (optional)
File.WriteAllBytes("merged.pdf", mergedPdfBytes);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

出力

C#での2つのPDFバイト配列のマージ方法:図2 - マージされたPDFファイル

上記のコードは、基本的なマージ機能を示しています。 最初に、バイト配列からPdfDocumentオブジェクトを作成します。 IronPDFはバイナリデータを解析し、適切なPDFドキュメントオブジェクトを自動的に作成します。

PdfDocument.Merge()メソッドは、すべてのページ、フォーマット、内容を元のドキュメントから維持しながら、複数のPDFファイルを1つのPDFに結合します。 最終的に、BinaryDataプロパティを使用して、マージされたドキュメントをバイト配列としてアクセスできます。これは、データベースに保存したりAPI経由で送信したりするのに最適です。 このライブラリがバイトを取得して新しいPDFに変換するプロセスを提供し、新しいドキュメントを提供します。

PDFのマージに他の方法は存在するのか?

IronPDFは、PDFドキュメントをマージするための柔軟なオプションを提供します。 2つ以上のPDFファイルをマージする必要がある場合は、Listオーバーロードを使用できます。 このアプローチは以下に示されています。

// Define pdfByteArrays as a list of byte arrays
List<byte[]> pdfByteArrays = new List<byte[]>
{
    // Add sample byte arrays representing PDFs
    File.ReadAllBytes("example1.pdf"),
    File.ReadAllBytes("example2.pdf")
};

List<PdfDocument> pdfsToMerge = new List<PdfDocument>();
foreach (var byteArray in pdfByteArrays)
{
    pdfsToMerge.Add(new PdfDocument(byteArray));
}

PdfDocument combinedPdf = PdfDocument.Merge(pdfsToMerge);
byte[] finalPdfBytes = combinedPdf.BinaryData;
// Define pdfByteArrays as a list of byte arrays
List<byte[]> pdfByteArrays = new List<byte[]>
{
    // Add sample byte arrays representing PDFs
    File.ReadAllBytes("example1.pdf"),
    File.ReadAllBytes("example2.pdf")
};

List<PdfDocument> pdfsToMerge = new List<PdfDocument>();
foreach (var byteArray in pdfByteArrays)
{
    pdfsToMerge.Add(new PdfDocument(byteArray));
}

PdfDocument combinedPdf = PdfDocument.Merge(pdfsToMerge);
byte[] finalPdfBytes = combinedPdf.BinaryData;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

この方法により、任意の数のPDFドキュメントを効率的にマージすることができます。 各PDFは、バイト配列からPdfDocumentオブジェクトに読み込まれ、リストに追加され、単一の操作でマージされます。

MemoryStreamを使用した柔軟性

ストリームを扱う際にプロセスをより細かく制御するために、MemoryStreamを使用することもできます。 以下のコードがこのアプローチを示しています:

using (var stream1 = new MemoryStream(pdfBytes1))
using (var stream2 = new MemoryStream(pdfBytes2))
{
    var pdf1 = new PdfDocument(stream1);
    var pdf2 = new PdfDocument(stream2);
    var merged = PdfDocument.Merge(pdf1, pdf2);
    byte[] result = merged.BinaryData;
}
using (var stream1 = new MemoryStream(pdfBytes1))
using (var stream2 = new MemoryStream(pdfBytes2))
{
    var pdf1 = new PdfDocument(stream1);
    var pdf2 = new PdfDocument(stream2);
    var merged = PdfDocument.Merge(pdf1, pdf2);
    byte[] result = merged.BinaryData;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

ストリームを使用することで、より大きなPDFファイルのメモリ管理が改善され、ストリームベースのI/Oを使用する他のシステムとの統合により多くの柔軟性を提供します。 この例は、効果的にストリームを使用する素晴らしい方法です。 必要に応じてストリームのLengthプロパティを確認できます。

一般的なPDFドキュメントマージシナリオをどのように処理するか?

データベースからPDFを取得し、結合する典型的なシナリオの場合:

public string MergePdfDocumentsFromDatabase(List<int> documentIds)
{
    List<PdfDocument> documents = new List<PdfDocument>();

    foreach (int id in documentIds)
    {
        // Fetch PDF byte array from database
        byte[] pdfData = GetPdfFromDatabase(id); // Assume this function exists
        documents.Add(new PdfDocument(pdfData));
    }

    // Merge all documents
    PdfDocument mergedDocument = PdfDocument.Merge(documents);

    // The document is saved back to a stream or to the server
    byte[] resultBytes = mergedDocument.BinaryData;

    // For this example, we return a success string
    return "Merge True: Document successfully combined and saved.";
}

public PdfDocument AddPageToPdf(PdfDocument existingDoc, byte[] newPageBytes)
{
    // Create a PdfDocument object from the new page bytes
    using var stream = new MemoryStream(newPageBytes);
    var newPageDoc = new PdfDocument(stream);

    // Get the first page of the new document
    var newPage = newPageDoc.Pages[0];

    // Add the page to the existing document
    existingDoc.Pages.Add(newPage);

    // Return the modified document
    return existingDoc;
}
public string MergePdfDocumentsFromDatabase(List<int> documentIds)
{
    List<PdfDocument> documents = new List<PdfDocument>();

    foreach (int id in documentIds)
    {
        // Fetch PDF byte array from database
        byte[] pdfData = GetPdfFromDatabase(id); // Assume this function exists
        documents.Add(new PdfDocument(pdfData));
    }

    // Merge all documents
    PdfDocument mergedDocument = PdfDocument.Merge(documents);

    // The document is saved back to a stream or to the server
    byte[] resultBytes = mergedDocument.BinaryData;

    // For this example, we return a success string
    return "Merge True: Document successfully combined and saved.";
}

public PdfDocument AddPageToPdf(PdfDocument existingDoc, byte[] newPageBytes)
{
    // Create a PdfDocument object from the new page bytes
    using var stream = new MemoryStream(newPageBytes);
    var newPageDoc = new PdfDocument(stream);

    // Get the first page of the new document
    var newPage = newPageDoc.Pages[0];

    // Add the page to the existing document
    existingDoc.Pages.Add(newPage);

    // Return the modified document
    return existingDoc;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

このパターンは、請求書、レポート、またはデータベースに保存されている他のPDFドキュメントを結合する必要があるシナリオに最適です。 マージされたドキュメントは、すべての元のPDFのクオリティとフォーマットを維持します。 オブジェクトは完全にメモリ内で処理されます。 必要に応じてページを編集することもできます。

エラー処理と一般的な間違いの処理

このコードを実装する際に、潜在的なエラーケースを処理することが重要です。 たとえば、ファイルが読み込めない(パスが間違っている)場合や、バイト配列が有効なPDFを表していない場合、new PdfDocument()オブジェクトの作成が例外を投げる可能性があります。 try-catchブロックを常に使用してください。 システムに慣れていない場合、間違いを犯しやすいです。 処理前に配列の長さを必ず確認してください。

例:ファイルのバイトを読み込む前に、ファイルへのパスが存在することを常に確認してください。 バイト配列がnullの場合、オープン操作は失敗します。

これらのドキュメントを作成、削除、またはインポートする機能は、適切なパスワードやセキュリティを持つユーザーによって管理されることが多いです。これにより、ファイルへのセキュリティアクセスが保証され、無許可の書き込みや保存操作が防止されます。 このトピックはIronPDFサイトの追加トピックで取り上げられています。

結論

IronPDFを使用したPDFバイト配列のマージは、C#でのPDF操作に典型的に関連する複雑さを排除します。 データベース、APIレスポンス、またはメモリ内処理からのドキュメントを扱う場合でも、IronPDFの直感的なAPIを使用すると、PDFをマージするのは単一のメソッド呼び出しと同様に簡単です。 このアプローチがあなたの目標を達成するのに役立つことを願っています。 最終結果は、クリーンで統合されたPDFです。 読んでいただきありがとうございます。さらにご質問があれば、お気軽にお返事ください。

Get started with a free trial to experience how IronPDF can streamline your PDF processing workflows, or ライセンスオプションを探ることで本番環境でお使いください。

NuGet 購入の準備ができていませんか?

PM >  Install-Package IronPdf

IronPDFNuGet でチェックしてください。1000万回以上のダウンロードで、C#によるPDF開発を変革しています。 DLL または Windowsインストーラー をダウンロードすることもできます。

よくある質問

C#で2つのPDFバイト配列をマージするにはどうすれば良いですか?

IronPDFを使用してC#で2つのPDFバイト配列をマージできます。ディスクに保存する必要なく、複数のPDFファイルをバイト配列として簡単に1つのPDFドキュメントに統合できます。

PDFバイト配列をマージするのにIronPDFを使用するメリットは何ですか?

IronPDFは、直感的なAPIを提供することでPDFバイト配列のマージプロセスを簡素化します。メモリ内でPDFを効率的に処理し、データベースやWebサービスからPDFを取得するアプリケーションに理想的です。

IronPDFはディスクに保存せずにPDFファイルをマージできますか?

はい、IronPDFはディスクに保存せずにPDFファイルをマージできます。バイト配列から直接PDFファイルを処理し、メモリベースの操作に適しています。

IronPDFを使用してWebサービスから受信したPDFファイルをマージすることは可能ですか?

もちろんです。IronPDFは、Webサービスからバイト配列として受け取ったPDFファイルをマージでき、リモートPDFソースとのシームレスな統合を可能にします。

C#でPDFバイト配列をマージする一般的な用途は何ですか?

一般的な用途として、データベースから取得した複数のPDFドキュメントを1つのPDFファイルに結合し、その後C#アプリケーションで処理または表示することがあります。

IronPDFはメモリ内でPDFを処理することをサポートしていますか?

はい、IronPDFはメモリ内でのPDF処理をサポートしており、中間ディスクストレージなしでPDFファイルを迅速に操作する必要があるアプリケーションにとって重要です。

IronPDFはデータベースからのPDFマージをどのように処理しますか?

IronPDFはPDFバイト配列を直接操作できることにより、データベースからのPDFマージを処理します。これにより、一時ファイルの保存が不要となります。

IronPDFは複数のPDFファイルを1つに統合できますか?

はい、IronPDFは複数のPDFファイルをそのバイト配列をマージすることで1つに統合でき、複合PDFドキュメントを作成する簡略化された方法を提供します。

Curtis Chau
テクニカルライター

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

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