IRONSOFTWAREHOME
IRONPDFの使用

BlazorでPDFを新しいタブで開く方法

Curtis Chau
Curtis Chau
Updated: 2026年4月23日

Blazor Server アプリケーションから新しいブラウザー タブで PDF を開くには、サーバー側での PDF 生成にIronPDFを使用し、クライアント側でのウィンドウ管理にはJavaScript相互運用性を組み合わせて、境界を越えた通信の課題を解決します。

ブラウザーの新しいタブでPDFドキュメントを開くことは、Blazor webアプリケーションでよくある要件です。 このチュートリアルでは、 IronPDFを使用して PDF を生成し、 JavaScript相互運用性を使用して新しいタブに表示し、ユーザーにシームレスなドキュメント表示エクスペリエンスを提供する方法を説明します。 この例では、Blazor Serverバージョンに焦点を当てています。

Blazorプロジェクトに必要な前提条件は何ですか?

まず、Visual Studio 2022で新しいBlazor Serverプロジェクトを作成します。NuGetパッケージマネージャーコンソールを介してIronPDFをインストールします。

PM > Install-Package IronPdf

フル機能を有効にするにはあなたのIronPDFライセンスをProgram.csで構成してください:

License.LicenseKey = "YOUR-LICENSE-KEY";

すべての機能のロックを解除するには、ライセンス キーを適用する必要があります。 IronPDF はBlazor Server アプリケーションとシームレスに連携し、最新の Web アプリケーションに強力なPDF 生成機能を提供します。 IronPDFを初めて使用する場合は、クイックスタート ガイドを参照して基本を理解してください。

Blazor が新しいタブで PDF を直接開けないのはなぜですか?

Blazor Serverアプリケーションはサーバー上のC#コードから直接ブラウザーのタブを操作できません。 Blazorから新しいタブで PDF を開くには、サーバー側の PDF 生成とクライアント側のウィンドウ管理を橋渡しするJavaScript相互運用 (JS 相互運用) が必要です。

IronPDFは開発者がサーバー上で高品質なPDFドキュメントを生成でき、それをJavaScriptのwindow.open()機能を使用して表示できます。 このアプローチは、 .NETアプリケーションにおける一般的なクライアント サーバー境界の問題を解決します。 ライブラリのChrome レンダリング エンジンにより、ドキュメントの視覚的な整合性を維持しながら、ピクセル単位で完璧な HTML から PDF への変換が保証されます。

BlazorとIronPDFを使用する場合、PDF 生成はサーバー側で行われるのに対し、 JavaScript の実行はクライアント側で行われるということを理解することが重要です。 この分離により、ウィンドウ管理タスクにJavaScript相互運用機能を使用する必要があります。

Blazor Web アプリにJavaScript関数を実装するにはどうすればよいですか?

PDF表示を新しいブラウザのタブで処理するために、こ for JavaScriptコードを_Host.cshtmlファイルに追加してください。 このモジュールは、クライアント側のウィンドウ操作を管理します。

<script>
    window.openPdfInNewTab = function (pdfData, fileName) {
        // Convert base64 to blob
        const byteCharacters = atob(pdfData);
        const byteNumbers = new Array(byteCharacters.length);
        for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }
        const byteArray = new Uint8Array(byteNumbers);
        // The type is 'application/pdf', not 'image/png' or 'image/jpg'
        const blob = new Blob([byteArray], { type: 'application/pdf' }); 
        // Create URL and open in new tab
        const blobUrl = URL.createObjectURL(blob);
        const newWindow = window.open(blobUrl, '_blank');
        if (newWindow) {
            newWindow.document.title = fileName || 'PDF Document';
        }
        // Clean up
        setTimeout(() => URL.revokeObjectURL(blobUrl), 100);
        return newWindow !== null;
    };
</script>
HTML

window.openPdfInNewTab JavaScript関数は、サーバーから新しいタブを開くために非常に重要です。 BlazorサーバーからBase64文字列としてPDFデータを受け取り、クライアントサイドのコードがそれをバイナリBlobオブジェクトに変換します。 このアプローチはPDF を Base64 に変換するのと似ていますが、逆であり、ブラウザーで PDF コンテンツを表示できるようになります。

このブロブは一時的なURLを作成するために使用され、最終的にブラウザが新しいタブでPDFを開くようにするためにwindow.open(blobUrl, '_blank')に渡されます。 BLOB URL テクニックは、サーバー側のファイル ストレージを必要とせずにメモリから PDF を読み込むときによく使用されます。

強化されたセキュリティを必要とするアプリケーションの場合は、ドキュメントをクライアントに送信する前に、 PDF の権限とパスワードを実装することを検討してください。 ドキュメントの信頼性を確保するためにデジタル署名を調べることもできます。

Blazorコンポーネントを作成するにはどうすればよいですか?

PDFを生成し、新しいタブで開くRazorコンポーネントを新しく作成します。 これはソリューションのメインテンプレートとして機能します:

@page "/pdf-viewer"
@using IronPdf
@inject IJSRuntime JS
<h3>Open PDF in New Tab</h3>
<div class="mb-3">
    <label>Enter URL:</label>
    <input @bind="targetUrl" class="form-control" />
</div>
<button class="btn btn-primary" @onclick="GenerateAndOpenPdf" 
        disabled="@isProcessing">
    @if (isProcessing)
    {
        <span>Generating PDF...</span>
    }
    else
    {
        <span>Generate and Open PDF</span>
    }
</button>
@if (!string.IsNullOrEmpty(errorMessage))
{
    <div class="alert alert-danger mt-3">@errorMessage</div>
}
@code {
    private string targetUrl = "___PROTECTED_URL_69___";
    private bool isProcessing = false;
    private string errorMessage = "";
    private async Task GenerateAndOpenPdf()
    {
        isProcessing = true;
        errorMessage = "";
        try
        {
            // Configure Chrome PDF renderer. Note the rendering details
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true,
                    RenderDelay = 500
                }
            };
            // Generate PDF from URL
            var pdfDocument = await Task.Run(() => 
                renderer.RenderUrlAsPdf(targetUrl));
            // Convert to base64
            byte[] pdfBytes = pdfDocument.BinaryData;
            string base64Pdf = Convert.ToBase64String(pdfBytes);
            // Open in new tab via JS interop
            bool success = await JS.InvokeAsync<bool>("openPdfInNewTab", 
                base64Pdf, $"Document_{DateTime.Now:yyyyMMdd_HHmmss}.pdf");
            if (!success)
            {
                // Giving the user an understandable error is key
                errorMessage = "Pop-up blocked. Please allow pop-ups for this site."; 
            }
        }
        catch (Exception ex)
        {
            errorMessage = $"Error: {ex.Message}";
        }
        finally
        {
            isProcessing = false;
        }
    }
}
Text

このコードブロックはメインのインタラクティブページを定義します。 Razorマークアップは、URL入力フィールドとボタンを持つ簡単なユーザーインターフェイスを作成します。 C# ChromePdfRendererインスタンスを使用します。 レンダリング オプションを使用すると、余白をカスタマイズしたり、 JavaScriptレンダリングを有効にしたり、動的コンテンツのレンダリング遅延を設定したりできます。

次に、得られたPDFバイト配列をBase64文字列に変換し、@inject IJSRuntime JSを使用してJavaScript関数を呼び出し、ユーザーのためにドキュメントを開きます。 このパターンは、Web アプリケーションでURL を PDF に変換するときに特に便利です。 より複雑なシナリオでは、パフォーマンスを向上させるために非同期 PDF 生成を実装する必要がある場合があります。

PDF 生成アクティビティを追跡し、問題をトラブルシューティングするには、カスタム ログを実装することを検討してください。 透かしヘッダー、フッターを追加して PDF を強化することもできます。

UI はどのように見えますか?

URL入力フィールドが'https://ironpdf.com'で事前に入力されたシンプルなWebフォームと、PDFを新しいタブで開くための

PDF は新しいタブにどのように表示されますか?

ブラウザタブで複数のページが表示されるC#PDFライブラリのプレゼンテーションをPDFビューワーが表示し、IronPDF for .NETドキュメントが表示されているナビゲーションコントロールとズームオプション

動的 HTML コンテンツを操作するにはどうすればよいですか?

URLではなく動的コンテンツからPDFを生成するには、RenderHtmlAsPdfを使用するようにアプローチを変更してください:

private async Task GenerateFromHtml()
{
    // Define CSS styles inside the HTML string for structure and appearance.
    string htmlContent = $@"
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{font-family: Arial; padding: 20px;}}
                h1 {{color: #2c3e50;}}
                table {{border-collapse: collapse; width: 100%;}}
                th, td {{border: 1px solid #ddd; padding: 8px;}}
            </style>
        </head>
        <body>
            <h1>{documentTitle}</h1>
            <p>{documentContent}</p>
            <table>
                <tr>
                    <th>Item</th>
                    <th>Value</th>
                </tr>
                <tr>
                    <td>Generated</td>
                    <td>{DateTime.Now}</td>
                </tr>
            </table>
        </body>
        </html>";
    var renderer = new ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
    byte[] pdfBytes = pdfDocument.BinaryData;
    await JS.InvokeVoidAsync("openPdfInNewTab", 
        Convert.ToBase64String(pdfBytes), "dynamic.pdf");
}
C#

GenerateFromHtmlメソッドは、IronPDFが既存のURLではなく動的に生成されたHTMLマークアップからPDFを生成できることを示します。 それは、見出し、コンテンツ、および動的データを含む完全なHTML文字列を構築します。 RenderHtmlAsPdfメソッドは変換をシームレスに処理します。 このアプローチは、データベースまたは API からの動的なデータを使用してPDF レポートを作成するのに最適です。

カスタム フォントレスポンシブ CSS 、さらにはDataURI を使用した埋め込み画像を使用して、HTML コンテンツを強化できます。 複雑なレイアウトの場合は、一貫したレンダリングを確保するために、 Bootstrap と Flexbox の使用を検討してください。

国際言語を扱う場合、 IronPDFは優れたUnicodeサポートを提供し、異なる言語やスクリプト間での文字の適切なレンダリングを保証します。また、改ページを制御したり、特殊なドキュメント要件に合わせてカスタム用紙サイズを実装したりすることも可能です。

更新された UI はどのように見えますか?

URLからPDFを開くオプションと動的HTMLコンテンツからPDFを生成するオプションを示す2つのフォームセクション、スタイル付き入力フィールド、プレースホルダーテキスト、ユーザーガイダンスを強化するためのアクションボタン

ダイナミック PDF はどのように表示されますか?

ブラウザが新しいタブで表示するPDFドキュメントで、'Dynamic PDF Report'というタイトルのフォーマットされたレポートをテーブルデータと生成タイムスタンプとともに表示し、動的コンテンツのレンダリング成功を示しています

どのような一般的な問題に対処すべきでしょうか?

ブラウザ間の互換性がなぜ重要なのか?

異なるブラウザーはBlob URLを異なる方法で処理します。 実装がChrome、Firefox、Edge、Safariで一貫した動作をすることをテストしてください。 一部のブラウザでは、ポップアップの処理やセキュリティ制限に関して特定の要件がある場合があります。 デフォルトでポップアップをブロックするブラウザにフォールバック メカニズムを実装することを検討してください。

Azure デプロイメントを扱うときに、 502 Bad Gateway エラーやその他のホスティング固有の問題が発生する可能性があります。 常にターゲット環境で PDF 生成をテストし、適切なエラー処理を実装してください。

大きな PDF ファイルをどのように処理すればよいですか?

大きなPDFドキュメントの場合、パフォーマンスを向上させるためにサーバー側のキャッシングを実装することを検討してください:

services.AddMemoryCache();
// Cache generated PDFs to avoid regeneration
private readonly IMemoryCache _cache;

public async Task<byte[]> GetCachedPdf(string cacheKey)
{
    if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes))
    {
        // Generate PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___");
        pdfBytes = pdf.BinaryData;
        
        // Cache for 10 minutes
        _cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10));
    }
    return pdfBytes;
}

大きなファイルで最適なパフォーマンスを得るには、 PDF 圧縮技術と線形化による高速 Web 表示を検討してください。 バッチ処理シナリオでの並列 PDF 生成を検討することもできます。

どのようなナビゲーションの代替手段を使用できますか?

JavaScript相互運用性に加えて、静的ファイル ミドルウェアを通じて PDF を提供し、代替ナビゲーションに標準の HTML アンカー タグを使用することもできます。

<a href="/pdfs/document.pdf" target="_blank">Open PDF</a>
HTML

このアプローチは事前に生成されたPDFにはうまく機能しますが、JSインターオップメソッドの動的生成機能を欠いています。 より高度なシナリオでは、専用のPDF 表示コンポーネントを実装するか、 MemoryStreamを使用してディスクに保存せずに PDF を提供することを検討してください。

スケーラビリティを向上させるために、 PDF を Azure Blob Storage などのクラウド ストレージに保存することも検討してください。 オフライン アクセスが必要なアプリケーションの場合は、新しいタブ機能とともにPDF ダウンロード機能を実装することを検討してください。

どのようなベストプラクティスに従うべきでしょうか?

1.エラー処理: PDF 生成を、意味のあるエラー メッセージを含む try-catch ブロックで囲みます。 カスタム エラー ログを使用して問題を追跡します。

2.パフォーマンス: UI のブロックを防ぐために async/await を使用します。 JavaScript を多用するページにレンダリング遅延を実装します。 最初のレンダリングを高速化するために、エンジンを事前にウォームアップします。

3.**ユーザー エクスペリエンス:**読み込みインジケーターを表示し、ポップアップ ブロッカーを適切に処理します。 複数ページの PDFの進行状況を追跡します。 ネットワークの問題に関する明確なフィードバックを提供します。

  1. **DOM 操作:**サーバー側の C# はクライアントの DOM を直接操作できないことに注意してください。 複雑なやり取りにはJavaScriptメッセージ リスナーを使用します。

5.セキュリティ: PDF を生成する前にすべてのユーザー入力を検証します。 必要に応じて、 PDF サニタイズデジタル署名暗号化を適用します。 安全な送信のために HTTPS を使用します。

6.リソース管理: PDF ドキュメントを適切に破棄し、メモリ リークを防止します。 最適化されたコンテナ化されたデプロイメントのためにパッケージ サイズを監視します。

結論

IronPDF の強力な PDF 生成機能と Blazor for JavaScript相互運用性を組み合わせることで、新しいブラウザ タブで PDF を開くための強力なソリューションが提供されます。 このアプローチにより、開発者は最新のBlazorアプリケーションとシームレスに統合される、動的でプロフェッショナルな PDF ドキュメントを作成できます。 HTML を PDF に変換する場合、フォームを作成する場合複雑なドキュメントを整理する場合など、 IronPDF はエンタープライズ グレードの PDF 処理に必要なツールを提供します。

BlazorプロジェクトでPDF機能を実装する準備はできましたか? 無料のIronPDFトライアルを今日開始してください。 トライアルには透かしのないフル機能と成功を確実にするための包括的なサポートが含まれています。 実稼働環境への展開については、 WindowsLinuxAzureなどのさまざまなプラットフォームのライセンス オプション展開ガイドをご覧ください。

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。