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

VB.NETでPDFをTIFFに変換する方法

Windows フォーム アプリケーション内で PDF ページを表示することは、ドキュメント管理ツール、レポート ビューアー、およびファイル プレビュー ユーティリティの一般的な要件です。 そのPictureBoxコントロールはすでにフォーム内での画像レンダリングを処理しているため、自然な候補です。 問題は、PDF ファイルが画像ではないことです。標準的な画像コントロールで表示するには、特殊なレンダリングが必要です。 このガイドは、IronPDFを使用してPDFページをビットマップ画像に変換し、PictureBoxコントロール内で表示する方法を解説します。ページナビゲーション、印刷、保存のサポートも含まれています。

今IronPDFを始めましょう。
green arrow pointer

なぜ PictureBox は PDF ファイルを直接表示できないのですか?

PictureBoxコントロールは、Windows FormsでBMP、PNG、JPG、GIF、TIFF、その他いくつかの画像フォーマット専用に設計されています。 PDFファイルパスをPictureBox.ImageLocationに割り当てたり、PDFストリームをPictureBox.Imageにロードしようとすると、PDFバイナリーフォーマットが認識されていない画像フォーマットであるため、コントロールは例外をスローします。

いくつかのアプローチでは、COM相互運用機能を介してAdobe Acrobatを埋め込むことでこの問題を回避しようと試みます。しかし、これはアプリケーションを実行するすべてのマシンにAdobe Readerがインストールされているという強い依存関係を生み出し、エンタープライズ環境では管理が困難な展開上の制約となります。 また、レンダリング エンジンはユーザーが使用している Acrobat のバージョンにロックされるため、異なるマシン間で互換性の問題が発生する可能性があります。

よりクリーンなアプローチは、実行時にPDFページをビットマップ画像に変換する.NET PDFライブラリを使用することです。IronPDFは、そのToBitmapメソッドを通じてまさにこの能力を提供し、PDF文書の各ページをAnyBitmapオブジェクトにレンダリングします。 その後、そのオブジェクトを標準のSystem.Drawing.Bitmapに変換し、PictureBox.Imageに直接割り当てることができます。 Adobe のインストールは不要、COM の登録も不要、アプリケーション ウィンドウに埋め込まれた外部ビューアも不要です。

この手法は、 .NET Framework 4.6.2 以上、および Windows 上の .NET 6、8、10 で機能します。 IronPDF内のレンダリング エンジンは Chrome ベースであるため、複雑なレイアウト、埋め込みフォント、画像とテキストの混在コンテンツを含む PDF でも忠実度の高い出力を生成します。

Windows フォーム プロジェクトにIronPDFをインストールするにはどうすればよいでしょうか?

コードを記述する前に、プロジェクトにIronPDFを追加する必要があります。 最も速い方法は、 NuGetパッケージ マネージャー CLI を使用することです。

dotnet add package IronPdf

あるいは、Visual Studio パッケージ マネージャー コンソールを使用します。

Install-Package IronPdf

インストール後、パッケージ参照が.csprojファイルに表示されることを確認します。IronPDFは.NET 6以降のWindowsを対象にしているので、プロジェクトファイルでクロスプラットフォームターゲットを使用している場合は、Windows用の<RuntimeIdentifiers>または<Platforms>の制限を追加してください。 Windows フォーム プロジェクトの場合、これは通常、Visual Studio でプロジェクト テンプレートを作成するときに既に構成されています。

運用環境でのライセンスの場合は、 IronPDF の呼び出しの前に、アプリケーションの起動コードにライセンス キーを配置します。

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

開発および評価中、 IronPDF は試用モードで実行され、レンダリングされた出力に透かしが追加されます。 無料試用ライセンスでは、テスト目的で透かしが削除されます。

Windows フォーム プロジェクト構造をどのように設定しますか?

Visual Studioを開き、.NET 10をターゲットとした新しいWindows Formsアプリプロジェクトを作成します。プロジェクトテンプレートはForm1.csProgram.csエントリーポイントを生成します。

デザイナー画面で、次のコントロールをフォームに追加します。

  • フォームの大部分をカバーするpictureBoxPdfという名前のPictureBoxSizeModeZoomに設定します
  • "Open PDF"というテキストのbtnOpenという名前のButton
  • "Previous"というテキストのbtnPreviousという名前のButton
  • "Next"というテキストのbtnNextという名前のButton
  • "Save Page"というテキストのbtnSaveという名前のButton
  • "Print"というテキストのbtnPrintという名前のButton
  • 現在のページ番号を表示するためのlblPageInfoという名前のLabel

PictureBoxSizeMode = Zoom設定は、PDFページがアスペクト比を歪めずにコントロールに適合するようにスケーリングされることを保証します。 これは、PDF ページのサイズがさまざまであるため重要です。レター、A4、リーガル形式はすべて寸法が異なり、ビューアでこれらすべてを適切に処理する必要があります。

以下は、PDF ビューア アプリケーションの完全なフォーム コードです。 これはProgram.csでトップレベルステートメントを使用し、完全なビューロジックをForm1.cs内に配置します。

using IronPdf;
using IronSoftware.Drawing;
using System.Drawing;

public partial class Form1 : Form
{
    private PdfDocument? currentPdf;
    private AnyBitmap[]? pageImages;
    private int currentPageIndex = 0;

    public Form1()
    {
        InitializeComponent();
        pictureBoxPdf.SizeMode = PictureBoxSizeMode.Zoom;
        UpdateNavigationState();
    }

    private void UpdateNavigationState()
    {
        bool hasPdf = pageImages != null && pageImages.Length > 0;
        btnPrevious.Enabled = hasPdf && currentPageIndex > 0;
        btnNext.Enabled = hasPdf && currentPageIndex < (pageImages?.Length - 1 ?? 0);
        btnSave.Enabled = hasPdf;
        btnPrint.Enabled = hasPdf;
        lblPageInfo.Text = hasPdf
            ? $"Page {currentPageIndex + 1} of {pageImages!.Length}"
            : "No document loaded";
    }
}
using IronPdf;
using IronSoftware.Drawing;
using System.Drawing;

public partial class Form1 : Form
{
    private PdfDocument? currentPdf;
    private AnyBitmap[]? pageImages;
    private int currentPageIndex = 0;

    public Form1()
    {
        InitializeComponent();
        pictureBoxPdf.SizeMode = PictureBoxSizeMode.Zoom;
        UpdateNavigationState();
    }

    private void UpdateNavigationState()
    {
        bool hasPdf = pageImages != null && pageImages.Length > 0;
        btnPrevious.Enabled = hasPdf && currentPageIndex > 0;
        btnNext.Enabled = hasPdf && currentPageIndex < (pageImages?.Length - 1 ?? 0);
        btnSave.Enabled = hasPdf;
        btnPrint.Enabled = hasPdf;
        lblPageInfo.Text = hasPdf
            ? $"Page {currentPageIndex + 1} of {pageImages!.Length}"
            : "No document loaded";
    }
}
Imports IronPdf
Imports IronSoftware.Drawing
Imports System.Drawing

Public Partial Class Form1
    Inherits Form

    Private currentPdf As PdfDocument
    Private pageImages As AnyBitmap()
    Private currentPageIndex As Integer = 0

    Public Sub New()
        InitializeComponent()
        pictureBoxPdf.SizeMode = PictureBoxSizeMode.Zoom
        UpdateNavigationState()
    End Sub

    Private Sub UpdateNavigationState()
        Dim hasPdf As Boolean = pageImages IsNot Nothing AndAlso pageImages.Length > 0
        btnPrevious.Enabled = hasPdf AndAlso currentPageIndex > 0
        btnNext.Enabled = hasPdf AndAlso currentPageIndex < If(pageImages?.Length - 1, 0)
        btnSave.Enabled = hasPdf
        btnPrint.Enabled = hasPdf
        lblPageInfo.Text = If(hasPdf, $"Page {currentPageIndex + 1} of {pageImages.Length}", "No document loaded")
    End Sub
End Class
$vbLabelText   $csharpLabel

UpdateNavigationStateヘルパーメソッドは、PDFがロードされているかどうかと現在ビューアーが表示しているページに基づいて、ナビゲーションとアクションボタンを無効または有効にします。 これにより、ユーザーがドキュメントを読み込む前にボタンをクリックしたときに null 参照エラーが発生するのを防ぎます。

VB .NET Display PDF in PictureBox: Render PDF Pages as Images in Windows Forms: Image 1 - Install IronPDF

PDF ページを PictureBox に読み込んでレンダリングするにはどうすればよいでしょうか?

PDFをロードしてPictureBoxにレンダリングするには、ドキュメントをPdfDocument.FromFileでロードし、その後ToBitmapを呼び出してすべてのページをビットマップオブジェクトの配列に変換する2つのステップが含まれます。

PDF to image conversionメソッドToBitmapは、要求されたDPIでPDFのすべてのページをレンダリングします。 DPI を高くすると画像は鮮明になりますが、メモリの消費量も多くなります。 通常、150 DPI の値はドキュメント ビューアーにとって適切なバランスであり、大きなドキュメントをギガバイト単位の RAM を必要とせずに画面上で読み取ることができます。

private void btnOpen_Click(object sender, EventArgs e)
{
    using OpenFileDialog openDialog = new OpenFileDialog();
    openDialog.Filter = "PDF Files|*.pdf";
    openDialog.Title = "Select a PDF Document";

    if (openDialog.ShowDialog() == DialogResult.OK)
    {
        LoadPdfDocument(openDialog.FileName);
    }
}

private void LoadPdfDocument(string filePath)
{
    currentPdf?.Dispose();
    currentPdf = PdfDocument.FromFile(filePath);

    // Render all pages as bitmaps at 150 DPI
    pageImages = currentPdf.ToBitmap(150);
    currentPageIndex = 0;

    DisplayCurrentPage();
    UpdateNavigationState();
}

private void DisplayCurrentPage()
{
    if (pageImages == null || pageImages.Length == 0) return;

    // Convert AnyBitmap to System.Drawing.Bitmap for PictureBox
    System.Drawing.Bitmap bitmap = pageImages[currentPageIndex].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    UpdateNavigationState();
}
private void btnOpen_Click(object sender, EventArgs e)
{
    using OpenFileDialog openDialog = new OpenFileDialog();
    openDialog.Filter = "PDF Files|*.pdf";
    openDialog.Title = "Select a PDF Document";

    if (openDialog.ShowDialog() == DialogResult.OK)
    {
        LoadPdfDocument(openDialog.FileName);
    }
}

private void LoadPdfDocument(string filePath)
{
    currentPdf?.Dispose();
    currentPdf = PdfDocument.FromFile(filePath);

    // Render all pages as bitmaps at 150 DPI
    pageImages = currentPdf.ToBitmap(150);
    currentPageIndex = 0;

    DisplayCurrentPage();
    UpdateNavigationState();
}

private void DisplayCurrentPage()
{
    if (pageImages == null || pageImages.Length == 0) return;

    // Convert AnyBitmap to System.Drawing.Bitmap for PictureBox
    System.Drawing.Bitmap bitmap = pageImages[currentPageIndex].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    UpdateNavigationState();
}
Private Sub btnOpen_Click(sender As Object, e As EventArgs) Handles btnOpen.Click
    Using openDialog As New OpenFileDialog()
        openDialog.Filter = "PDF Files|*.pdf"
        openDialog.Title = "Select a PDF Document"

        If openDialog.ShowDialog() = DialogResult.OK Then
            LoadPdfDocument(openDialog.FileName)
        End If
    End Using
End Sub

Private Sub LoadPdfDocument(filePath As String)
    currentPdf?.Dispose()
    currentPdf = PdfDocument.FromFile(filePath)

    ' Render all pages as bitmaps at 150 DPI
    pageImages = currentPdf.ToBitmap(150)
    currentPageIndex = 0

    DisplayCurrentPage()
    UpdateNavigationState()
End Sub

Private Sub DisplayCurrentPage()
    If pageImages Is Nothing OrElse pageImages.Length = 0 Then Return

    ' Convert AnyBitmap to System.Drawing.Bitmap for PictureBox
    Dim bitmap As System.Drawing.Bitmap = pageImages(currentPageIndex).ToImage(Of System.Drawing.Bitmap)()
    pictureBoxPdf.Image?.Dispose()
    pictureBoxPdf.Image = bitmap

    UpdateNavigationState()
End Sub
$vbLabelText   $csharpLabel

PdfDocument.FromFileメソッドはPDFをディスクからメモリにロードします。 ToBitmapをDPIパラメータと共に呼び出すと、ページごとに1つのAnyBitmapオブジェクトの配列を返します。 AnyBitmap型は、IronPDFのフォーマットに依存しないビットマップクラスで、ToImage<System.Drawing.Bitmap>()はそれをPictureBox.Imageが期待するSystem.Drawing.Bitmap型に変換します。

前のPictureBox.Imageが新しいものに割り当てられる前に破棄されることに注意してください。 これは重要です--それぞれのBitmapオブジェクトは、アンマネージドのGDI+リソースを保持しており、古いビットマップを破棄しないと、長時間動作しているアプリケーションでメモリリークが発生します。

VB .NET Display PDF in PictureBox: Render PDF Pages as Images in Windows Forms: Image 2 - Example blank windows form ready for use

読み込まれると、ビューアはすぐに最初のページを表示します。 lblPageInfoラベルは、現在のページ番号と総ページ数を表示するように更新されます。

VB .NET Display PDF in PictureBox: Render PDF Pages as Images in Windows Forms: Image 3 - Example input PDF displayed in our viewer

PDF ページ間にページナビゲーションを追加するにはどうすればよいですか?

最初のページのみを表示する PDF ビューアは、複数ページのドキュメントには役立ちません。 ナビゲーション ボタンを使用すると、ユーザーはレンダリングされたページ配列内を前後に移動できます。

private void btnPrevious_Click(object sender, EventArgs e)
{
    if (currentPageIndex > 0)
    {
        currentPageIndex--;
        DisplayCurrentPage();
    }
}

private void btnNext_Click(object sender, EventArgs e)
{
    if (pageImages != null && currentPageIndex < pageImages.Length - 1)
    {
        currentPageIndex++;
        DisplayCurrentPage();
    }
}
private void btnPrevious_Click(object sender, EventArgs e)
{
    if (currentPageIndex > 0)
    {
        currentPageIndex--;
        DisplayCurrentPage();
    }
}

private void btnNext_Click(object sender, EventArgs e)
{
    if (pageImages != null && currentPageIndex < pageImages.Length - 1)
    {
        currentPageIndex++;
        DisplayCurrentPage();
    }
}
Private Sub btnPrevious_Click(sender As Object, e As EventArgs)
    If currentPageIndex > 0 Then
        currentPageIndex -= 1
        DisplayCurrentPage()
    End If
End Sub

Private Sub btnNext_Click(sender As Object, e As EventArgs)
    If pageImages IsNot Nothing AndAlso currentPageIndex < pageImages.Length - 1 Then
        currentPageIndex += 1
        DisplayCurrentPage()
    End If
End Sub
$vbLabelText   $csharpLabel

各クリックハンドラは、currentPageIndexを1調整し、DisplayCurrentPageを呼び出し、それが対応するビットマップにPictureBox.Imageを切り替えます。currentPageIndex > 0currentPageIndex < pageImages.Length - 1の境界チェックは、インデックスアウトオブバウンズ例外を防ぎますが、UpdateNavigationStateも範囲外になるとボタンを無効にします。

大きなドキュメントの場合、特定のページ番号を入力してそのページに直接ジャンプできるページ番号入力フィールドや、横にあるスクロール可能なサムネイルストリップを追加することも検討してください。pageImages配列にはすでにすべてのレンダリングされたページが含まれているので、任意のページにジャンプするのは、currentPageIndexを目標インデックスに設定してDisplayCurrentPageを呼び出すだけの問題です。

VB .NET Display PDF in PictureBox: Render PDF Pages as Images in Windows Forms: Image 4 - Navigating to page 2 with our buttons

ビューアから PDF ページを保存および印刷するにはどうすればよいですか?

ドキュメント ビューアは通常、現在のページを画像ファイルとして保存することと、ドキュメントをプリンターに送信することの両方をサポートする必要があります。 IronPDF を使用すると、どちらも簡単になります。

現在のページを画像ファイルとして保存する

現在のページは既にPictureBox.Image内でSystem.Drawing.Bitmapとして利用可能です。 ユーザーが選択するファイル拡張子から推論されるフォーマットで、それをImage.Saveを使って保存してください。

private void btnSave_Click(object sender, EventArgs e)
{
    if (pictureBoxPdf.Image == null) return;

    using SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "PNG Image|*.png|JPEG Image|*.jpg|TIFF Image|*.tif";
    saveDialog.Title = "Save Page As Image";
    saveDialog.FileName = $"page_{currentPageIndex + 1}";

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        pictureBoxPdf.Image.Save(saveDialog.FileName);
    }
}
private void btnSave_Click(object sender, EventArgs e)
{
    if (pictureBoxPdf.Image == null) return;

    using SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "PNG Image|*.png|JPEG Image|*.jpg|TIFF Image|*.tif";
    saveDialog.Title = "Save Page As Image";
    saveDialog.FileName = $"page_{currentPageIndex + 1}";

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        pictureBoxPdf.Image.Save(saveDialog.FileName);
    }
}
Private Sub btnSave_Click(sender As Object, e As EventArgs)
    If pictureBoxPdf.Image Is Nothing Then Return

    Using saveDialog As New SaveFileDialog()
        saveDialog.Filter = "PNG Image|*.png|JPEG Image|*.jpg|TIFF Image|*.tif"
        saveDialog.Title = "Save Page As Image"
        saveDialog.FileName = $"page_{currentPageIndex + 1}"

        If saveDialog.ShowDialog() = DialogResult.OK Then
            pictureBoxPdf.Image.Save(saveDialog.FileName)
        End If
    End Using
End Sub
$vbLabelText   $csharpLabel

PDF文書の印刷

印刷するには、IronPDF のPrint メソッドを使用します。このメソッドは、レンダリングされた画像ではなく、実際の PDF コンテンツを Windows 印刷インフラストラクチャに直接 PDF を送信します。 これにより、プリンタ ドライバがラスタライズされた画像ではなくベクター PDF 命令を受信するため、ビットマップを印刷するよりもはるかに鮮明な出力が生成されます。

private void btnPrint_Click(object sender, EventArgs e)
{
    if (currentPdf == null) return;

    using PrintDialog printDialog = new PrintDialog();
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        currentPdf.Print();
    }
}
private void btnPrint_Click(object sender, EventArgs e)
{
    if (currentPdf == null) return;

    using PrintDialog printDialog = new PrintDialog();
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        currentPdf.Print();
    }
}
Private Sub btnPrint_Click(sender As Object, e As EventArgs)
    If currentPdf Is Nothing Then Return

    Using printDialog As New PrintDialog()
        If printDialog.ShowDialog() = DialogResult.OK Then
            currentPdf.Print()
        End If
    End Using
End Sub
$vbLabelText   $csharpLabel

PrintDialogは、印刷が始まる前にターゲットプリンタを選択し、設定を構成することができます。 実際の印刷ジョブは、Windows 印刷スプーラーと統合された IronPDF の内部レンダリング エンジンによって処理されます。

VB .NET Display PDF in PictureBox: Render PDF Pages as Images in Windows Forms: Image 5 - Example of print button working

メモリと廃棄を正しく処理するにはどうすればよいでしょうか?

PDF ドキュメントとレンダリングされたビットマップは、特に DPI 設定が高い場合やドキュメントが大きい場合に、大量のメモリを消費します。 適切に破棄しないと、長時間実行されるビューア アプリケーションは使用可能なメモリを徐々に使い果たしてしまいます。

廃棄チェックリスト

このパターンで正しく廃棄するための重要なポイントは次のとおりです。

  • 新しいドキュメントをロードする前にcurrentPdf?.Dispose()を呼び出してください。 PdfDocumentIDisposableを実装しており、アンマネージドリソースを保持しています。
  • 新しいビットマップをPictureBox.Imageに割り当てる前にpictureBoxPdf.Image?.Dispose()を呼び出します。 レンダリングされた各ページは、個別のアンマネージ GDI+ オブジェクトです。
  • pageImages配列にはAnyBitmapオブジェクトが含まれています。 ページを移動し、古いビットマップが不要になったとき、PictureBox.Imageに対するDisposeの呼び出しはSystem.Drawing.Bitmapのコピーを処理しますが、新しいドキュメントを読み込むときに配列内のAnyBitmapオブジェクトを破棄することも考えてもよいでしょう。

フォームが閉じたときにクリーンアップするには、Form1.Disposeをオーバーライドします。

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        currentPdf?.Dispose();
        pictureBoxPdf.Image?.Dispose();

        if (pageImages != null)
        {
            foreach (var bitmap in pageImages)
                bitmap.Dispose();
        }

        components?.Dispose();
    }
    base.Dispose(disposing);
}
protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        currentPdf?.Dispose();
        pictureBoxPdf.Image?.Dispose();

        if (pageImages != null)
        {
            foreach (var bitmap in pageImages)
                bitmap.Dispose();
        }

        components?.Dispose();
    }
    base.Dispose(disposing);
}
Protected Overrides Sub Dispose(disposing As Boolean)
    If disposing Then
        currentPdf?.Dispose()
        pictureBoxPdf.Image?.Dispose()

        If pageImages IsNot Nothing Then
            For Each bitmap In pageImages
                bitmap.Dispose()
            Next
        End If

        components?.Dispose()
    End If
    MyBase.Dispose(disposing)
End Sub
$vbLabelText   $csharpLabel

このパターンにより、フォームが閉じられたときにすべてのIronPDFおよび GDI+ リソースが解放され、実稼働環境でのメモリ リークが防止されます。

すべてのページではなく、表示されているページのみをレンダリングするにはどうすればよいですか?

数十ページまたは数百ページの大きなPDFの場合、ToBitmapを使って事前にすべてのページをレンダリングするのは遅く、メモリを多く消費します。より効率的なアプローチは、ユーザーが表示したいページだけをオンデマンドでレンダリングすることです。

IronPDFのRasterizeToImageFilesアプローチはページごとのレンダリングをサポートしていますが、メモリ内使用のためにはPageCountを使い、一度に1ページずつレンダリングすることもできます。

private void DisplayPageLazy(int pageIndex)
{
    if (currentPdf == null) return;

    // Render only the requested page
    AnyBitmap[] singlePage = currentPdf.ToBitmap(150, pageIndex, pageIndex);

    System.Drawing.Bitmap bitmap = singlePage[0].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    singlePage[0].Dispose();

    lblPageInfo.Text = $"Page {pageIndex + 1} of {currentPdf.PageCount}";
    UpdateNavigationState();
}
private void DisplayPageLazy(int pageIndex)
{
    if (currentPdf == null) return;

    // Render only the requested page
    AnyBitmap[] singlePage = currentPdf.ToBitmap(150, pageIndex, pageIndex);

    System.Drawing.Bitmap bitmap = singlePage[0].ToImage<System.Drawing.Bitmap>();
    pictureBoxPdf.Image?.Dispose();
    pictureBoxPdf.Image = bitmap;

    singlePage[0].Dispose();

    lblPageInfo.Text = $"Page {pageIndex + 1} of {currentPdf.PageCount}";
    UpdateNavigationState();
}
Private Sub DisplayPageLazy(pageIndex As Integer)
    If currentPdf Is Nothing Then Return

    ' Render only the requested page
    Dim singlePage As AnyBitmap() = currentPdf.ToBitmap(150, pageIndex, pageIndex)

    Dim bitmap As System.Drawing.Bitmap = singlePage(0).ToImage(Of System.Drawing.Bitmap)()
    pictureBoxPdf.Image?.Dispose()
    pictureBoxPdf.Image = bitmap

    singlePage(0).Dispose()

    lblPageInfo.Text = $"Page {pageIndex + 1} of {currentPdf.PageCount}"
    UpdateNavigationState()
End Sub
$vbLabelText   $csharpLabel

ToBitmap(dpi, startPage, endPage)オーバーロードは、特定のページ範囲をレンダリングします。 startPageendPageの両方に同じインデックスを渡すことにより、一度に1ページだけがレンダリングされます。これは、非常に大きなドキュメントに対してピークメモリ使用量を低く抑えるために、ナビゲーションごとのレンダリング時間を交換することができます。

IronPDF の画像出力機能の詳細については、 PDF から画像へのドキュメントPDF ラスタライズ ガイドを参照してください。

実用的な PDF ビューアでは、ユーザーがコンテンツを拡大したり、ページを回転したりすることも可能である必要があります。 ズーム用に、ToBitmapに渡されるDPIを動的に調整してください -- currentDpiフィールドを(150で開始)保存し、ズームボタンクリック時に50ずつ加減して、その後、更新されたDPIで遅延ページレンダラーを呼び出します。 高DPIは大きな画像を生成し、ZoomモードのPictureBoxがコントロールに合わせてスケールします。 72から400 DPIの範囲を保持し、Math.MinMath.Maxを使用して、低DPIでぼやけた出力や高DPIでの過度なメモリ消費を避けてください。

画像のレンダリングと同時に PDF からテキストを抽出するなど、より高度なレンダリング オプションについては、 PDF テキスト抽出ガイドPDF 画像抽出ドキュメントを参照してください。

IronPDFのより高度なビューアでは、 PDF文書の結合透かしの追加PDFページの回転注釈の追加といった機能も利用できます。

Windows フォーム用の PDF レンダリング ライブラリをどのように選択すればよいでしょうか?

Windowsフォーム用のPDFレンダリングライブラリを選択する際には、いくつかの選択肢があります。以下に、選択肢を評価するのに役立つ簡単な比較を示します。

Windows フォーム アプリケーション用の PDF レンダリング オプション
オプション 外部依存 .NETサポート 商用ライセンス 画像出力
IronPDF なし(自己完結型) .NET 4.6.2 -- .NET 10 はい(試用版あり) 設定可能なDPIで高忠実度を実現
Adobe Acrobat COM Adobe Reader/Acrobatがインストールされている Windows .NET Frameworkのみ Adobeライセンス インストールされているバージョンに依存
PDFium.NET PDFiumネイティブバイナリ .NET 5以上 BSD(オープンソース) 高品質、手動DPI制御
GhostScriptラッパー GhostScriptがインストールされている 任意(CLIまたはCOM経由) AGPLまたは商用 品質は良いがレンダリングが遅い

Windows フォームの使用例における IronPDF の主な利点は、完全に自己完結型であるため、エンド ユーザーのマシンに外部ソフトウェアをインストールする必要がないことです。 IronPDF のライセンス ページには、価格と無料試用オプションに関する詳細が記載されています。 パッケージは、ダウンロード統計とバージョン履歴とともにNuGet.orgで見つかります。 PDF 仕様でページ レンダリングがどのように定義されているかを詳しく知るには、ISO が発行したISO 32000-2 PDF 標準で、 IronPDFやその他のレンダラーが実装する必要がある形式について説明されています。

画像のレンダリング以外の IronPDF の機能の詳細については、 IronPDF のドキュメント ホームで、PDF の作成、HTML から PDF への変換、フォームの処理、デジタル署名などについて説明しています。

次のステップは何ですか?

このチュートリアルで示されたパターン -- ToBitmapでレンダリングし、PictureBoxで表示し、インデックスベースのコントロールでナビゲートする -- は、Windows Formsで動作し、依存関係のないPDFビューアを提供します。 ここからは、アプリケーションの要件に応じて、いくつかの方向性を検討する価値があります。

制作品質のビューアの場合は、大きなドキュメントを効率的に処理するために遅延ページ レンダリングを検討し、メイン ビューアの横にスクロール可能なサムネイル パネルを追加し、DPI パラメータに関連付けられたズーム コントロールを公開します。 ドキュメント管理アプリケーションの場合、ビューアと IronPDF のテキスト抽出機能およびフォーム フィールド読み取り機能を組み合わせて、検索可能なドキュメント インデックスを構築します。

ワークフローで PDF を表示する前にプログラムで生成する必要がある場合、 IronPDF はHTML から PDF への変換PDF の最初からの作成もサポートしているため、同じライブラリで生成と表示の両方を処理できます。

無料トライアルを開始して開発のための透かしのないライセンスキーを取得し、またはPdfDocumentAnyBitmap、およびサポートするレンダリングクラスに利用可能なメソッドの完全なセットを確認するには完全なAPIリファレンスをレビューしてください。 IronPDFのサンプルギャラリーには、C#で一般的なPDFタスクを網羅した、すぐに実行できるコードサンプルも用意されています。

よくある質問

C#を使用してWindows Forms PictureBoxにPDFを表示するにはどうすればよいですか?

IronPDFのToBitmapメソッドを使用して、PDFページをAnyBitmapオブジェクトとしてレンダリングし、それぞれをSystem.Drawing.Bitmapに変換して、PictureBox.Imageに割り当てます。

IronPDFは、C#でPDFページをレンダリングするためにどのメソッドを提供していますか?

IronPDFは、PDFページを任意のDPIでAnyBitmapオブジェクトとしてレンダリングするToBitmapメソッドを提供しています。PictureBoxで使用するために変換するには、ToImage()を呼び出します。

PDFページをPictureBoxでナビゲートすることは可能ですか?

はい。レンダリングされたページのビットマップを配列に格納し、ページインデックス変数を増減します。各ナビゲーションクリックで対応するビットマップをPictureBox.Imageに割り当てます。

WindowsフォームでPDFを表示するためにIronPDFを使う利点は何ですか?

IronPDFは完全に自己完結しており、外部ソフトウェアのインストールを必要としません。可変DPIレンダリング、ページナビゲーション、印刷、テキスト抽出をサポートしており、Adobe Acrobatへの依存はありません。

IronPDFはPictureBoxで表示するために複数ページのPDFを扱うことができますか?

はい。ToBitmapはページごとに1つのAnyBitmapを返します。配列を格納してインデックスでナビゲートするか、ToBitmap(dpi, startPage, endPage)のオーバーロードを使用して、オンデマンドでページごとにレンダリングします。

Curtis Chau
テクニカルライター

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね