ASP.NET Core MVCでPDFビューアを構築する|チュートリアル

PDF ドキュメント内でのページの移動 (または 2 つのドキュメント間でのページ転送) は、レポートの整理、月刊ニュースレターの編集、または複数セクションのファイルの配信前の再構成を行うときに頻繁に必要になります。 IronPDFを使用すると、全体の操作にはわずか数行の C# コードしか必要ありません。
この記事では、ドキュメント内の 1 つのページを新しい位置に移動する、複数のページを一度に並べ替える、2 つの PDF ファイル間でページを転送する、これらのワークフローを推進する一般的な使用例を理解するという 4 つの実用的なシナリオについて説明します。 各シナリオには、動作するコード例と結果を示す出力画像が含まれています。
無料トライアルを開始して、以下の例に従ってください。
IronPDFを始めるにはどうすればいいですか?
NuGetパッケージ マネージャー コンソールまたは.NET CLI を使用して、任意 for .NETプロジェクトにIronPDF を追加します。 このパッケージは.NET Standard 2.0 を対象としており、 .NET Framework 4.6.2+、. .NET Core 、および.NET 8 と.NET 10 を含むすべての最新 for .NETバージョンで実行されます。
dotnet add package IronPdf
インストール後、C#ファイルのトップにusing IronPdf;を追加してください。ライセンスキーがあれば、商業利用が可能になります。 無料試用ライセンスは評価と開発をカバーします。 API を呼び出す前にキーを 1 回設定します。
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
パッケージが参照され、ライセンスが設定されている場合、この記事のすべての例は変更なしでコンパイルおよび実行されます。 IronPDF NuGetパッケージは、必要なすべての依存関係を自動的にインストールします。 Windows、Linux、macOS では追加のネイティブ バイナリやランタイム構成は必要ありません。
PDF ドキュメント内で 1 ページを移動するにはどうすればよいですか?
IronPDFを使用して PDF ドキュメント内のページを移動するには、対象のページをコピーし、新しい位置に挿入し、元のページを削除するという 3 つの手順が必要です。 RemovePageを提供します。
次のコードは、ドキュメントの最後のページを先頭に移動する方法を示しています。
using IronPdf;
// Load the PDF document from the file system
var pdf = PdfDocument.FromFile("report.pdf");
// Get the zero-based index of the last page
int lastPageIndex = pdf.PageCount - 1;
// Copy the last page into a standalone PdfDocument
var pageToCopy = pdf.CopyPage(lastPageIndex);
// Insert the copied page at position 0 (the first page slot)
pdf.InsertPdf(pageToCopy, 0);
// The original last page has shifted down by one; remove it
pdf.RemovePage(lastPageIndex + 1);
// Save the reordered document to a new file
pdf.SaveAs("report-reorganized.pdf");
using IronPdf;
// Load the PDF document from the file system
var pdf = PdfDocument.FromFile("report.pdf");
// Get the zero-based index of the last page
int lastPageIndex = pdf.PageCount - 1;
// Copy the last page into a standalone PdfDocument
var pageToCopy = pdf.CopyPage(lastPageIndex);
// Insert the copied page at position 0 (the first page slot)
pdf.InsertPdf(pageToCopy, 0);
// The original last page has shifted down by one; remove it
pdf.RemovePage(lastPageIndex + 1);
// Save the reordered document to a new file
pdf.SaveAs("report-reorganized.pdf");
Imports IronPdf
' Load the PDF document from the file system
Dim pdf = PdfDocument.FromFile("report.pdf")
' Get the zero-based index of the last page
Dim lastPageIndex As Integer = pdf.PageCount - 1
' Copy the last page into a standalone PdfDocument
Dim pageToCopy = pdf.CopyPage(lastPageIndex)
' Insert the copied page at position 0 (the first page slot)
pdf.InsertPdf(pageToCopy, 0)
' The original last page has shifted down by one; remove it
pdf.RemovePage(lastPageIndex + 1)
' Save the reordered document to a new file
pdf.SaveAs("report-reorganized.pdf")
PDF出力の再配置

コードはPDFファイルを読み込み、最後のページをゼロベースのインデックスで抽出するためにCopyPageを呼び出します。 IronPDFはAPI全体でゼロベースのページ番号を使用するため、最初のページはインデックス0で、最後のページはPageCount - 1です。 コピーを位置 0 に挿入した後、元のページはインデックス シーケンス内で 1 つ下に移動します。 削除の呼び出しは、lastPageIndex + 1をターゲットにすることでこれを考慮します。 範囲外のインデックスを渡すとArgumentOutOfRangeExceptionがスローされるため、エッジ位置で操作する前にページ数を常に確認してください。
個々のコピーおよび削除操作の詳細については、 "PDF ページの追加、コピー、削除"ガイドで各方法を詳しく説明しています。
ゼロベースのページインデックスは削除手順にどのように影響しますか?
挿入により、後続のすべてのページ インデックスが 1 つ上にシフトされるため、コピーと挿入の後、元のページは予想よりも 1 つ先の位置になります。 パターンpdf.RemovePage(lastPageIndex + 1)はこのシフトをキャプチャします。 ドキュメントの中央からページを移動する場合も、同じ原則が適用されます。つまり、挿入ポイントより後ろのインデックス N にあるページは、その前にコピーが挿入されると、インデックス N+1 になります。
保存前にインデックス計算を検証すると、特にドキュメントの長さが異なるバッチ パイプラインで、サイレント順序エラーを防ぐことができます。 各操作の前にpdf.PageCountと迅速に確認することで、ドキュメントサイズに関係なく論理の整合性を保ちます。
一度に複数のページを移動するプロセスは何ですか?
複数のページを移動する必要がある場合、CopyPagesは一度の呼び出しで特定のページセットを抽出します。 このメソッドは、ゼロベースのページインデックスのリストを受け取り、指定された順序でそのページのみを含む新しいPdfDocumentを返します。 このアプローチは、連続した付録ページのブロックをレポートの最後に移動したり、一連の概要ページを先頭に移動したりするシナリオに適しています。
using IronPdf;
using System.Collections.Generic;
// Load the quarterly report
var pdf = PdfDocument.FromFile("quarterly-report.pdf");
// Copy pages at indexes 1 and 2 (the second and third pages)
var selectedPages = pdf.CopyPages(new List<int> { 1, 2 });
// Append the copied pages to the end of the original document
var result = PdfDocument.Merge(pdf, selectedPages);
// Remove the originals at their former positions (now indexes 1 and 2)
result.RemovePages(new List<int> { 1, 2 });
// Write the reordered result to a new path
result.SaveAs("quarterly-report-reordered.pdf");
using IronPdf;
using System.Collections.Generic;
// Load the quarterly report
var pdf = PdfDocument.FromFile("quarterly-report.pdf");
// Copy pages at indexes 1 and 2 (the second and third pages)
var selectedPages = pdf.CopyPages(new List<int> { 1, 2 });
// Append the copied pages to the end of the original document
var result = PdfDocument.Merge(pdf, selectedPages);
// Remove the originals at their former positions (now indexes 1 and 2)
result.RemovePages(new List<int> { 1, 2 });
// Write the reordered result to a new path
result.SaveAs("quarterly-report-reordered.pdf");
Imports IronPdf
Imports System.Collections.Generic
' Load the quarterly report
Dim pdf = PdfDocument.FromFile("quarterly-report.pdf")
' Copy pages at indexes 1 and 2 (the second and third pages)
Dim selectedPages = pdf.CopyPages(New List(Of Integer) From {1, 2})
' Append the copied pages to the end of the original document
Dim result = PdfDocument.Merge(pdf, selectedPages)
' Remove the originals at their former positions (now indexes 1 and 2)
result.RemovePages(New List(Of Integer) From {1, 2})
' Write the reordered result to a new path
result.SaveAs("quarterly-report-reordered.pdf")
複数ページの並べ替え出力

コードはソースドキュメントから2ページをコピーし、PdfDocument.Mergeを使用して末尾に結合し、並べ替えを完成させるために元のものを削除します。 PdfDocumentオブジェクトを返します。 重複したオリジナルを削除すると、最終的なドキュメントは、冗長なコンテンツがなく、意図した順序のままになります。
RemovePagesメソッドはゼロベースのインデックスのリストを受け取って、指定されたすべてのページを一度に削除します。 複数のページを削除するときは、RemovePageをループで呼び出すのではなく、全てのインデックスを一度に提供してください。各個別の削除が残りのインデックスをシフトし、オフバイワンのエラーを引き起こす可能性があります。
PDF の結合または分割チュートリアルでは、ページ範囲による分割など、ドキュメントを結合および分割するための追加の戦略について説明します。
連続していないページ グループをどのように処理しますか?
IEnumerable<int>を任意に受け入れるため、非連続のページも自然にサポートされます。 最初、4番目、8番目のページを順番に単一のドキュメントにコピーするnew List<int> { 0, 3, 7 }を渡します。 インデックス リストはソートする必要がないため、出力シーケンスを完全に制御できます。 この柔軟性は、複数の章からなるレポートから概要ページのみを抽出するなど、長いソース ファイル全体の特定のページからカスタム ドキュメントを組み立てる場合に役立ちます。
サブセットを移動するのではなくドキュメント全体を並べ替えるのが目的である場合、希望の順序でリストされたすべてのページ位置のインデックス配列を作成し、それをCopyPagesに渡すことで、1回の操作で並べ替えられたドキュメントが作成されます。 PDF ページの並べ替え C# チュートリアルでは、このドキュメント全体の並べ替えパターンについて詳しく説明します。
2 つの PDF ファイル間でページを移動するにはどうすればよいですか?
1つのPDFドキュメントから別のドキュメントにページを転送する際は、同じコピーインサートパターンを使用して、2つの個別のPdfDocumentインスタンスに適用します。 これは、複数のソース ファイルのコンテンツを統合する場合の標準的な方法です。たとえば、選択した承認ページをドラフトから最終的な契約文書に移動します。
using IronPdf;
// Load the source and destination documents
var sourceDoc = PdfDocument.FromFile("source-document.pdf");
var destinationDoc = PdfDocument.FromFile("destination-document.pdf");
// Extract the first page (index 0) from the source document
var pageToMove = sourceDoc.CopyPage(0);
// Insert the extracted page at position 2 in the destination (third page slot)
destinationDoc.InsertPdf(pageToMove, 2);
// Save the updated destination document
destinationDoc.SaveAs("destination-document-updated.pdf");
// Remove the transferred page from the source and save separately
sourceDoc.RemovePage(0);
sourceDoc.SaveAs("source-document-updated.pdf");
using IronPdf;
// Load the source and destination documents
var sourceDoc = PdfDocument.FromFile("source-document.pdf");
var destinationDoc = PdfDocument.FromFile("destination-document.pdf");
// Extract the first page (index 0) from the source document
var pageToMove = sourceDoc.CopyPage(0);
// Insert the extracted page at position 2 in the destination (third page slot)
destinationDoc.InsertPdf(pageToMove, 2);
// Save the updated destination document
destinationDoc.SaveAs("destination-document-updated.pdf");
// Remove the transferred page from the source and save separately
sourceDoc.RemovePage(0);
sourceDoc.SaveAs("source-document-updated.pdf");
Imports IronPdf
' Load the source and destination documents
Dim sourceDoc = PdfDocument.FromFile("source-document.pdf")
Dim destinationDoc = PdfDocument.FromFile("destination-document.pdf")
' Extract the first page (index 0) from the source document
Dim pageToMove = sourceDoc.CopyPage(0)
' Insert the extracted page at position 2 in the destination (third page slot)
destinationDoc.InsertPdf(pageToMove, 2)
' Save the updated destination document
destinationDoc.SaveAs("destination-document-updated.pdf")
' Remove the transferred page from the source and save separately
sourceDoc.RemovePage(0)
sourceDoc.SaveAs("source-document-updated.pdf")
クロスドキュメント転送出力

コードは2つのドキュメントを独立して読み込み、InsertPdfを使用して指定されたインデックスに宛先に挿入します。 ソースと宛先は異なるパスに別々のファイルとして保存されるため、操作中にどちらも他方を上書きしません。 宛先を最初に保存し、次にソースを保存することは安全です。CopyPageが独立したコピーを生成するためです。 ソースドキュメントはRemovePageが呼び出されるまで変更されません。
両方のStream出力メソッドを通じてインメモリワークフローもサポートします。 これは、変更された PDF をディスクに書き込まずに HTTP 応答として返す必要がある Web アプリケーションで役立ちます。 PDF ページの変換ガイドでは、追加のメモリ内操作パターンについて説明します。
ページを移動するときにブックマークと注釈をどのように保持しますか?
CopyPageでページをコピーすると、IronPDFはテキスト、画像、フォームフィールド、レンダリングプロパティを含むページの視覚コンテンツを保持します。 移動されたページのみを参照するアウトライン (ブックマーク) はコピーとともに移動しますが、複数のページを参照するドキュメント間のブックマーク階層は自動的に更新されません。 ブックマーク ツリーが複雑なドキュメントの場合は、ページを移動した後に PDF リーダーで出力を確認し、内部ナビゲーション リンクが正しい宛先を指していることを確認します。
ページ レイヤーに直接埋め込まれた注釈とフォーム フィールド データは、コピー操作によって保持されます。 ソース ドキュメントが内部リンクに名前付きの宛先を使用する場合、コピーされたページ内でそれらの宛先の名前は保持されますが、宛先ドキュメントのカタログに名前付きの宛先が登録されていない限り、宛先ドキュメントの他の部分のリンクは解決されません。
PDFページの並べ替えの一般的な使用例とは
開発者は、さまざまな実用的なシナリオにわたって PDF ページを移動および並べ替える必要があります。 PDF 仕様で定義されている PDF ページ モデルでは、各ページがドキュメントのページ ツリー内の独立したオブジェクトとして表されます。そのため、ドキュメントの長さに関係なく、個々のページでのコピー、挿入、削除の操作は常に有効です。 パターンを理解することは、さまざまな入力構造を処理するドキュメント処理パイプラインを設計するときに役立ちます。
| シナリオ | 標準的な操作 | IronPDFメソッド |
|---|---|---|
| 月刊ニュースレターの組み立て | 表紙または目次を前面に移動する | CopyPage 、 InsertPdf 、 RemovePage |
| レポート生成 | 概要ページの位置を変更したり、セクション区切りを挿入したりする | CopyPages 、 Merge 、 RemovePages |
| 文書統合 | 複数のソースファイルから選択したページを 1 つの出力にまとめます | CopyPage 、 InsertPdf 、名前を付けSaveAs |
| アーカイブの再編成 | 参照ファイルのページを時系列またはカテゴリ別に並べ替える | CopyPages 、 Merge 、 RemovePages |
| 契約書の準備 | 承認ページまたは署名ページを必要な位置に移動する | CopyPage 、 InsertPdf 、 RemovePage |
ページ操作の他に、IronPDFは同じパイプラインでのドキュメント操作の全範囲をサポートしています。ヘッダーとフッターを追加し、透かしを適用、デジタル署名を追加することは、すべて同じPdfDocumentAPIを通じて利用でき、複数の変換が最終保存の前に連鎖できます。 IronPDF の機能ページでは、利用可能なすべての機能の概要が説明されています。
ページの位置がドキュメント コンテンツによって決定される自動化シナリオ (特定のセクションを見つけた後に承認ページを挿入するなど) については、 "PDF ファイルの編集"チュートリアルで、ページの並べ替えと組み合わせることができるテキスト検索とコンテンツ主導の操作手法について説明します。
大きなドキュメントでページを移動するときにパフォーマンスをどのように処理しますか?
IronPDFでのページ操作はメモリ内のドキュメント表現に基づいて行われるため、パフォーマンスはドキュメントのサイズと適用される操作の数に応じて変化します。 大きな PDF の場合、いくつかのパターンを使用すると処理を効率的に行うことができます。
必要最小限のページ数で作業すると、メモリのオーバーヘッドが削減されます。 500ページのドキュメントを読み込んで2ページを移動する代わりに、まずMergeで再組み立てします。 Split PDF Pages の例では、この分解と再構成のパターンを示しています。
多くのドキュメントにわたってページを移動するバッチ処理パイプラインの場合、メモリを即刻開放するために各保存後にはPdfDocumentインスタンスを廃棄してください。 PdfDocumentはusingステートメントでラップすることで、中間の例外が発生しても決定的なクリーンアップを保証します。
using IronPdf;
// Use 'using' declarations to ensure deterministic disposal
using var source = PdfDocument.FromFile("source-large.pdf");
using var destination = PdfDocument.FromFile("destination-large.pdf");
var pageToTransfer = source.CopyPage(0);
destination.InsertPdf(pageToTransfer, 0);
destination.SaveAs("destination-updated.pdf");
source.RemovePage(0);
source.SaveAs("source-updated.pdf");
using IronPdf;
// Use 'using' declarations to ensure deterministic disposal
using var source = PdfDocument.FromFile("source-large.pdf");
using var destination = PdfDocument.FromFile("destination-large.pdf");
var pageToTransfer = source.CopyPage(0);
destination.InsertPdf(pageToTransfer, 0);
destination.SaveAs("destination-updated.pdf");
source.RemovePage(0);
source.SaveAs("source-updated.pdf");
Imports IronPdf
' Use 'Using' blocks to ensure deterministic disposal
Using source = PdfDocument.FromFile("source-large.pdf")
Using destination = PdfDocument.FromFile("destination-large.pdf")
Dim pageToTransfer = source.CopyPage(0)
destination.InsertPdf(pageToTransfer, 0)
destination.SaveAs("destination-updated.pdf")
source.RemovePage(0)
source.SaveAs("source-updated.pdf")
End Using
End Using
ここにあるSaveAs呼び出しの完了後に廃棄され、基になるメモリバッファが即座に解放されることを保証します。 このパターンは、多くの要求が同じサーバー上で同時にドキュメントを処理する可能性があるASP.NET Coreアプリケーションでは特に重要です。 メモリセーフなドキュメント処理に関する追加の API の詳細については、 IronPDF API リファレンスを参照してください。
次のステップは何ですか?
C#でPDFページを移動および並べ替えるには、RemovePageの3つのIronPDFメソッドをコピー挿入削除のシーケンスで適用する必要があります。 同じパターンは、1 つのドキュメント内で 1 ページを移動することから、複数のファイル間でページを一括転送することまで適用できます。 IronPDF は同じ API を使用して VB .NETでも動作し、ページ操作メソッドは.NET 8 や.NET 10 を含むサポートされているすべて for .NETプラットフォームで利用できます。
関連する機能について詳しくは、 "PDF ページの追加、コピー、削除"ガイドで、ページ レベルのあらゆる方法について詳しく説明しています。 ページ インデックス配列を使用してドキュメント全体を並べ替える方法については、 "PDF でページの並べ替え C#"の記事でその方法について説明しています。
プロジェクトにPDFページ操作を追加する準備はできましたか? 開発中にすべてのIronPDF機能にアクセスするには無料トライアルを開始するか、ライセンスを購入して今すぐ本番環境に展開してください。
よくある質問
C#を使用してPDF内のページを別の位置に移動するにはどうすればよいですか?
IronPDFの3ステップパターンを使用してください:CopyPage(pageIndex)を呼び出してページを抽出し、InsertPdf(copiedPage, targetIndex)を呼び出して新しい位置に配置し、最後にRemovePage(originalIndex + 1)を呼び出して元のページを削除します(挿入によるインデックスシフトを考慮して1を追加します)。
IronPDFで複数のページを一度に移動するにはどうすればよいですか?
CopyPages(new List<int> { 1, 2 })を呼び出してインデックスで特定のページを抽出し、次にPdfDocument.Merge(original, copiedPages)を使用してそれらを追加し、RemovePages(new List<int> { 1, 2 })で元の位置からそれらを削除します。
C#でページをあるPDFファイルから別のPDFファイルに転送するにはどうすればよいですか?
PdfDocument.FromFileを使用して両方のドキュメントをロードし、ソースドキュメントでCopyPage(index)を呼び出し、宛先ドキュメントでInsertPdf(page, position)を呼び出してから、それぞれをSaveAsで保存します。オプションとしてRemovePageを使用してソースから転送されたページを削除することができます。
挿入後にページを削除するには、なぜ元のインデックスに1を追加する必要があるのですか?
ページが元のページのインデックスの前に挿入されると、その後のすべてのページが1つ上にシフトします。元のページがインデックスNにあった場合、その前に挿入すると、元のページはインデックスN+1になります。InsertPdf後にRemovePageを呼び出す際、常にこのシフトを考慮してください。
IronPDFはゼロベースのページインデックスを使用していますか?
はい。IronPDFはAPI全体でゼロベースのインデックスを使用します。最初のページはインデックス0に、2番目のページはインデックス1にあります。最後のページのインデックスはPdfDocument.PageCount - 1です。この範囲外のインデックスを渡すと、ArgumentOutOfRangeExceptionがスローされます。
IronPDFを使用して非連続のページを移動できますか?
はい。CopyPagesメソッドは任意のIEnumerable<int>を受け入れるため、new List<int> { 0, 3, 7 }のように非連続のインデックスを渡すことができます。ページはドキュメント順ではなく、指定した順序で返されます。
IronPDFを使用してページを移動するときにブックマークや注釈は保持されますか?
ページレベルのビジュアルコンテンツ(テキスト、画像、フォームフィールド)はCopyPageを使用する際に保持されます。移動したページのみを参照するブックマークはコピーと共に移動します。複数のページを参照するクロスドキュメントブックマーク階層は自動的に更新されないため、ページ移動後に出力でナビゲーションリンクを必ず確認してください。
バッチパイプラインでPdfDocumentオブジェクトを適切に破棄するにはどうすればよいですか?
using var pdf = PdfDocument.FromFile(path);宣言を使用して、SaveAs呼び出しの完了後に決定性のある破棄を保証します。これにより、ガベージコレクションを待たずにメモリバッファが即座に解放され、高スループットASP.NET Coreアプリケーションでは非常に重要です。




