フッターコンテンツにスキップ
IRONPDFの使用
.NET 6でPDFファイルを生成する方法

C# 14 で PDF を作成: Visual Studio Code を使用した 2025 年の上級ガイド

C#でPDFを作成することは、現代 for .NET開発者にとっての必須スキルです。財務報告書を作成する場合でも、医療文書を生成する場合でも、eコマースの領収書を作成する場合でも、適切な.NET PDFライブラリを使用すれば、数行のコードでHTMLコンテンツをプロフェッショナルなPDF文書に変換し、文書の構造と外観を完全に制御できます。

IronPDFは.NETでPDFを作成する最もシンプルで使いやすいライブラリです - その非常に簡単な習得曲線により、数分でPDFを生成でき、数時間かかりません。 この包括的なガイドでは、C#でPDFドキュメントを作成する方法を正確に示します。IronPDFは強力なC# PDF生成ツールで、ピクセル完璧な結果を生成し、2025年11月にリリース予定 for .NET 10を含むすべての最新.NETプラットフォームをサポートしています。このチュートリアルは、最も単純な使用例から最も高度なPDF生成シナリオまでを網羅していますが、恐れないでください - 最初から始めて進んでいきましょう。 PDFの生成方法を複数学び、簡単なHTML文字列から複雑な複数ページのレポートまで、一般的な問題のトラブルシューティングとさまざまなPDF生成タスクのパフォーマンスを最適化する方法を学びます。

クイックスタート: C#で最初のPDFを作成 (2分未満)

今すぐPDFを生成したいですか? 現代 for .NETでのPDF生成の力を示すシンプルですが機能的なPDFドキュメントを作成しましょう。 まず、IronPDFをインストールします。NuGetパッケージマネージャ経由で - この単一パッケージには、すぐにPDFを作成開始するために必要なすべてが含まれています。 IronPDFは開発用に無料で使用できるため、ライセンスを決定する前にすべての機能を試すことができます。

Install-Package IronPdf

C#を使用してPDFコンテンツを作成しましょう:

using IronPdf;

// Instantiate the PDF generator - this is your gateway to PDF creation
var renderer = new ChromePdfRenderer();

// Create a PDF from HTML string - yes, it's really this simple!
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>PDF generated successfully!</p>");

// Save your newly created PDF document
pdf.SaveAs("my-first-pdf.pdf");

Console.WriteLine("PDF generated successfully!");
using IronPdf;

// Instantiate the PDF generator - this is your gateway to PDF creation
var renderer = new ChromePdfRenderer();

// Create a PDF from HTML string - yes, it's really this simple!
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>PDF generated successfully!</p>");

// Save your newly created PDF document
pdf.SaveAs("my-first-pdf.pdf");

Console.WriteLine("PDF generated successfully!");
$vbLabelText   $csharpLabel

これで完了です! C#で最初のPDFドキュメントを作成しました。 複雑なPDF APIを学ぶ必要はなく、インストールするサーバ依存もなく、低レベルのPDFコマンドをマスターする必要もありません。 HTMLを投入し、PDFが出力される - これがPDF生成のあるべき姿です。 しかしこれは始まりに過ぎません - なぜこのアプローチがこんなに強力なのかを探求し、より洗練されたPDFドキュメントを作成する方法を見つけましょう。

C#でPDFを作成する方法: クイック概要

C#でPDFを作成するには、IronPDF、QuestPDF、PDFsharpなどのサードパーティライブラリを利用できます。これらのライブラリは、ゼロからPDFを作成したり、HTMLをPDFに変換するなど、さまざまな機能を提供します。

プロセスの一般的な概要は次のとおりです:

  1. PDFライブラリのインストール: Visual StudioのNuGetパッケージマネージャを使用して適切なライブラリをインストールします。
  2. 新しいPDFドキュメントの作成: PDFドキュメントオブジェクトをインスタンス化します。
  3. コンテンツの追加: ページ、テキスト、画像、およびその他の要素をドキュメントに追加します。
  4. ドキュメントの保存: ファイルパスを指定し、PDFを保存します。

IronPDFを使用した例はこちら:

using IronPdf;

public class Example
{
    public static void CreatePdf()
    {
        // Create a new PDF document
        var pdf = new ChromePdfRenderer();

        // Add some text
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a dynamically created PDF.</p>";

        // Render HTML to PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdfDocument.SaveAs("MyDynamicPdf.pdf");
    }
}
using IronPdf;

public class Example
{
    public static void CreatePdf()
    {
        // Create a new PDF document
        var pdf = new ChromePdfRenderer();

        // Add some text
        string htmlContent = "<h1>Hello, PDF!</h1><p>This is a dynamically created PDF.</p>";

        // Render HTML to PDF
        var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent);

        // Save the PDF
        pdfDocument.SaveAs("MyDynamicPdf.pdf");
    }
}
$vbLabelText   $csharpLabel

それでは、なぜ開発者がPDFを作成する必要があるのかを深く掘り下げ、IronPDFがこのプロセスをどのように簡単で強力にするのかを探りましょう。

開発者はなぜC#でPDFを作成する必要があるのか?

C#でプログラム的にPDFを作成することは、ドキュメント生成を自動化し、ビジネスプロセスを合理化する可能性を広げます。 IronPDFは、グローバルに1400万の開発者の信頼を得ています。なぜなら、.NETでのPDFの構築において比類のない信頼性と使いやすさを提供するからです。 金融業界では、開発者はC#を使用して、正確な書式設定とセキュリティ機能を必要とするPDF請求書、ステートメント、および規制レポートを作成します。 医療機関は、文書の完全性とHIPAAコンプライアンスを確保するために、患者記録、ラボ結果、およびPDFとしての保険申請書を作成します。 Eコマースプラットフォームは、PDFの領収書、運送ラベル、QRコード付きのチケットをPDFに直接埋め込みます(IronQRなどのツールを使用)。 プログラム的にPDFドキュメントを操作する能力があれば、手動操作なしでドキュメントを作成、変更し、セキュア化することができます。

IronPDFのような最新の.NET PDFライブラリを使用するメリットは、それがあなたの組織の既存のワークフローにスムーズに統合できることです。 ビジネスユーザーからのWordドキュメントを変換する、開発チームからMarkdownドキュメントを変換する、またはウェブベースのレポートからPDFを生成するなど、IronPDFはそれらすべてを処理します。 この組織的な柔軟性が、プログラム的な.NETでのPDF生成を企業が選択する理由です - それは手動での文書作成を排除し、エラーを減らし、すべての生成されたPDFにおいて一貫性を確保し、無数の従業員時間を節約します。特有のPDF構文を学習したり、すべての要素を手動で配置したりする代わりに、HTMLとCSSを使用してドキュメントをデザインできます。 このアプローチは開発時間を大幅に短縮し、すべての生成されたPDFで一貫したブランディングを簡単に維持することができます。 シングルページの請求書を作成するか、複雑な複数章のレポートを作成するかに関わらず、原則は同じです - HTMLで設計し、C#でPDFを生成します。

C#プロジェクトでIronPDFを設定する方法

PDFを作成する前に、最高のPDF生成のために開発環境が適切に設定されていることを確認しましょう。 IronPDFはすべての最新.NETバージョンをサポートしており、.NET 8、.NET 9、2025年11月にリリース予定の.NET 10を含んでいます(Iron Softwareは.NET FoundationおよびMicrosoftと緊密に協力し、初日からの互換性を確保しています)。 設定プロセスは簡単ですが、オプションを理解すれば、あなたの特定のニーズに最適なアプローチを選択できます。

インストール方法

方法1: Visual Studioパッケージマネージャ(初心者におすすめ)

最も簡単な IronPDFの使用開始方法は、Visual Studioの組み込みのNuGetパッケージマネージャを使用することです。 このグラフィカルインターフェースを使えば、PDF生成の依存関係を簡単に閲覧、インストール、管理できます:

  1. ソリューションエクスプローラーでプロジェクトを右クリック
  2. "NuGetパッケージの管理" を選択
  3. "参照" をクリックし、"IronPDF" を検索
  4. Iron Softwareによって開発されたIronPDFパッケージを選択
  5. インストールをクリックし、ライセンス契約を承諾
パッケージマネージャーコンソール

方法 2: パッケージマネージャーコンソール

For developers who prefer command-line tools, the パッケージマネージャーコンソール provides a quick way to install IronPDF:

Install-Package IronPdf

方法3: .NET CLI(クロスプラットフォーム開発向け)

macOS、Linux、または.NET CLIを好む場合は、プロジェクトディレクトリでこのコマンドを使用してください:

dotnet add package IronPdf

適切なパッケージの選択

IronPDFはいくつかのNuGetパッケージを提供しており、さまざまなデプロイメントシナリオに最適化されています。 これらのオプションを理解することで、デプロイメントサイズを最小化し、パフォーマンスを最適化できます:

  • IronPdf: Windows、macOS、Linux に必要なものがすべて含まれた標準パッケージ。 ほとんどのアプリケーションに最適です。
  • IronPdf.Slim:実行時にプラットフォーム固有のコンポーネントをダウンロードする軽量な基本パッケージです。パッケージサイズが重要なクラウド展開に最適です。
  • IronPdf.Linux:必要な依存関係がすべて事前にパッケージ化された、Linux デプロイメント向けに特別に最適化されています。
  • IronPdf.MacOs:ネイティブ Apple Silicon サポートを備えた macOS 環境向けにカスタマイズされています。

ご注意Azure、AWS、またはDockerでのクラウドデプロイメントでは、コンテナサイズを縮小するためにIronPdf.Slimのご利用をご検討ください。必要なコンポーネントは初回使用時に自動的にダウンロードされます。

インストールの検証

C#ではPDFを生成するのにどのような方法がありますか?

using IronPdf;
using System.IO;

// Test yourIronPDFinstallation
var renderer = new ChromePdfRenderer();
var testPdf = renderer.RenderHtmlAsPdf("<p>Installation test successful!</p>");
testPdf.SaveAs("test.pdf");

if (File.Exists("test.pdf"))
{
    Console.WriteLine("IronPDF installed and working correctly!");
}
using IronPdf;
using System.IO;

// Test yourIronPDFinstallation
var renderer = new ChromePdfRenderer();
var testPdf = renderer.RenderHtmlAsPdf("<p>Installation test successful!</p>");
testPdf.SaveAs("test.pdf");

if (File.Exists("test.pdf"))
{
    Console.WriteLine("IronPDF installed and working correctly!");
}
$vbLabelText   $csharpLabel

IronPDF は、複数のアプローチ を提供し、PDF ドキュメントを作成する のに適しています。各アプローチは異なるシナリオと要件に合わせられています。 HTML文字列を用いてPDFをゼロから作成する場合、既存のファイルを変換する場合、またはライブウェブコンテンツをキャプチャする場合など、IronPDFはあらゆる場面に対応し、包括的なC# PDF生成ツールとして機能します。 HTML 文字列から ゼロから PDF を作成する 際や、既存のファイルを変換する際、あるいはライブ Web コンテンツをキャプチャする際には、IronPDF が包括的な C# PDF ジェネレーター としてサポートします。 ### 1. HTML文字列からPDFを作成(最も柔軟性がある)

HTML文字列からPDFを作成すると、最終ドキュメントのコンテンツとスタイリングを完全に制御 できます。

HTML文字列からPDFを作成すると、完全な制御が得られ、最終文書をPDF形式に変換する際のコンテンツとスタイリングが行えます。 最新のHTML5とCSS3の機能を使用して、プロフェッショナルなPDFを作成できます。flexboxやグリッドレイアウトなども含まれます。 フレックスボックスやグリッドレイアウトを含む現代の HTML5 および CSS3 機能を使用して、HTML コンテンツをプロフェッショナルな PDF に変換できます。 HTML コンテンツを動的に変換する機能により、これはC# で PDF を作成するための最も汎用性の高いアプローチになります。

using IronPdf;
using System;
using System.Linq;

var renderer = new ChromePdfRenderer();

// Build dynamic content with data
var customerName = "Acme Corporation";
var orderDate = DateTime.Now;
var items = new[] { 
    new { Name = "Widget Pro", Price = 99.99m },
    new { Name = "Gadget Plus", Price = 149.99m }
};

// Create HTML with embedded data and modern CSS
var html = $@"
    <html>
    <head>
        <style>
            body {{ 
                font-family: 'Segoe UI', Arial, sans-serif; 
                margin: 40px;
                color: #333;
            }}
            .invoice-header {{
                display: flex;
                justify-content: space-between;
                border-bottom: 2px solid #0066cc;
                padding-bottom: 20px;
            }}
            .items-table {{
                width: 100%;
                margin-top: 30px;
                border-collapse: collapse;
            }}
            .items-table th {{
                background: #f0f0f0;
                padding: 10px;
                text-align: left;
            }}
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <div>
                <h1>Invoice</h1>
                <p>Customer: {customerName}</p>
            </div>
            <div>
                <p>Date: {orderDate:yyyy-MM-dd}</p>
                <p>Invoice #: INV-{orderDate:yyyyMMdd}-001</p>
            </div>
        </div>

        <table class='items-table'>
            <thead>
                <tr>
                    <th>Item</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>";

foreach (var item in items)
{
    html += $@"
                <tr>
                    <td>{item.Name}</td>
                    <td>${item.Price:F2}</td>
                </tr>";
}

html += @"
            </tbody>
        </table>
    </body>
    </html>";

// Generate the PDF document
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"invoice-{orderDate:yyyyMMdd}.pdf");
using IronPdf;
using System;
using System.Linq;

var renderer = new ChromePdfRenderer();

// Build dynamic content with data
var customerName = "Acme Corporation";
var orderDate = DateTime.Now;
var items = new[] { 
    new { Name = "Widget Pro", Price = 99.99m },
    new { Name = "Gadget Plus", Price = 149.99m }
};

// Create HTML with embedded data and modern CSS
var html = $@"
    <html>
    <head>
        <style>
            body {{ 
                font-family: 'Segoe UI', Arial, sans-serif; 
                margin: 40px;
                color: #333;
            }}
            .invoice-header {{
                display: flex;
                justify-content: space-between;
                border-bottom: 2px solid #0066cc;
                padding-bottom: 20px;
            }}
            .items-table {{
                width: 100%;
                margin-top: 30px;
                border-collapse: collapse;
            }}
            .items-table th {{
                background: #f0f0f0;
                padding: 10px;
                text-align: left;
            }}
        </style>
    </head>
    <body>
        <div class='invoice-header'>
            <div>
                <h1>Invoice</h1>
                <p>Customer: {customerName}</p>
            </div>
            <div>
                <p>Date: {orderDate:yyyy-MM-dd}</p>
                <p>Invoice #: INV-{orderDate:yyyyMMdd}-001</p>
            </div>
        </div>

        <table class='items-table'>
            <thead>
                <tr>
                    <th>Item</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>";

foreach (var item in items)
{
    html += $@"
                <tr>
                    <td>{item.Name}</td>
                    <td>${item.Price:F2}</td>
                </tr>";
}

html += @"
            </tbody>
        </table>
    </body>
    </html>";

// Generate the PDF document
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"invoice-{orderDate:yyyyMMdd}.pdf");
$vbLabelText   $csharpLabel

2. URLからPDFを生成する(ウェブページキャプチャ)

時には、既存のウェブページを PDF ドキュメントに変換する必要があります - アーカイブや報告、オンラインコンテンツのオフライン版作成に最適です。 IronPDFのURLからPDFへの変換は実際のChromiumエンジンを使用しており、複雑なJavaScriptを多用するサイトが正しくレンダリングされることを保証します。 この方法は、ダッシュボードのスナップショットを作成したり、オンライン領収書を保存したり、Webベースのレポートを文書化したりする際に非常に価値があります:

URLからPDFへの例
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options for optimal capture
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Wait for JavaScript to fully load (important for SPAs)
renderer.RenderingOptions.RenderDelay = 2000; // 2 seconds

// Enable JavaScript execution
renderer.RenderingOptions.EnableJavaScript = true;

// Capture a web page as PDF
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");
pdf.SaveAs("dashboard-capture.pdf");

// For authenticated pages, you can set cookies
var cookieManager = renderer.RenderingOptions.CustomCookies;
cookieManager["session_id"] = "your-session-token";

// Capture authenticated content
var securePdf = renderer.RenderUrlAsPdf("https://app.example.com/private/report");
securePdf.SaveAs("private-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure rendering options for optimal capture
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Wait for JavaScript to fully load (important for SPAs)
renderer.RenderingOptions.RenderDelay = 2000; // 2 seconds

// Enable JavaScript execution
renderer.RenderingOptions.EnableJavaScript = true;

// Capture a web page as PDF
var pdf = renderer.RenderUrlAsPdf("https://example.com/dashboard");
pdf.SaveAs("dashboard-capture.pdf");

// For authenticated pages, you can set cookies
var cookieManager = renderer.RenderingOptions.CustomCookies;
cookieManager["session_id"] = "your-session-token";

// Capture authenticated content
var securePdf = renderer.RenderUrlAsPdf("https://app.example.com/private/report");
securePdf.SaveAs("private-report.pdf");
$vbLabelText   $csharpLabel

3. HTMLファイルからPDFを作成する(テンプレートベースの生成)

テンプレートベースのPDF生成は、デザイナーがアプリケーションコードから独立して維持できる複雑なレイアウトを持っているときに理想的です。 HTMLテンプレートをファイルとして保存することで、デザインとロジックの間にクリーンな分離を可能にします。 このアプローチは、証明書、契約、または標準化されたレポートなど、一貫した文書を生成するのに非常に効果的です:

HTMLファイルをPDFに
using IronPdf;
using System.IO;
using System;

var renderer = new ChromePdfRenderer();

// Basic file conversion
var pdf = renderer.RenderHtmlFileAsPdf("Templates/certificate-template.html");
pdf.SaveAs("certificate.pdf");

// Advanced: Using templates with asset directories
// Perfect when your HTML references images, CSS, or JavaScript files
var basePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "Assets");
var pdfWithAssets = renderer.RenderHtmlFileAsPdf(
    "Templates/report-template.html", 
    basePath  //IronPDFwill resolve relative paths from here
);

// Even better: Template with placeholders
var templateHtml = File.ReadAllText("Templates/contract-template.html");
templateHtml = templateHtml
    .Replace("{{ClientName}}", "Tech Innovations Inc.")
    .Replace("{{ContractDate}}", DateTime.Now.ToString("MMMM dd, yyyy"))
    .Replace("{{ContractValue}}", "$50,000");

var contractPdf = renderer.RenderHtmlAsPdf(templateHtml);
contractPdf.SaveAs("contract-final.pdf");
using IronPdf;
using System.IO;
using System;

var renderer = new ChromePdfRenderer();

// Basic file conversion
var pdf = renderer.RenderHtmlFileAsPdf("Templates/certificate-template.html");
pdf.SaveAs("certificate.pdf");

// Advanced: Using templates with asset directories
// Perfect when your HTML references images, CSS, or JavaScript files
var basePath = Path.Combine(Directory.GetCurrentDirectory(), "Templates", "Assets");
var pdfWithAssets = renderer.RenderHtmlFileAsPdf(
    "Templates/report-template.html", 
    basePath  //IronPDFwill resolve relative paths from here
);

// Even better: Template with placeholders
var templateHtml = File.ReadAllText("Templates/contract-template.html");
templateHtml = templateHtml
    .Replace("{{ClientName}}", "Tech Innovations Inc.")
    .Replace("{{ContractDate}}", DateTime.Now.ToString("MMMM dd, yyyy"))
    .Replace("{{ContractValue}}", "$50,000");

var contractPdf = renderer.RenderHtmlAsPdf(templateHtml);
contractPdf.SaveAs("contract-final.pdf");
$vbLabelText   $csharpLabel

4. Markdown を PDF に変換する

Markdownは、技術文書、READMEファイル、そしてコンテンツ管理システムのスタンダードとなっています。 IronPDFを使用すると、Markdownコンテンツを直接PDFに変換することが簡単で、書式は保たれつつプロフェッショナルな外観の文書を作成できます。 この機能は、Markdown形式で文書を維持する組織にとって特に有益です。開発者は好みの形式で文書を書くことができ、システムは自動的にクライアントや利害関係者向けにPDFを生成できます。

using IronPdf;

var renderer = new ChromePdfRenderer();

// Convert Markdown string to PDF
string markdownContent = @"
# Project Documentation

## Overview
This project demonstrates **PDF generation** from _Markdown_ content.

### Features
- Easy conversion
- Preserves formatting
- Supports lists and tables

| フィーチャー | Status |
|---------|--------|
| Markdown Support | |
| Table Rendering | |
| Code Blocks | |

```csharp
// Code blocks are preserved
var pdf = RenderMarkdownAsPdf(markdown);
\`\`\`
";

// Render Markdown as PDF
var pdfFromMarkdown = renderer.RenderMarkdownStringAsPdf(markdownContent);
pdfFromMarkdown.SaveAs("documentation.pdf");

// Convert Markdown file to PDF
var pdfFromFile = renderer.RenderMarkdownFileAsPdf("README.md");
pdfFromFile.SaveAs("readme-pdf.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Convert Markdown string to PDF
string markdownContent = @"
# Project Documentation

## Overview
This project demonstrates **PDF generation** from _Markdown_ content.

### Features
- Easy conversion
- Preserves formatting
- Supports lists and tables

| フィーチャー | Status |
|---------|--------|
| Markdown Support | |
| Table Rendering | |
| Code Blocks | |

```csharp
// Code blocks are preserved
var pdf = RenderMarkdownAsPdf(markdown);
\`\`\`
";

// Render Markdown as PDF
var pdfFromMarkdown = renderer.RenderMarkdownStringAsPdf(markdownContent);
pdfFromMarkdown.SaveAs("documentation.pdf");

// Convert Markdown file to PDF
var pdfFromFile = renderer.RenderMarkdownFileAsPdf("README.md");
pdfFromFile.SaveAs("readme-pdf.pdf");
$vbLabelText   $csharpLabel

MarkdownからPDFへの変換は、Gitのようなバージョン管理システムを使用する組織にとって特に有用です。 ドキュメンテーションワークフロー全体を自動化できます。開発者はMarkdownファイルを更新し、CI/CDパイプラインは自動的にPDF文書を生成し、ステークホルダーは手動介入なしでプロフェッショナルにフォーマットされたドキュメントを受け取ります。 ### 5. Wordドキュメント(DOCX)のPDFへの変換

5. Word文書(DOCX)をPDFに変換

IronPDFは、フォーマット、画像、さらにはメールマージのような複雑な機能を保持して、シームレスなDOCXからPDFへの変換を提供します。 この機能は、ビジネスユーザーがMicrosoft Wordで使い慣れた作業を続けながら、システムが外部配布用にPDFを自動生成するために変革をもたらします。 この機能は、組織にとって革新をもたらします - ビジネスユーザーはおなじみのMicrosoft Wordで作業を続けることができ、システムが自動的にPDFを生成して外部に配布します。 このDOCX変換機能は、組織内でのドキュメントワークフローの自動化にとって非常に貴重なものです。

using IronPdf;
using System.Collections.Generic;

// Simple DOCX to PDF conversion
var docxRenderer = new DocxToPdfRenderer();
var pdfFromDocx = docxRenderer.RenderDocxAsPdf("proposal.docx");
pdfFromDocx.SaveAs("proposal.pdf");

// Advanced: Mail merge functionality for mass document generation
var recipients = new List<Dictionary<string, string>>
{
    new() { ["Name"] = "John Smith", ["Company"] = "Tech Corp", ["Date"] = "March 15, 2024" },
    new() { ["Name"] = "Jane Doe", ["Company"] = "Innovation Inc", ["Date"] = "March 15, 2024" }
};

// Configure mail merge options
var options = new DocxPdfRenderOptions
{
    MailMergeDataSource = recipients,
    MailMergePrintAllInOnePdfDocument = false // Creates separate PDFs
};

// Generate personalized PDFs from template
foreach (var recipient in recipients)
{
    var personalizedPdf = docxRenderer.RenderDocxAsPdf("letter-template.docx", options);
    personalizedPdf.SaveAs($"letter-{recipient["Name"].Replace(" ", "-")}.pdf");
}
using IronPdf;
using System.Collections.Generic;

// Simple DOCX to PDF conversion
var docxRenderer = new DocxToPdfRenderer();
var pdfFromDocx = docxRenderer.RenderDocxAsPdf("proposal.docx");
pdfFromDocx.SaveAs("proposal.pdf");

// Advanced: Mail merge functionality for mass document generation
var recipients = new List<Dictionary<string, string>>
{
    new() { ["Name"] = "John Smith", ["Company"] = "Tech Corp", ["Date"] = "March 15, 2024" },
    new() { ["Name"] = "Jane Doe", ["Company"] = "Innovation Inc", ["Date"] = "March 15, 2024" }
};

// Configure mail merge options
var options = new DocxPdfRenderOptions
{
    MailMergeDataSource = recipients,
    MailMergePrintAllInOnePdfDocument = false // Creates separate PDFs
};

// Generate personalized PDFs from template
foreach (var recipient in recipients)
{
    var personalizedPdf = docxRenderer.RenderDocxAsPdf("letter-template.docx", options);
    personalizedPdf.SaveAs($"letter-{recipient["Name"].Replace(" ", "-")}.pdf");
}
$vbLabelText   $csharpLabel

この DOCX 変換機能は、組織内でのドキュメントワークフローを自動化するために 不可欠です。 営業チームがWordで提案書を作成する場合を考えてみてください - IronPDFを使用すると、これらの提案書は自動的にPDFに変換され、透かし、セキュリティ設定、デジタル署名がプログラム的に適用されます。 メールマージ機能により、大量のパーソナライズされたPDF文書を生成できます - 手動介入なしで数千のカスタマイズされた手紙、証明書、または契約を作成するのに最適です。 ### 6. 画像をPDFに変換

画像をPDFに変換することは、写真集の作成、スキャンした文書のコンパイル、または画像ベースのレポートの作成に欠かせません。

IronPDFはすべての主要な画像形式をサポートしており、レイアウトや品質の制御オプションを提供します: ### 7. ASP.NETページからPDFを生成

using IronPdf;
using IronPdf.Imaging; // Install-Package IronPdf
using System.IO;

var renderer = new ChromePdfRenderer();

// Convert single image to PDF
var imagePath = "product-photo.jpg";
var imageHtml = $@"
    <html>
    <body style='margin: 0; padding: 0;'>
        <img src='{imagePath}' style='width: 100%; height: auto;' />
    </body>
    </html>";

var imagePdf = renderer.RenderHtmlAsPdf(imageHtml, Path.GetDirectoryName(imagePath));
imagePdf.SaveAs("product-catalog-page.pdf");

// Create multi-page PDF from multiple images
var imageFiles = Directory.GetFiles("ProductImages", "*.jpg");
var catalogHtml = "<html><body style='margin: 0;'>";

foreach (var image in imageFiles)
{
    catalogHtml += $@"
        <div style='page-break-after: always;'>
            <img src='{Path.GetFileName(image)}' style='width: 100%; height: auto;' />
            <p style='text-align: center;'>{Path.GetFileNameWithoutExtension(image)}</p>
        </div>";
}

catalogHtml += "</body></html>";

var catalogPdf = renderer.RenderHtmlAsPdf(catalogHtml, "ProductImages");
catalogPdf.SaveAs("product-catalog.pdf");
using IronPdf;
using IronPdf.Imaging; // Install-Package IronPdf
using System.IO;

var renderer = new ChromePdfRenderer();

// Convert single image to PDF
var imagePath = "product-photo.jpg";
var imageHtml = $@"
    <html>
    <body style='margin: 0; padding: 0;'>
        <img src='{imagePath}' style='width: 100%; height: auto;' />
    </body>
    </html>";

var imagePdf = renderer.RenderHtmlAsPdf(imageHtml, Path.GetDirectoryName(imagePath));
imagePdf.SaveAs("product-catalog-page.pdf");

// Create multi-page PDF from multiple images
var imageFiles = Directory.GetFiles("ProductImages", "*.jpg");
var catalogHtml = "<html><body style='margin: 0;'>";

foreach (var image in imageFiles)
{
    catalogHtml += $@"
        <div style='page-break-after: always;'>
            <img src='{Path.GetFileName(image)}' style='width: 100%; height: auto;' />
            <p style='text-align: center;'>{Path.GetFileNameWithoutExtension(image)}</p>
        </div>";
}

catalogHtml += "</body></html>";

var catalogPdf = renderer.RenderHtmlAsPdf(catalogHtml, "ProductImages");
catalogPdf.SaveAs("product-catalog.pdf");
$vbLabelText   $csharpLabel

ウェブアプリケーションの場合、既存のビューからのPDF生成は、ウェブコンテンツのダウンロード可能なバージョンを作成するためのシームレスな方法です。

この統合能力は、ウェブアプリケーションからPDFを生成する必要がある組織にとって非常に重要です - カスタマーポータルがステートメントを生成したり、管理ダッシュボードがレポートを作成したりする場合や、eラーニングプラットフォームが証明書を作成する場合などに。 この統合機能は、ウェブアプリケーションからPDFを作成する必要がある組織にとって重要です。顧客ポータルが明細書を生成する場合でも、管理ダッシュボードがレポートを作成する場合でも、eラーニングプラットフォームが証明書を作成する場合でもです。 IronPDFはMVC、Razor Pages、BlazorなどすべてのASP.NETテクノロジーと連携し、Microsoftエコシステムにすでに投資している組織にとって完璧な選択肢です:

// Namespace: Microsoft.AspNetCore.Mvc
using Microsoft.AspNetCore.Mvc;
// Namespace: IronPdf
using IronPdf;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// ASP.NET Core MVC Controller
public class ReportController : Controller
{
    private readonly ChromePdfRenderer _pdfRenderer;

    public ReportController()
    {
        _pdfRenderer = new ChromePdfRenderer();
    }

    public async Task<IActionResult> DownloadReport(int reportId)
    {
        // Get your report data
        var reportData = await GetReportData(reportId);

        // Render view to HTML string
        var html = await RenderViewToStringAsync("Reports/MonthlyReport", reportData);

        // Convert HTML content to PDF
        var pdf = _pdfRenderer.RenderHtmlAsPdf(html);

        // Return as file download
        return File(
            pdf.BinaryData, 
            "application/pdf", 
            $"report-{reportId}-{DateTime.Now:yyyy-MM}.pdf"
        );
    }

    private async Task<string> RenderViewToStringAsync(string viewName, object model)
    {
        ViewData.Model = model;
        using var sw = new StringWriter();
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(
            ControllerContext, 
            viewResult.View, 
            ViewData, 
            TempData, 
            sw, 
            new HtmlHelperOptions()
        );
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}
// Namespace: Microsoft.AspNetCore.Mvc
using Microsoft.AspNetCore.Mvc;
// Namespace: IronPdf
using IronPdf;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// ASP.NET Core MVC Controller
public class ReportController : Controller
{
    private readonly ChromePdfRenderer _pdfRenderer;

    public ReportController()
    {
        _pdfRenderer = new ChromePdfRenderer();
    }

    public async Task<IActionResult> DownloadReport(int reportId)
    {
        // Get your report data
        var reportData = await GetReportData(reportId);

        // Render view to HTML string
        var html = await RenderViewToStringAsync("Reports/MonthlyReport", reportData);

        // Convert HTML content to PDF
        var pdf = _pdfRenderer.RenderHtmlAsPdf(html);

        // Return as file download
        return File(
            pdf.BinaryData, 
            "application/pdf", 
            $"report-{reportId}-{DateTime.Now:yyyy-MM}.pdf"
        );
    }

    private async Task<string> RenderViewToStringAsync(string viewName, object model)
    {
        ViewData.Model = model;
        using var sw = new StringWriter();
        var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        var viewContext = new ViewContext(
            ControllerContext, 
            viewResult.View, 
            ViewData, 
            TempData, 
            sw, 
            new HtmlHelperOptions()
        );
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}
$vbLabelText   $csharpLabel

PDFをどのようにプロフェッショナルに見せることができますか?

PDFを作成することは一つのことですが、プロフェッショナルに見せることが.NETでPDFを生成する際にアプリケーションの差別化を図るポイントです。 IronPDFの包括的なスタイリングオプションと高度なPDF機能を使用すると、この強力なC# PDF生成ツールを使って企業のアイデンティティに完全に一致するドキュメントを作成できます。 PDFへのHTML変換機能により、スタイル設定されたドキュメントは、PDFとして生成されたときにその視覚的魅力を維持します。 HTMLからPDFへの変換機能により、スタイル付きの文書がPDFとして生成される際に視覚的な魅力を保ちます。 ### ヘッダー、フッター、ページ番号

ヘッダー、フッター、およびページ番号

プロフェッショナルなドキュメントには、一貫したヘッダーとフッター が必要で、コンテキストとナビゲーションを提供します。 この柔軟性が、ブランド化されたPDFドキュメントを大量に作成する必要があるときにIronPDFが選ばれる理由です。 ページ番号、日付、ドキュメントタイトルのような動的コンテンツを含めることができ、すべての生成されたPDFがプロフェッショナルな基準を維持します: これらのヘッダーおよびフッターのオプションにより、組織はすべての生成されたPDFでブランドの一貫性を維持することができます。

using IronPdf;
using System;

var renderer = new ChromePdfRenderer();

// Simple text header and footer with page numbers
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    Text = "Confidential Report - {date}",
    DrawDividerLine = true,
    Font = "Arial",
    FontSize = 12
};

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    Text = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    Font = "Arial", 
    FontSize = 10,
    CenterText = true
};

// HTML headers for complex layouts with logos
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    Html = @"
        <div style='display: flex; justify-content: space-between; align-items: center; padding: 10px 40px;'>
            <img src='logo.png' style='height: 40px;' />
            <div style='text-align: center;'>
                ## Annual Report 2024
                <p style='margin: 0; font-size: 12px; color: #666;'>Confidential</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #666;'>
                Generated: {date}<br/>
                Department: Finance
            </div>
        </div>",
    Height = 80,
    LoadStylesAndCSSFromMainHtmlDocument = true
};

// Create your PDF with professional headers/footers
var html = @"<h1>Financial Overview</h1><p>Report content here...</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("professional-report.pdf");
using IronPdf;
using System;

var renderer = new ChromePdfRenderer();

// Simple text header and footer with page numbers
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    Text = "Confidential Report - {date}",
    DrawDividerLine = true,
    Font = "Arial",
    FontSize = 12
};

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    Text = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    Font = "Arial", 
    FontSize = 10,
    CenterText = true
};

// HTML headers for complex layouts with logos
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    Html = @"
        <div style='display: flex; justify-content: space-between; align-items: center; padding: 10px 40px;'>
            <img src='logo.png' style='height: 40px;' />
            <div style='text-align: center;'>
                ## Annual Report 2024
                <p style='margin: 0; font-size: 12px; color: #666;'>Confidential</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #666;'>
                Generated: {date}<br/>
                Department: Finance
            </div>
        </div>",
    Height = 80,
    LoadStylesAndCSSFromMainHtmlDocument = true
};

// Create your PDF with professional headers/footers
var html = @"<h1>Financial Overview</h1><p>Report content here...</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("professional-report.pdf");
$vbLabelText   $csharpLabel

これらのヘッダーおよびフッターオプションにより、組織はすべての生成されたPDFでブランドの一貫性を維持できます。 財務報告や技術文書を作成する際、プロフェッショナルなヘッダーとフッターは、ドキュメントが企業の標準を満たしていることを保証します。

ページレイアウトを制御することは、ドキュメントが正しく印刷され、すべてのデバイスでプロフェッショナルに見えるようにするために重要です。

ページレイアウトの制御は、正しく印刷され、すべてのデバイスでプロフェッショナルに見える文書を作成するために重要です。 ### フォントとタイポグラフィの操作

var renderer = new ChromePdfRenderer();

// Configure page setup for professional printing
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Set margins in millimeters for precise control
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Enable background colors and images (important for branding)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

// Use screen media type for vibrant colors
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;

// Custom page size for special documents
renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297); // A4

// Enable high-quality rendering
renderer.RenderingOptions.RenderQuality = 100; // 0-100 scale
var renderer = new ChromePdfRenderer();

// Configure page setup for professional printing
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;

// Set margins in millimeters for precise control
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Enable background colors and images (important for branding)
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

// Use screen media type for vibrant colors
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;

// Custom page size for special documents
renderer.RenderingOptions.SetCustomPaperSizeinMilimeters(210, 297); // A4

// Enable high-quality rendering
renderer.RenderingOptions.RenderQuality = 100; // 0-100 scale
$vbLabelText   $csharpLabel

フォントとタイポグラフィの取り扱い

IronPDFはウェブフォント、カスタムフォント、および高度なタイポグラフィ機能をサポートしています: ## 実例:請求書PDFをどのように生成しますか?

var renderer = new ChromePdfRenderer();

// HTML with custom fonts and typography
var html = @"
    <html>
    <head>
        <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
        <style>
            @font-face {
                font-family: 'CustomBrand';
                src: url('BrandFont.ttf') format('truetype');
            }

            body {
                font-family: 'Roboto', Arial, sans-serif;
                font-size: 11pt;
                line-height: 1.6;
                color: #333;
            }

            h1 {
                font-family: 'CustomBrand', Georgia, serif;
                font-size: 28pt;
                color: #0066cc;
                letter-spacing: -0.5px;
            }

            .quote {
                font-style: italic;
                font-size: 14pt;
                color: #666;
                border-left: 4px solid #0066cc;
                padding-left: 20px;
                margin: 20px 0;
            }
        </style>
    </head>
    <body>
        # Professional Document
        <p>This document demonstrates professional typography.</p>
        <div class='quote'>
            "Excellence in typography enhances readability and professionalism."
        </div>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(html, "Assets/Fonts");
pdf.SaveAs("typography-demo.pdf");
var renderer = new ChromePdfRenderer();

// HTML with custom fonts and typography
var html = @"
    <html>
    <head>
        <link href='https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;700&display=swap' rel='stylesheet'>
        <style>
            @font-face {
                font-family: 'CustomBrand';
                src: url('BrandFont.ttf') format('truetype');
            }

            body {
                font-family: 'Roboto', Arial, sans-serif;
                font-size: 11pt;
                line-height: 1.6;
                color: #333;
            }

            h1 {
                font-family: 'CustomBrand', Georgia, serif;
                font-size: 28pt;
                color: #0066cc;
                letter-spacing: -0.5px;
            }

            .quote {
                font-style: italic;
                font-size: 14pt;
                color: #666;
                border-left: 4px solid #0066cc;
                padding-left: 20px;
                margin: 20px 0;
            }
        </style>
    </head>
    <body>
        # Professional Document
        <p>This document demonstrates professional typography.</p>
        <div class='quote'>
            "Excellence in typography enhances readability and professionalism."
        </div>
    </body>
    </html>";

var pdf = renderer.RenderHtmlAsPdf(html, "Assets/Fonts");
pdf.SaveAs("typography-demo.pdf");
$vbLabelText   $csharpLabel

実世界の例: 請求書 PDF を生成するにはどうすればよいですか?

この例は、何千ものビジネスがIronPDFをC# PDF生成ツールとして選んでいる理由を示します - それは、データバインディングプロフェッショナルなスタイリング適切なドキュメント構造を兼ね備えており、強力でメンテナンスしやすい方法です。 同じような実装が、eコマースプラットフォームによって毎月何百万もの請求書の生成に使用されることを示しており、.NETでのプログラム的なPDF生成のスケーラビリティを示しています。 同様の実装は、eコマースプラットフォームによって 毎月何百万もの請求書を生成する のに使用され、.NET におけるプログラムによる PDF 生成のスケーラビリティ を証明しています。 ## IronPDFはどのような高度なPDF機能を提供していますか?

using IronPdf;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

public class InvoiceGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public InvoiceGenerator()
    {
        _renderer = new ChromePdfRenderer();
        ConfigureRenderer();
    }

    private void ConfigureRenderer()
    {
        // Professional page setup
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.MarginTop = 25;
        _renderer.RenderingOptions.MarginBottom = 25;
        _renderer.RenderingOptions.MarginLeft = 25;
        _renderer.RenderingOptions.MarginRight = 25;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;

        // Add footer with page numbers
        _renderer.RenderingOptions.TextFooter = new TextHeaderFooter
        {
            Text = "Page {page} of {total-pages} | Invoice generated on {date}",
            FontSize = 9,
            Font = "Arial",
            CenterText = true
        };
    }

    public void CreateInvoice(Invoice invoice)
    {
        var html = GenerateInvoiceHtml(invoice);
        var pdf = _renderer.RenderHtmlAsPdf(html);

        // Add metadata to the final document
        pdf.MetaData.Title = $"Invoice {invoice.Number}";
        pdf.MetaData.Author = "Your Company Name";
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}";
        pdf.MetaData.Keywords = "invoice, billing, payment";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Save the PDF document
        var fileName = $"Invoice-{invoice.Number}.pdf";
        pdf.SaveAs(fileName);

        Console.WriteLine($"PDF generated successfully: {fileName}");
    }

    private string GenerateInvoiceHtml(Invoice invoice)
    {
        var itemsHtml = string.Join("", invoice.Items.Select(item => $@"
            <tr>
                <td style='padding: 12px; border-bottom: 1px solid #eee;'>{item.Description}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: center;'>{item.Quantity}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.UnitPrice:F2}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.Total:F2}</td>
            </tr>"));

        return $@"
            <html>
            <head>
                <style>
                    * {{ box-sizing: border-box; }}
                    body {{ 
                        font-family: 'Segoe UI', Arial, sans-serif; 
                        line-height: 1.6;
                        color: #333;
                        margin: 0;
                        padding: 0;
                    }}
                    .invoice-container {{
                        max-width: 800px;
                        margin: 0 auto;
                        padding: 40px;
                    }}
                    .invoice-header {{
                        display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                        padding-bottom: 20px;
                        border-bottom: 3px solid #0066cc;
                    }}
                    .company-details {{
                        flex: 1;
                    }}
                    .company-details h1 {{
                        color: #0066cc;
                        margin: 0 0 10px 0;
                        font-size: 28px;
                    }}
                    .invoice-details {{
                        flex: 1;
                        text-align: right;
                    }}
                    .invoice-details h2 {{
                        margin: 0 0 10px 0;
                        color: #666;
                        font-size: 24px;
                    }}
                    .invoice-number {{
                        font-size: 18px;
                        color: #0066cc;
                        font-weight: bold;
                    }}
                    .billing-section {{
                        display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                    }}
                    .billing-box {{
                        flex: 1;
                        padding: 20px;
                        background: #f8f9fa;
                        border-radius: 8px;
                        margin-right: 20px;
                    }}
                    .billing-box:last-child {{
                        margin-right: 0;
                    }}
                    .billing-box h3 {{
                        margin: 0 0 15px 0;
                        color: #0066cc;
                        font-size: 16px;
                        text-transform: uppercase;
                        letter-spacing: 1px;
                    }}
                    .items-table {{
                        width: 100%;
                        border-collapse: collapse;
                        margin-bottom: 40px;
                    }}
                    .items-table th {{
                        background: #0066cc;
                        color: white;
                        padding: 12px;
                        text-align: left;
                        font-weight: 600;
                    }}
                    .items-table th:last-child {{
                        text-align: right;
                    }}
                    .totals-section {{
                        display: flex;
                        justify-content: flex-end;
                        margin-bottom: 40px;
                    }}
                    .totals-box {{
                        width: 300px;
                    }}
                    .total-row {{
                        display: flex;
                        justify-content: space-between;
                        padding: 8px 0;
                        border-bottom: 1px solid #eee;
                    }}
                    .total-row.final {{
                        border-bottom: none;
                        border-top: 2px solid #0066cc;
                        margin-top: 10px;
                        padding-top: 15px;
                        font-size: 20px;
                        font-weight: bold;
                        color: #0066cc;
                    }}
                    .payment-terms {{
                        background: #f8f9fa;
                        padding: 20px;
                        border-radius: 8px;
                        margin-bottom: 30px;
                    }}
                    .payment-terms h3 {{
                        margin: 0 0 10px 0;
                        color: #0066cc;
                    }}
                    .footer-note {{
                        text-align: center;
                        color: #666;
                        font-size: 14px;
                        margin-top: 40px;
                        padding-top: 20px;
                        border-top: 1px solid #eee;
                    }}
                </style>
            </head>
            <body>
                <div class='invoice-container'>
                    <div class='invoice-header'>
                        <div class='company-details'>
                            # {invoice.CompanyName}
                            <p>{invoice.CompanyAddress}<br>
                            {invoice.CompanyCity}, {invoice.CompanyState} {invoice.CompanyZip}<br>
                            Phone: {invoice.CompanyPhone}<br>
                            Email: {invoice.CompanyEmail}</p>
                        </div>
                        <div class='invoice-details'>
                            ## INVOICE
                            <p class='invoice-number'>#{invoice.Number}</p>
                            <p>**Date:** {invoice.Date:MMMM dd, yyyy}<br>
                            **Due Date:** {invoice.DueDate:MMMM dd, yyyy}</p>
                        </div>
                    </div>

                    <div class='billing-section'>
                        <div class='billing-box'>
                            ### Bill To
                            <p>**{invoice.CustomerName}**<br>
                            {invoice.CustomerAddress}<br>
                            {invoice.CustomerCity}, {invoice.CustomerState} {invoice.CustomerZip}<br>
                            {invoice.CustomerEmail}</p>
                        </div>
                        <div class='billing-box'>
                            ### Payment Information
                            <p>**Payment Terms:** {invoice.PaymentTerms}<br>
                            **Invoice Status:** <span style='color: #ff6b6b;'>Unpaid</span><br>
                            **Amount Due:** ${invoice.Total:F2}</p>
                        </div>
                    </div>

                    <table class='items-table'>
                        <thead>
                            <tr>
                                <th>Description</th>
                                <th style='text-align: center;'>Quantity</th>
                                <th style='text-align: right;'>Unit Price</th>
                                <th style='text-align: right;'>Total</th>
                            </tr>
                        </thead>
                        <tbody>
                            {itemsHtml}
                        </tbody>
                    </table>

                    <div class='totals-section'>
                        <div class='totals-box'>
                            <div class='total-row'>
                                <span>Subtotal:</span>
                                <span>${invoice.Subtotal:F2}</span>
                            </div>
                            <div class='total-row'>
                                <span>Tax ({invoice.TaxRate:F0}%):</span>
                                <span>${invoice.Tax:F2}</span>
                            </div>
                            <div class='total-row final'>
                                <span>Total Due:</span>
                                <span>${invoice.Total:F2}</span>
                            </div>
                        </div>
                    </div>

                    <div class='payment-terms'>
                        ### Payment Terms & Conditions
                        <p>Payment is due within {invoice.PaymentTerms}. Late payments are subject to a 1.5% monthly service charge. 
                        Please make checks payable to {invoice.CompanyName} or pay online at {invoice.CompanyWebsite}.</p>
                    </div>

                    <div class='footer-note'>
                        <p>Thank you for your business! This invoice was generated automatically using our C# PDF generation system.</p>
                        <p>Questions? Contact us at {invoice.CompanyEmail} or {invoice.CompanyPhone}</p>
                    </div>
                </div>
            </body>
            </html>";
    }
}

// Invoice model classes
public class Invoice
{
    public string Number { get; set; }
    public DateTime Date { get; set; }
    public DateTime DueDate { get; set; }
    public string CompanyName { get; set; }
    public string CompanyAddress { get; set; }
    public string CompanyCity { get; set; }
    public string CompanyState { get; set; }
    public string CompanyZip { get; set; }
    public string CompanyPhone { get; set; }
    public string CompanyEmail { get; set; }
    public string CompanyWebsite { get; set; }
    public string CustomerName { get; set; }
    public string CustomerAddress { get; set; }
    public string CustomerCity { get; set; }
    public string CustomerState { get; set; }
    public string CustomerZip { get; set; }
    public string CustomerEmail { get; set; }
    public string PaymentTerms { get; set; }
    public List<InvoiceItem> Items { get; set; }
    public decimal Subtotal => Items.Sum(i => i.Total);
    public decimal TaxRate { get; set; }
    public decimal Tax => Subtotal * (TaxRate / 100);
    public decimal Total => Subtotal + Tax;
}

public class InvoiceItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal Total => Quantity * UnitPrice;
}

// Usage example
var generator = new InvoiceGenerator();
var invoice = new Invoice
{
    Number = "INV-2024-001",
    Date = DateTime.Now,
    DueDate = DateTime.Now.AddDays(30),
    CompanyName = "Your Company Name",
    CompanyAddress = "123 Business Street",
    CompanyCity = "New York",
    CompanyState = "NY",
    CompanyZip = "10001",
    CompanyPhone = "(555) 123-4567",
    CompanyEmail = "billing@yourcompany.com",
    CompanyWebsite = "www.yourcompany.com",
    CustomerName = "Acme Corporation",
    CustomerAddress = "456 Client Avenue",
    CustomerCity = "Los Angeles",
    CustomerState = "CA",
    CustomerZip = "90001",
    CustomerEmail = "accounts@acmecorp.com",
    PaymentTerms = "Net 30",
    TaxRate = 8.5m,
    Items = new List<InvoiceItem>
    {
        new() { Description = "Professional Services - March 2024", Quantity = 40, UnitPrice = 125.00m },
        new() { Description = "Software License (Annual)", Quantity = 1, UnitPrice = 2400.00m },
        new() { Description = "Technical Support", Quantity = 10, UnitPrice = 150.00m }
    }
};

generator.CreateInvoice(invoice);
using IronPdf;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;

public class InvoiceGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public InvoiceGenerator()
    {
        _renderer = new ChromePdfRenderer();
        ConfigureRenderer();
    }

    private void ConfigureRenderer()
    {
        // Professional page setup
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        _renderer.RenderingOptions.MarginTop = 25;
        _renderer.RenderingOptions.MarginBottom = 25;
        _renderer.RenderingOptions.MarginLeft = 25;
        _renderer.RenderingOptions.MarginRight = 25;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;

        // Add footer with page numbers
        _renderer.RenderingOptions.TextFooter = new TextHeaderFooter
        {
            Text = "Page {page} of {total-pages} | Invoice generated on {date}",
            FontSize = 9,
            Font = "Arial",
            CenterText = true
        };
    }

    public void CreateInvoice(Invoice invoice)
    {
        var html = GenerateInvoiceHtml(invoice);
        var pdf = _renderer.RenderHtmlAsPdf(html);

        // Add metadata to the final document
        pdf.MetaData.Title = $"Invoice {invoice.Number}";
        pdf.MetaData.Author = "Your Company Name";
        pdf.MetaData.Subject = $"Invoice for {invoice.CustomerName}";
        pdf.MetaData.Keywords = "invoice, billing, payment";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Save the PDF document
        var fileName = $"Invoice-{invoice.Number}.pdf";
        pdf.SaveAs(fileName);

        Console.WriteLine($"PDF generated successfully: {fileName}");
    }

    private string GenerateInvoiceHtml(Invoice invoice)
    {
        var itemsHtml = string.Join("", invoice.Items.Select(item => $@"
            <tr>
                <td style='padding: 12px; border-bottom: 1px solid #eee;'>{item.Description}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: center;'>{item.Quantity}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.UnitPrice:F2}</td>
                <td style='padding: 12px; border-bottom: 1px solid #eee; text-align: right;'>${item.Total:F2}</td>
            </tr>"));

        return $@"
            <html>
            <head>
                <style>
                    * {{ box-sizing: border-box; }}
                    body {{ 
                        font-family: 'Segoe UI', Arial, sans-serif; 
                        line-height: 1.6;
                        color: #333;
                        margin: 0;
                        padding: 0;
                    }}
                    .invoice-container {{
                        max-width: 800px;
                        margin: 0 auto;
                        padding: 40px;
                    }}
                    .invoice-header {{
                        display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                        padding-bottom: 20px;
                        border-bottom: 3px solid #0066cc;
                    }}
                    .company-details {{
                        flex: 1;
                    }}
                    .company-details h1 {{
                        color: #0066cc;
                        margin: 0 0 10px 0;
                        font-size: 28px;
                    }}
                    .invoice-details {{
                        flex: 1;
                        text-align: right;
                    }}
                    .invoice-details h2 {{
                        margin: 0 0 10px 0;
                        color: #666;
                        font-size: 24px;
                    }}
                    .invoice-number {{
                        font-size: 18px;
                        color: #0066cc;
                        font-weight: bold;
                    }}
                    .billing-section {{
                        display: flex;
                        justify-content: space-between;
                        margin-bottom: 40px;
                    }}
                    .billing-box {{
                        flex: 1;
                        padding: 20px;
                        background: #f8f9fa;
                        border-radius: 8px;
                        margin-right: 20px;
                    }}
                    .billing-box:last-child {{
                        margin-right: 0;
                    }}
                    .billing-box h3 {{
                        margin: 0 0 15px 0;
                        color: #0066cc;
                        font-size: 16px;
                        text-transform: uppercase;
                        letter-spacing: 1px;
                    }}
                    .items-table {{
                        width: 100%;
                        border-collapse: collapse;
                        margin-bottom: 40px;
                    }}
                    .items-table th {{
                        background: #0066cc;
                        color: white;
                        padding: 12px;
                        text-align: left;
                        font-weight: 600;
                    }}
                    .items-table th:last-child {{
                        text-align: right;
                    }}
                    .totals-section {{
                        display: flex;
                        justify-content: flex-end;
                        margin-bottom: 40px;
                    }}
                    .totals-box {{
                        width: 300px;
                    }}
                    .total-row {{
                        display: flex;
                        justify-content: space-between;
                        padding: 8px 0;
                        border-bottom: 1px solid #eee;
                    }}
                    .total-row.final {{
                        border-bottom: none;
                        border-top: 2px solid #0066cc;
                        margin-top: 10px;
                        padding-top: 15px;
                        font-size: 20px;
                        font-weight: bold;
                        color: #0066cc;
                    }}
                    .payment-terms {{
                        background: #f8f9fa;
                        padding: 20px;
                        border-radius: 8px;
                        margin-bottom: 30px;
                    }}
                    .payment-terms h3 {{
                        margin: 0 0 10px 0;
                        color: #0066cc;
                    }}
                    .footer-note {{
                        text-align: center;
                        color: #666;
                        font-size: 14px;
                        margin-top: 40px;
                        padding-top: 20px;
                        border-top: 1px solid #eee;
                    }}
                </style>
            </head>
            <body>
                <div class='invoice-container'>
                    <div class='invoice-header'>
                        <div class='company-details'>
                            # {invoice.CompanyName}
                            <p>{invoice.CompanyAddress}<br>
                            {invoice.CompanyCity}, {invoice.CompanyState} {invoice.CompanyZip}<br>
                            Phone: {invoice.CompanyPhone}<br>
                            Email: {invoice.CompanyEmail}</p>
                        </div>
                        <div class='invoice-details'>
                            ## INVOICE
                            <p class='invoice-number'>#{invoice.Number}</p>
                            <p>**Date:** {invoice.Date:MMMM dd, yyyy}<br>
                            **Due Date:** {invoice.DueDate:MMMM dd, yyyy}</p>
                        </div>
                    </div>

                    <div class='billing-section'>
                        <div class='billing-box'>
                            ### Bill To
                            <p>**{invoice.CustomerName}**<br>
                            {invoice.CustomerAddress}<br>
                            {invoice.CustomerCity}, {invoice.CustomerState} {invoice.CustomerZip}<br>
                            {invoice.CustomerEmail}</p>
                        </div>
                        <div class='billing-box'>
                            ### Payment Information
                            <p>**Payment Terms:** {invoice.PaymentTerms}<br>
                            **Invoice Status:** <span style='color: #ff6b6b;'>Unpaid</span><br>
                            **Amount Due:** ${invoice.Total:F2}</p>
                        </div>
                    </div>

                    <table class='items-table'>
                        <thead>
                            <tr>
                                <th>Description</th>
                                <th style='text-align: center;'>Quantity</th>
                                <th style='text-align: right;'>Unit Price</th>
                                <th style='text-align: right;'>Total</th>
                            </tr>
                        </thead>
                        <tbody>
                            {itemsHtml}
                        </tbody>
                    </table>

                    <div class='totals-section'>
                        <div class='totals-box'>
                            <div class='total-row'>
                                <span>Subtotal:</span>
                                <span>${invoice.Subtotal:F2}</span>
                            </div>
                            <div class='total-row'>
                                <span>Tax ({invoice.TaxRate:F0}%):</span>
                                <span>${invoice.Tax:F2}</span>
                            </div>
                            <div class='total-row final'>
                                <span>Total Due:</span>
                                <span>${invoice.Total:F2}</span>
                            </div>
                        </div>
                    </div>

                    <div class='payment-terms'>
                        ### Payment Terms & Conditions
                        <p>Payment is due within {invoice.PaymentTerms}. Late payments are subject to a 1.5% monthly service charge. 
                        Please make checks payable to {invoice.CompanyName} or pay online at {invoice.CompanyWebsite}.</p>
                    </div>

                    <div class='footer-note'>
                        <p>Thank you for your business! This invoice was generated automatically using our C# PDF generation system.</p>
                        <p>Questions? Contact us at {invoice.CompanyEmail} or {invoice.CompanyPhone}</p>
                    </div>
                </div>
            </body>
            </html>";
    }
}

// Invoice model classes
public class Invoice
{
    public string Number { get; set; }
    public DateTime Date { get; set; }
    public DateTime DueDate { get; set; }
    public string CompanyName { get; set; }
    public string CompanyAddress { get; set; }
    public string CompanyCity { get; set; }
    public string CompanyState { get; set; }
    public string CompanyZip { get; set; }
    public string CompanyPhone { get; set; }
    public string CompanyEmail { get; set; }
    public string CompanyWebsite { get; set; }
    public string CustomerName { get; set; }
    public string CustomerAddress { get; set; }
    public string CustomerCity { get; set; }
    public string CustomerState { get; set; }
    public string CustomerZip { get; set; }
    public string CustomerEmail { get; set; }
    public string PaymentTerms { get; set; }
    public List<InvoiceItem> Items { get; set; }
    public decimal Subtotal => Items.Sum(i => i.Total);
    public decimal TaxRate { get; set; }
    public decimal Tax => Subtotal * (TaxRate / 100);
    public decimal Total => Subtotal + Tax;
}

public class InvoiceItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal Total => Quantity * UnitPrice;
}

// Usage example
var generator = new InvoiceGenerator();
var invoice = new Invoice
{
    Number = "INV-2024-001",
    Date = DateTime.Now,
    DueDate = DateTime.Now.AddDays(30),
    CompanyName = "Your Company Name",
    CompanyAddress = "123 Business Street",
    CompanyCity = "New York",
    CompanyState = "NY",
    CompanyZip = "10001",
    CompanyPhone = "(555) 123-4567",
    CompanyEmail = "billing@yourcompany.com",
    CompanyWebsite = "www.yourcompany.com",
    CustomerName = "Acme Corporation",
    CustomerAddress = "456 Client Avenue",
    CustomerCity = "Los Angeles",
    CustomerState = "CA",
    CustomerZip = "90001",
    CustomerEmail = "accounts@acmecorp.com",
    PaymentTerms = "Net 30",
    TaxRate = 8.5m,
    Items = new List<InvoiceItem>
    {
        new() { Description = "Professional Services - March 2024", Quantity = 40, UnitPrice = 125.00m },
        new() { Description = "Software License (Annual)", Quantity = 1, UnitPrice = 2400.00m },
        new() { Description = "Technical Support", Quantity = 10, UnitPrice = 150.00m }
    }
};

generator.CreateInvoice(invoice);
$vbLabelText   $csharpLabel

IronPDFはどのような高度なPDF機能を提供していますか?

これらの高度な機能により、インタラクティブなフォームを作成し、機密文書を保護し、既存のPDFを高精度で操作することが可能です。.NETでPDFを構築する際に。 これらの機能が、世界中の1400万以上の開発者がIronPDFを彼らのミッションクリティカルなPDF生成のニーズに信頼する理由です。 これらの機能を理解すると、入力可能なフォームの作成からエンタープライズグレードのセキュリティの導入まで、すべての要求を満たす包括的なPDFソリューションを構築できます。C# PDF作成プロジェクトにて。 ### インタラクティブなPDFフォームを生成

インタラクティブPDFフォームを生成

IronPDFは、HTMLフォームを*PDFリーダーで誰でも入力できる*インタラクティブなPDFフォームに変換することができます: ### 生成されたPDFを保護する

// Namespace: IronPdf
using IronPdf;
// Namespace: System
using System;

var renderer = new ChromePdfRenderer();

// Enable form creation from HTML
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Create an interactive form with various input types
var formHtml = @"
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; padding: 40px; }
            .form-group { margin-bottom: 20px; }
            label { display: block; margin-bottom: 5px; font-weight: bold; }
            input[type='text'], input[type='email'], select, textarea {
                width: 100%;
                padding: 8px;
                border: 1px solid #ccc;
                border-radius: 4px;
                font-size: 14px;
            }
            .checkbox-group { margin: 10px 0; }
            .submit-section { 
                margin-top: 30px; 
                padding-top: 20px; 
                border-top: 2px solid #0066cc; 
            }
        </style>
    </head>
    <body>
        # Application Form
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName' required />
            </div>

            <div class='form-group'>
                <label for='email'>Email Address:</label>
                <input type='email' id='email' name='email' required />
            </div>

            <div class='form-group'>
                <label for='department'>Department:</label>
                <select id='department' name='department'>
                    <option value=''>Select Department</option>
                    <option value='sales'>Sales</option>
                    <option value='marketing'>Marketing</option>
                    <option value='engineering'>Engineering</option>
                    <option value='hr'>Human Resources</option>
                </select>
            </div>

            <div class='form-group'>
                <label>Interests:</label>
                <div class='checkbox-group'>
                    <label><input type='checkbox' name='interests' value='training' /> Professional Training</label>
                    <label><input type='checkbox' name='interests' value='conferences' /> Industry Conferences</label>
                    <label><input type='checkbox' name='interests' value='certification' /> Certification Programs</label>
                </div>
            </div>

            <div class='form-group'>
                <label for='comments'>Additional Comments:</label>
                <textarea id='comments' name='comments' rows='4'></textarea>
            </div>

            <div class='submit-section'>
                <p>*Please save this form and email to hr@company.com*</p>
            </div>
        </form>
    </body>
    </html>";

// Create the PDF with form fields
var formPdf = renderer.RenderHtmlAsPdf(formHtml);

// Optionally pre-fill form fields programmatically
formPdf.Form.FindFormField("fullName").Value = "John Smith";
formPdf.Form.FindFormField("email").Value = "john.smith@example.com";
formPdf.Form.FindFormField("department").Value = "engineering";

// Save the interactive form
formPdf.SaveAs("application-form.pdf");

// You can also read and process submitted forms
var submittedPdf = PdfDocument.FromFile("submitted-form.pdf");
var name = submittedPdf.Form.FindFormField("fullName").Value;
var email = submittedPdf.Form.FindFormField("email").Value;
Console.WriteLine($"Form submitted by: {name} ({email})");
// Namespace: IronPdf
using IronPdf;
// Namespace: System
using System;

var renderer = new ChromePdfRenderer();

// Enable form creation from HTML
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

// Create an interactive form with various input types
var formHtml = @"
    <html>
    <head>
        <style>
            body { font-family: Arial, sans-serif; padding: 40px; }
            .form-group { margin-bottom: 20px; }
            label { display: block; margin-bottom: 5px; font-weight: bold; }
            input[type='text'], input[type='email'], select, textarea {
                width: 100%;
                padding: 8px;
                border: 1px solid #ccc;
                border-radius: 4px;
                font-size: 14px;
            }
            .checkbox-group { margin: 10px 0; }
            .submit-section { 
                margin-top: 30px; 
                padding-top: 20px; 
                border-top: 2px solid #0066cc; 
            }
        </style>
    </head>
    <body>
        # Application Form
        <form>
            <div class='form-group'>
                <label for='fullName'>Full Name:</label>
                <input type='text' id='fullName' name='fullName' required />
            </div>

            <div class='form-group'>
                <label for='email'>Email Address:</label>
                <input type='email' id='email' name='email' required />
            </div>

            <div class='form-group'>
                <label for='department'>Department:</label>
                <select id='department' name='department'>
                    <option value=''>Select Department</option>
                    <option value='sales'>Sales</option>
                    <option value='marketing'>Marketing</option>
                    <option value='engineering'>Engineering</option>
                    <option value='hr'>Human Resources</option>
                </select>
            </div>

            <div class='form-group'>
                <label>Interests:</label>
                <div class='checkbox-group'>
                    <label><input type='checkbox' name='interests' value='training' /> Professional Training</label>
                    <label><input type='checkbox' name='interests' value='conferences' /> Industry Conferences</label>
                    <label><input type='checkbox' name='interests' value='certification' /> Certification Programs</label>
                </div>
            </div>

            <div class='form-group'>
                <label for='comments'>Additional Comments:</label>
                <textarea id='comments' name='comments' rows='4'></textarea>
            </div>

            <div class='submit-section'>
                <p>*Please save this form and email to hr@company.com*</p>
            </div>
        </form>
    </body>
    </html>";

// Create the PDF with form fields
var formPdf = renderer.RenderHtmlAsPdf(formHtml);

// Optionally pre-fill form fields programmatically
formPdf.Form.FindFormField("fullName").Value = "John Smith";
formPdf.Form.FindFormField("email").Value = "john.smith@example.com";
formPdf.Form.FindFormField("department").Value = "engineering";

// Save the interactive form
formPdf.SaveAs("application-form.pdf");

// You can also read and process submitted forms
var submittedPdf = PdfDocument.FromFile("submitted-form.pdf");
var name = submittedPdf.Form.FindFormField("fullName").Value;
var email = submittedPdf.Form.FindFormField("email").Value;
Console.WriteLine($"Form submitted by: {name} ({email})");
$vbLabelText   $csharpLabel

機密文書を扱う場合、セキュリティが最も重要です。

セキュリティは、機密文書を扱う際に最重要です。 ### PDFのマージと分割

// Namespace: IronPdf
using IronPdf;
// Namespace: IronPdf.Editing
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1><p>Sensitive information...</p>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "user123";      // Required to open
pdf.SecuritySettings.OwnerPassword = "owner456";    // Required to modify

// Set detailed permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;

// Add digital signature for authenticity
pdf.SignWithFile(
    certificatePath: "certificate.pfx",
    certificatePassword: "certpass123",
    signingReason: "Document Approval",
    signingLocation: "New York, NY",
    signatureImage: new Signature("signature.png")
    {
        Width = 150,
        Height = 50
    }
);

// Apply redaction to hide sensitive information
pdf.RedactTextOnPage(
    pageIndex: 0,
    searchText: "SSN: ***-**-****",
    replacementText: "[REDACTED]",
    caseSensitive: false
);

// Save the secured PDF
pdf.SaveAs("secure-confidential.pdf");
// Namespace: IronPdf
using IronPdf;
// Namespace: IronPdf.Editing
using IronPdf.Editing;

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1><p>Sensitive information...</p>");

// Apply password protection
pdf.SecuritySettings.UserPassword = "user123";      // Required to open
pdf.SecuritySettings.OwnerPassword = "owner456";    // Required to modify

// Set detailed permissions
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserFormData = true;
pdf.SecuritySettings.AllowUserPrinting = PrintPermissions.LowQualityPrint;

// Add digital signature for authenticity
pdf.SignWithFile(
    certificatePath: "certificate.pfx",
    certificatePassword: "certpass123",
    signingReason: "Document Approval",
    signingLocation: "New York, NY",
    signatureImage: new Signature("signature.png")
    {
        Width = 150,
        Height = 50
    }
);

// Apply redaction to hide sensitive information
pdf.RedactTextOnPage(
    pageIndex: 0,
    searchText: "SSN: ***-**-****",
    replacementText: "[REDACTED]",
    caseSensitive: false
);

// Save the secured PDF
pdf.SaveAs("secure-confidential.pdf");
$vbLabelText   $csharpLabel

PDFをマージおよび分割

複数の PDF を結合したり、特定のページを抽出したりすることは、文書管理ワークフローにとって 必須 です。

// Namespace: IronPdf
using IronPdf;
// Namespace: System
using System;

// Merge multiple PDFs into one document
var coverPage = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Annual Report 2024</h1>");
var introduction = PdfDocument.FromFile("introduction.pdf");
var financials = PdfDocument.FromFile("financials.pdf");
var appendix = PdfDocument.FromFile("appendix.pdf");

// Merge all documents
var completeReport = PdfDocument.Merge(coverPage, introduction, financials, appendix);

// Add page numbers to the merged document
for (int i = 0; i < completeReport.PageCount; i++)
{
    completeReport.AddTextFooterToPage(i, 
        $"Page {i + 1} of {completeReport.PageCount}", 
        IronPdf.Font.FontTypes.Arial, 
        10);
}

completeReport.SaveAs("annual-report-complete.pdf");

// Extract specific pages
var executiveSummary = completeReport.CopyPages(0, 4); // First 5 pages
executiveSummary.SaveAs("executive-summary.pdf");

// Split a large PDF into chapters
var sourcePdf = PdfDocument.FromFile("large-document.pdf");
var chaptersPerFile = 50;

for (int i = 0; i < sourcePdf.PageCount; i += chaptersPerFile)
{
    var endPage = Math.Min(i + chaptersPerFile - 1, sourcePdf.PageCount - 1);
    var chapter = sourcePdf.CopyPages(i, endPage);
    chapter.SaveAs($"chapter-{(i / chaptersPerFile) + 1}.pdf");
}
// Namespace: IronPdf
using IronPdf;
// Namespace: System
using System;

// Merge multiple PDFs into one document
var coverPage = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Annual Report 2024</h1>");
var introduction = PdfDocument.FromFile("introduction.pdf");
var financials = PdfDocument.FromFile("financials.pdf");
var appendix = PdfDocument.FromFile("appendix.pdf");

// Merge all documents
var completeReport = PdfDocument.Merge(coverPage, introduction, financials, appendix);

// Add page numbers to the merged document
for (int i = 0; i < completeReport.PageCount; i++)
{
    completeReport.AddTextFooterToPage(i, 
        $"Page {i + 1} of {completeReport.PageCount}", 
        IronPdf.Font.FontTypes.Arial, 
        10);
}

completeReport.SaveAs("annual-report-complete.pdf");

// Extract specific pages
var executiveSummary = completeReport.CopyPages(0, 4); // First 5 pages
executiveSummary.SaveAs("executive-summary.pdf");

// Split a large PDF into chapters
var sourcePdf = PdfDocument.FromFile("large-document.pdf");
var chaptersPerFile = 50;

for (int i = 0; i < sourcePdf.PageCount; i += chaptersPerFile)
{
    var endPage = Math.Min(i + chaptersPerFile - 1, sourcePdf.PageCount - 1);
    var chapter = sourcePdf.CopyPages(i, endPage);
    chapter.SaveAs($"chapter-{(i / chaptersPerFile) + 1}.pdf");
}
$vbLabelText   $csharpLabel

PDFにウォーターマークを追加することは、ドキュメントのコントロールとブランディングにおいて重要です。

PDF に透かしを入れること は文書管理とブランド管理にとって重要です。IronPDFは、テキストと画像の両方の透かしをサポートしています。

// Namespace: IronPdf
using IronPdf;
// Namespace: System
using System;

var pdf = PdfDocument.FromFile("document.pdf");

// Add text watermark
pdf.ApplyWatermark(
    html: "<h1 style='color: #ff0000; opacity: 0.5; font-size: 100px;'>DRAFT</h1>",
    rotation: 45,
    opacity: 50,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center
);

// Add image watermark (company logo)
pdf.ApplyWatermark(
    html: "<img src='logo-watermark.png' style='width: 300px;' />",
    rotation: 0,
    opacity: 30,
    verticalAlignment: VerticalAlignment.Bottom,
    horizontalAlignment: HorizontalAlignment.Right
);

// Add stamps for document status
pdf.StampHtml(
    Html: @"<div style='border: 3px solid green; padding: 10px; 
            background: white; font-weight: bold; color: green;'>
            APPROVED<br/>
            " + DateTime.Now.ToString("MM/dd/yyyy") + @"
            </div>",
    X: 400,
    Y: 100,
    Width: 150,
    Height: 60,
    PageIndex: 0
);

pdf.SaveAs("watermarked-document.pdf");
// Namespace: IronPdf
using IronPdf;
// Namespace: System
using System;

var pdf = PdfDocument.FromFile("document.pdf");

// Add text watermark
pdf.ApplyWatermark(
    html: "<h1 style='color: #ff0000; opacity: 0.5; font-size: 100px;'>DRAFT</h1>",
    rotation: 45,
    opacity: 50,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center
);

// Add image watermark (company logo)
pdf.ApplyWatermark(
    html: "<img src='logo-watermark.png' style='width: 300px;' />",
    rotation: 0,
    opacity: 30,
    verticalAlignment: VerticalAlignment.Bottom,
    horizontalAlignment: HorizontalAlignment.Right
);

// Add stamps for document status
pdf.StampHtml(
    Html: @"<div style='border: 3px solid green; padding: 10px; 
            background: white; font-weight: bold; color: green;'>
            APPROVED<br/>
            " + DateTime.Now.ToString("MM/dd/yyyy") + @"
            </div>",
    X: 400,
    Y: 100,
    Width: 150,
    Height: 60,
    PageIndex: 0
);

pdf.SaveAs("watermarked-document.pdf");
$vbLabelText   $csharpLabel

スケールでのPDF生成時には、パフォーマンスの最適化が重要です。

何千もの請求書を生成する場合や大規模なバッチジョブを処理する場合でも、PDF生成コードを最適化することでスループットが大幅に向上し、リソース消費が軽減されます。 現代のアプリケーションは、スレッドをブロックしない、または過度のメモリを消費しない効率的なC# PDF作成を必要とします。 さまざまなPDF生成タスクを効率的に生成するために最大限のパフォーマンスを引き出すための実証済みの戦略をここに示します。 ここでは、必要なときに.NETでPDFを効率的に生成するための実証済みの戦略を紹介します。

現代のアプリケーションはノンブロッキングオペレーションを必要とします。

現代のアプリケーションは、応答性を維持するためにノンブロッキング操作を必要とします。 ### バッチ処理のベストプラクティス

// Namespace: IronPdf
using IronPdf;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.Collections.Generic
using System.Collections.Generic;
// Namespace: System.Linq
using System.Linq;
// Namespace: System
using System;
// Namespace: System.Threading
using System.Threading;

public class AsyncPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public AsyncPdfService()
    {
        _renderer = new ChromePdfRenderer();
        // Configure renderer once for reuse
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        // Non-blocking PDF generation
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task GenerateBatchAsync(List<string> htmlDocuments)
    {
        // Process multiple PDFs concurrently
        var tasks = htmlDocuments.Select(async (html, index) =>
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"document-{index}.pdf");
        });

        await Task.WhenAll(tasks);
    }

    // Async with cancellation support
    public async Task<PdfDocument> GenerateWithTimeoutAsync(string html, int timeoutSeconds)
    {
        using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutSeconds));

        try
        {
            return await _renderer.RenderHtmlAsPdfAsync(html, cts.Token);
        }
        catch (OperationCanceledException)
        {
            throw new TimeoutException("PDF generation exceeded timeout");
        }
    }
}
// Namespace: IronPdf
using IronPdf;
// Namespace: System.Threading.Tasks
using System.Threading.Tasks;
// Namespace: System.Collections.Generic
using System.Collections.Generic;
// Namespace: System.Linq
using System.Linq;
// Namespace: System
using System;
// Namespace: System.Threading
using System.Threading;

public class AsyncPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public AsyncPdfService()
    {
        _renderer = new ChromePdfRenderer();
        // Configure renderer once for reuse
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        // Non-blocking PDF generation
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task GenerateBatchAsync(List<string> htmlDocuments)
    {
        // Process multiple PDFs concurrently
        var tasks = htmlDocuments.Select(async (html, index) =>
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"document-{index}.pdf");
        });

        await Task.WhenAll(tasks);
    }

    // Async with cancellation support
    public async Task<PdfDocument> GenerateWithTimeoutAsync(string html, int timeoutSeconds)
    {
        using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(timeoutSeconds));

        try
        {
            return await _renderer.RenderHtmlAsPdfAsync(html, cts.Token);
        }
        catch (OperationCanceledException)
        {
            throw new TimeoutException("PDF generation exceeded timeout");
        }
    }
}
$vbLabelText   $csharpLabel

複数のPDFを処理する場合、適切なリソース管理と並列処理がパフォーマンスを大幅に向上させます:

メモリ最適化技術

using IronPdf;
using System.Threading.Tasks.Dataflow;

public class BatchPdfProcessor
{
    private readonly ChromePdfRenderer _renderer;
    private readonly ActionBlock<PdfJob> _processingBlock;

    public BatchPdfProcessor(int maxConcurrency = 4)
    {
        _renderer = new ChromePdfRenderer();

        // Create a processing pipeline with controlled concurrency
        _processingBlock = new ActionBlock<PdfJob>(
            async job => await ProcessPdfAsync(job),
            new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = maxConcurrency,
                BoundedCapacity = maxConcurrency * 2
            });
    }

    private async Task ProcessPdfAsync(PdfJob job)
    {
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(job.Html);
            await pdf.SaveAsAsync(job.OutputPath);
            job.OnSuccess?.Invoke();
        }
        catch (Exception ex)
        {
            job.OnError?.Invoke(ex);
        }
    }

    public async Task<bool> QueuePdfAsync(PdfJob job)
    {
        return await _processingBlock.SendAsync(job);
    }

    public async Task CompleteAsync()
    {
        _processingBlock.Complete();
        await _processingBlock.Completion;
    }
}

public class PdfJob
{
    public string Html { get; set; }
    public string OutputPath { get; set; }
    public Action OnSuccess { get; set; }
    public Action<Exception> OnError { get; set; }
}
using IronPdf;
using System.Threading.Tasks.Dataflow;

public class BatchPdfProcessor
{
    private readonly ChromePdfRenderer _renderer;
    private readonly ActionBlock<PdfJob> _processingBlock;

    public BatchPdfProcessor(int maxConcurrency = 4)
    {
        _renderer = new ChromePdfRenderer();

        // Create a processing pipeline with controlled concurrency
        _processingBlock = new ActionBlock<PdfJob>(
            async job => await ProcessPdfAsync(job),
            new ExecutionDataflowBlockOptions
            {
                MaxDegreeOfParallelism = maxConcurrency,
                BoundedCapacity = maxConcurrency * 2
            });
    }

    private async Task ProcessPdfAsync(PdfJob job)
    {
        try
        {
            var pdf = await _renderer.RenderHtmlAsPdfAsync(job.Html);
            await pdf.SaveAsAsync(job.OutputPath);
            job.OnSuccess?.Invoke();
        }
        catch (Exception ex)
        {
            job.OnError?.Invoke(ex);
        }
    }

    public async Task<bool> QueuePdfAsync(PdfJob job)
    {
        return await _processingBlock.SendAsync(job);
    }

    public async Task CompleteAsync()
    {
        _processingBlock.Complete();
        await _processingBlock.Completion;
    }
}

public class PdfJob
{
    public string Html { get; set; }
    public string OutputPath { get; set; }
    public Action OnSuccess { get; set; }
    public Action<Exception> OnError { get; set; }
}
$vbLabelText   $csharpLabel

大規模なPDFまたは大量の処理の場合、メモリ管理が重要です:

キャッシュとテンプレートの最適化

using IronPdf;

public class MemoryEfficientPdfGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public MemoryEfficientPdfGenerator()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for memory usage
        _renderer.RenderingOptions.RenderQuality = 90; // Slightly lower quality for smaller size
        _renderer.RenderingOptions.ImageQuality = 85; // Compress images
    }

    // Stream large PDFs instead of loading into memory
    public async Task GenerateLargePdfToStreamAsync(string html, Stream outputStream)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Write directly to stream without keeping in memory
        using (pdf)
        {
            var bytes = pdf.BinaryData;
            await outputStream.WriteAsync(bytes, 0, bytes.Length);
        }
    }

    // Process large HTML in chunks
    public async Task<PdfDocument> GenerateFromChunksAsync(List<string> htmlChunks)
    {
        var pdfs = new List<PdfDocument>();

        try
        {
            // Generate each chunk separately
            foreach (var chunk in htmlChunks)
            {
                var chunkPdf = await _renderer.RenderHtmlAsPdfAsync(chunk);
                pdfs.Add(chunkPdf);
            }

            // Merge all chunks
            return PdfDocument.Merge(pdfs.ToArray());
        }
        finally
        {
            // Ensure all temporary PDFs are disposed
            foreach (var pdf in pdfs)
            {
                pdf?.Dispose();
            }
        }
    }
}
using IronPdf;

public class MemoryEfficientPdfGenerator
{
    private readonly ChromePdfRenderer _renderer;

    public MemoryEfficientPdfGenerator()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for memory usage
        _renderer.RenderingOptions.RenderQuality = 90; // Slightly lower quality for smaller size
        _renderer.RenderingOptions.ImageQuality = 85; // Compress images
    }

    // Stream large PDFs instead of loading into memory
    public async Task GenerateLargePdfToStreamAsync(string html, Stream outputStream)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);

        // Write directly to stream without keeping in memory
        using (pdf)
        {
            var bytes = pdf.BinaryData;
            await outputStream.WriteAsync(bytes, 0, bytes.Length);
        }
    }

    // Process large HTML in chunks
    public async Task<PdfDocument> GenerateFromChunksAsync(List<string> htmlChunks)
    {
        var pdfs = new List<PdfDocument>();

        try
        {
            // Generate each chunk separately
            foreach (var chunk in htmlChunks)
            {
                var chunkPdf = await _renderer.RenderHtmlAsPdfAsync(chunk);
                pdfs.Add(chunkPdf);
            }

            // Merge all chunks
            return PdfDocument.Merge(pdfs.ToArray());
        }
        finally
        {
            // Ensure all temporary PDFs are disposed
            foreach (var pdf in pdfs)
            {
                pdf?.Dispose();
            }
        }
    }
}
$vbLabelText   $csharpLabel

一般的な要素をキャッシュし、テンプレートを最適化して、レンダリング時間を削減しましょう:

PDFを作成する際の一般的な問題とその解決方法は?

using IronPdf;
using Microsoft.Extensions.Caching.Memory;

public class CachedPdfService
{
    private readonly ChromePdfRenderer _renderer;
    private readonly IMemoryCache _cache;
    private readonly Dictionary<string, string> _compiledTemplates;

    public CachedPdfService(IMemoryCache cache)
    {
        _renderer = new ChromePdfRenderer();
        _cache = cache;
        _compiledTemplates = new Dictionary<string, string>();

        // Pre-compile common templates
        PrecompileTemplates();
    }

    private void PrecompileTemplates()
    {
        // Load and cache common CSS
        var commonCss = File.ReadAllText("Templates/common.css");
        _compiledTemplates["commonCss"] = commonCss;

        // Cache logo as Base64
        var logoBytes = File.ReadAllBytes("Assets/logo.png");
        var logoBase64 = Convert.ToBase64String(logoBytes);
        _compiledTemplates["logoData"] = $"data:image/png;base64,{logoBase64}";
    }

    public async Task<byte[]> GenerateInvoicePdfAsync(string invoiceId, InvoiceData data)
    {
        // Check cache first
        var cacheKey = $"invoice_{invoiceId}";
        if (_cache.TryGetValue<byte[]>(cacheKey, out var cachedPdf))
        {
            return cachedPdf;
        }

        // Generate PDF with cached templates
        var html = BuildHtmlWithCache(data);
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var pdfBytes = pdf.BinaryData;

        // Cache for 1 hour
        _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1));

        return pdfBytes;
    }

    private string BuildHtmlWithCache(InvoiceData data)
    {
        return $@"
            <html>
            <head>
                <style>{_compiledTemplates["commonCss"]}</style>
            </head>
            <body>
                <img src='{_compiledTemplates["logoData"]}' />

            </body>
            </html>";
    }
}
using IronPdf;
using Microsoft.Extensions.Caching.Memory;

public class CachedPdfService
{
    private readonly ChromePdfRenderer _renderer;
    private readonly IMemoryCache _cache;
    private readonly Dictionary<string, string> _compiledTemplates;

    public CachedPdfService(IMemoryCache cache)
    {
        _renderer = new ChromePdfRenderer();
        _cache = cache;
        _compiledTemplates = new Dictionary<string, string>();

        // Pre-compile common templates
        PrecompileTemplates();
    }

    private void PrecompileTemplates()
    {
        // Load and cache common CSS
        var commonCss = File.ReadAllText("Templates/common.css");
        _compiledTemplates["commonCss"] = commonCss;

        // Cache logo as Base64
        var logoBytes = File.ReadAllBytes("Assets/logo.png");
        var logoBase64 = Convert.ToBase64String(logoBytes);
        _compiledTemplates["logoData"] = $"data:image/png;base64,{logoBase64}";
    }

    public async Task<byte[]> GenerateInvoicePdfAsync(string invoiceId, InvoiceData data)
    {
        // Check cache first
        var cacheKey = $"invoice_{invoiceId}";
        if (_cache.TryGetValue<byte[]>(cacheKey, out var cachedPdf))
        {
            return cachedPdf;
        }

        // Generate PDF with cached templates
        var html = BuildHtmlWithCache(data);
        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var pdfBytes = pdf.BinaryData;

        // Cache for 1 hour
        _cache.Set(cacheKey, pdfBytes, TimeSpan.FromHours(1));

        return pdfBytes;
    }

    private string BuildHtmlWithCache(InvoiceData data)
    {
        return $@"
            <html>
            <head>
                <style>{_compiledTemplates["commonCss"]}</style>
            </head>
            <body>
                <img src='{_compiledTemplates["logoData"]}' />

            </body>
            </html>";
    }
}
$vbLabelText   $csharpLabel

.NETの強力なPDFライブラリであるIronPDFを使用しても、C#でPDFを作成するときに開発やデプロイメントの際に問題に直面することがあります。

\u5f37\u529b\u306a.NET PDF\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3042\u308bIronPDF\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3067\u3082\u3001C#\u3067PDF\u3092\u751f\u6210\u3059\u308b\u969b\u306b\u958b\u767a\u3084\u5c55\u958b\u4e2d\u306b\u8ab2\u984c\u306b\u76f4\u9762\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002 良いニュースは、1400万以上の開発者がIronPDFを彼らのC# PDF生成ツールとして使用しており、ほとんどの問題はすでに経験され、解決済みであることです。 このトラブルシューティングガイドでは、最も頻繁な問題をC#でPDFを作成するときに直面する可能性があり、実際の経験に基づく実用的な解決策を提供しています。 覚えておいてください、あなたのPDF作成の課題への即時支援が必要な場合は、24/7サポートがあります。 覚えておいてください、24/7サポートは、あなたのPDF作成の課題に対して即時の支援が必要な場合に常に利用可能です。

最も一般的な問題の一つは、PDFが空白または正しくレンダリングされないことです。

最も一般的な問題の1つは、PDFが空白に見えるか、正しくレンダリングされないことです。 これは通常、アセットが時間どおりに読み込まれない場合、またはJavaScript のタイミングの問題がある場合に発生します。

// Namespace: IronPdf
using IronPdf;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// Problem: PDF is blank or missing content
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(complexHtml); // Results in blank PDF

// Solution 1: Add render delay for JavaScript-heavy content
renderer.RenderingOptions.RenderDelay = 3000; // Wait 3 seconds
renderer.RenderingOptions.EnableJavaScript = true;

// Solution 2: Wait for specific elements
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    JavaScriptQuery = "document.querySelector('#chart-loaded') !== null",
    WaitForType = WaitForType.JavaScript,
    Timeout = 30000 // 30 second timeout
};

// Solution 3: Use base path for local assets
var basePath = Path.GetFullPath("Assets");
var pdf = renderer.RenderHtmlAsPdf(htmlWithImages, basePath);

// Solution 4: Embed assets as Base64
var imageBase64 = Convert.ToBase64String(File.ReadAllBytes("logo.png"));
var htmlWithEmbedded = $@"<img src='data:image/png;base64,{imageBase64}' />";
// Namespace: IronPdf
using IronPdf;
// Namespace: System.IO
using System.IO;
// Namespace: System
using System;

// Problem: PDF is blank or missing content
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(complexHtml); // Results in blank PDF

// Solution 1: Add render delay for JavaScript-heavy content
renderer.RenderingOptions.RenderDelay = 3000; // Wait 3 seconds
renderer.RenderingOptions.EnableJavaScript = true;

// Solution 2: Wait for specific elements
renderer.RenderingOptions.WaitFor = new WaitFor()
{
    JavaScriptQuery = "document.querySelector('#chart-loaded') !== null",
    WaitForType = WaitForType.JavaScript,
    Timeout = 30000 // 30 second timeout
};

// Solution 3: Use base path for local assets
var basePath = Path.GetFullPath("Assets");
var pdf = renderer.RenderHtmlAsPdf(htmlWithImages, basePath);

// Solution 4: Embed assets as Base64
var imageBase64 = Convert.ToBase64String(File.ReadAllBytes("logo.png"));
var htmlWithEmbedded = $@"<img src='data:image/png;base64,{imageBase64}' />";
$vbLabelText   $csharpLabel

永続的なレンダリング問題については、問題を診断するためにログを有効にしてください:

// Enable detailed logging
IronPdf.Logging.Logger.EnableDebugging = true;
IronPdf.Logging.Logger.LogFilePath = "IronPdf.log";
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
// Enable detailed logging
IronPdf.Logging.Logger.EnableDebugging = true;
IronPdf.Logging.Logger.LogFilePath = "IronPdf.log";
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;
$vbLabelText   $csharpLabel

問題2: 初回描画が遅い

問題2: 初期レンダリングが遅い

\u521d\u56de\u306ePDF\u751f\u6210\u306f\u521d\u671f\u5316\u306b\u3088\u308b\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u306e\u305f\u3081\u9045\u304f\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002 IronPDFの初期レンダリングは2〜3秒かかることがありますが、これはデスクトップ環境でChromeを開くのと同様の通常の起動時間です:

// Problem: First PDF takes too long to generate
public class PdfService
{
    private ChromePdfRenderer _renderer;

    // Solution 1: Initialize renderer at startup
    public void Initialize()
    {
        _renderer = new ChromePdfRenderer();

        // Warm up the renderer
        _ = _renderer.RenderHtmlAsPdf("<p>Warm up</p>");
    }

    // Solution 2: Use IronPdf.Native packages for faster initialization
    // Install-Package IronPdf.Native.Windows.X64
    // This includes pre-loaded binaries for your platform

    // Solution 3: For cloud deployments, use appropriate packages
    // For Linux: Install-Package IronPdf.Linux
    // For Docker: Use IronPdf.Linux with proper dependencies
}

// Solution 4: Skip initialization checks in production
IronPdf.Installation.SkipInitialization = true; // Use only with persistent storage
// Problem: First PDF takes too long to generate
public class PdfService
{
    private ChromePdfRenderer _renderer;

    // Solution 1: Initialize renderer at startup
    public void Initialize()
    {
        _renderer = new ChromePdfRenderer();

        // Warm up the renderer
        _ = _renderer.RenderHtmlAsPdf("<p>Warm up</p>");
    }

    // Solution 2: Use IronPdf.Native packages for faster initialization
    // Install-Package IronPdf.Native.Windows.X64
    // This includes pre-loaded binaries for your platform

    // Solution 3: For cloud deployments, use appropriate packages
    // For Linux: Install-Package IronPdf.Linux
    // For Docker: Use IronPdf.Linux with proper dependencies
}

// Solution 4: Skip initialization checks in production
IronPdf.Installation.SkipInitialization = true; // Use only with persistent storage
$vbLabelText   $csharpLabel

\u8d77\u52d5\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3059\u308b\u65b9\u6cd5\u3092\u8a73\u3057\u304f\u8aad\u3080

問題3: Linux/Dockerでのデプロイメント問題

一般的なデプロイメントの問題を解決する方法は以下の通りです: \u4e00\u822c\u7684\u306a\u5c55\u958b\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u65b9\u6cd5\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059:

# Dockerfile forIronPDFon Linux
FROM mcr.microsoft.com/dotnet/aspnet:8.0

# Install required dependencies
RUN apt-get update && apt-get install -y \
    libglib2.0-0 \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxrandr2 \
    libgbm1 \
    libpango-1.0-0 \
    libcairo2 \
    libasound2 \
    libxshmfence1 \
    libx11-xcb1

# Copy and run your application
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "YourApp.dll"]

特にGoogle Cloud Runの場合:

// Use 2nd generation execution environment
// Deploy with: gcloud run deploy --execution-environment gen2

// In your code, ensure compatibility
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
// Use 2nd generation execution environment
// Deploy with: gcloud run deploy --execution-environment gen2

// In your code, ensure compatibility
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
$vbLabelText   $csharpLabel

問題4: メモリおよびパフォーマンスの問題

高ボリュームのPDF生成では、メモリ使用量とパフォーマンスを最適化してください:

完全なパフォーマンス最適化ガイドを読む

// Problem: High memory usage or slow batch processing
public class OptimizedPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public OptimizedPdfService()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for performance
        _renderer.RenderingOptions.RenderQuality = 90;
        _renderer.RenderingOptions.ImageQuality = 85;

        // Disable features you don't need
        _renderer.RenderingOptions.EnableJavaScript = false; // If not needed
        _renderer.RenderingOptions.RenderDelay = 0; // If content is static
    }

    // Solution 1: Process large documents in chunks
    public async Task<PdfDocument> GenerateLargeReportAsync(List<ReportSection> sections)
    {
        var pdfs = new List<PdfDocument>();

        foreach (var section in sections)
        {
            var sectionHtml = GenerateSectionHtml(section);
            var sectionPdf = await _renderer.RenderHtmlAsPdfAsync(sectionHtml);
            pdfs.Add(sectionPdf);

            // Force garbage collection after each section
            if (pdfs.Count % 10 == 0)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

        return PdfDocument.Merge(pdfs.ToArray());
    }

    // Solution 2: Use streaming for large files
    public async Task StreamLargePdfAsync(string html, HttpResponse response)
    {
        response.ContentType = "application/pdf";
        response.Headers.Add("Content-Disposition", "attachment; filename=report.pdf");

        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var bytes = pdf.BinaryData;

        await response.Body.WriteAsync(bytes, 0, bytes.Length);
        await response.Body.FlushAsync();
    }
}
// Problem: High memory usage or slow batch processing
public class OptimizedPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public OptimizedPdfService()
    {
        _renderer = new ChromePdfRenderer();

        // Optimize for performance
        _renderer.RenderingOptions.RenderQuality = 90;
        _renderer.RenderingOptions.ImageQuality = 85;

        // Disable features you don't need
        _renderer.RenderingOptions.EnableJavaScript = false; // If not needed
        _renderer.RenderingOptions.RenderDelay = 0; // If content is static
    }

    // Solution 1: Process large documents in chunks
    public async Task<PdfDocument> GenerateLargeReportAsync(List<ReportSection> sections)
    {
        var pdfs = new List<PdfDocument>();

        foreach (var section in sections)
        {
            var sectionHtml = GenerateSectionHtml(section);
            var sectionPdf = await _renderer.RenderHtmlAsPdfAsync(sectionHtml);
            pdfs.Add(sectionPdf);

            // Force garbage collection after each section
            if (pdfs.Count % 10 == 0)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

        return PdfDocument.Merge(pdfs.ToArray());
    }

    // Solution 2: Use streaming for large files
    public async Task StreamLargePdfAsync(string html, HttpResponse response)
    {
        response.ContentType = "application/pdf";
        response.Headers.Add("Content-Disposition", "attachment; filename=report.pdf");

        var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        var bytes = pdf.BinaryData;

        await response.Body.WriteAsync(bytes, 0, bytes.Length);
        await response.Body.FlushAsync();
    }
}
$vbLabelText   $csharpLabel

問題5: フォントおよびエンコーディングの問題

国際コンテンツまたはカスタムフォントを扱う場合:

\u56fd\u969b\u7684\u306a\u30b3\u30f3\u30c6\u30f3\u30c4\u3084\u30ab\u30b9\u30bf\u30e0\u30d5\u30a9\u30f3\u30c8\u3092\u6271\u3046\u969b\u306f:

// Problem: Fonts not rendering correctly
var renderer = new ChromePdfRenderer();

// Solution 1: Install fonts on the server
// For Linux/Docker, add to Dockerfile:
// RUN apt-get install -y fonts-liberation fonts-noto

// Solution 2: Embed fonts in HTML
var html = @"
<html>
<head>
    <style>
        @font-face {
            font-family: 'CustomFont';
            src: url('data:font/woff2;base64,[base64-encoded-font]') format('woff2');
        }
        body { font-family: 'CustomFont', Arial, sans-serif; }
    </style>
</head>
<body>
    <p>Content with custom font</p>
</body>
</html>";

// Solution 3: Use web fonts
var htmlWithWebFont = @"
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP' rel='stylesheet'>
    <style>
        body { font-family: 'Noto Sans JP', sans-serif; }
    </style>
</head>
<body>
    <p>日本語のテキスト</p>
</body>
</html>";

// Ensure proper encoding
renderer.RenderingOptions.InputEncoding = Encoding.UTF8;
// Problem: Fonts not rendering correctly
var renderer = new ChromePdfRenderer();

// Solution 1: Install fonts on the server
// For Linux/Docker, add to Dockerfile:
// RUN apt-get install -y fonts-liberation fonts-noto

// Solution 2: Embed fonts in HTML
var html = @"
<html>
<head>
    <style>
        @font-face {
            font-family: 'CustomFont';
            src: url('data:font/woff2;base64,[base64-encoded-font]') format('woff2');
        }
        body { font-family: 'CustomFont', Arial, sans-serif; }
    </style>
</head>
<body>
    <p>Content with custom font</p>
</body>
</html>";

// Solution 3: Use web fonts
var htmlWithWebFont = @"
<html>
<head>
    <link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP' rel='stylesheet'>
    <style>
        body { font-family: 'Noto Sans JP', sans-serif; }
    </style>
</head>
<body>
    <p>日本語のテキスト</p>
</body>
</html>";

// Ensure proper encoding
renderer.RenderingOptions.InputEncoding = Encoding.UTF8;
$vbLabelText   $csharpLabel

ここにカバーされていない問題が発生した場合、IronPDFは優れたサポートリソースを提供します:

\u3053\u3053\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u306a\u3044\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3001IronPDF\u306f\u512a\u308c\u305f\u30b5\u30dd\u30fc\u30c8\u30ea\u30bd\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059:

  1. 包括的なドキュメント - 詳細なAPIリファレンスとガイド
  2. ナレッジベース - 共通の問題に対する解決策
  3. コード例 - すぐに使えるコードスニペット
  4. コード例 - すぐに使えるコードスニペット

サポートをリクエストする際は、以下を含めてください:

  • .NETバージョンとプラットフォーム
  • 問題を再現する最小コード例
  • ログファイル(あれば)
  • ログファイル(利用可能な場合)
  • スタックトレースまたはエラーメッセージ

IronPDFのクロスプラットフォーム対応により、PDF生成コードは異なる環境でも一貫して動作します。

Windowsサーバ、Linuxコンテナ、またはクラウドプラットフォームにデプロイする場合でも、IronPDFはプロダクションデプロイメントに必要な柔軟性と信頼性を提供します。C# PDF生成ツールのために。 この普遍的な互換性が、50以上の国の企業がIronPDFを使用して、毎日何百万ものPDFを生成する理由の一つです。 Fortune 500企業の財務報告書生成から、およびスタートアップの顧客請求書の生成まで、IronPDFはあらゆる.NETでのPDF作成の需要に対応します。 プラットフォーム固有の考慮点を理解することで、インフラ全体にわたって円滑なデプロイメントを保証します。社内サーバまたはクラウド環境で、C#でPDFを構築する必要があるとき。 \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u56fa\u6709\u306e\u8003\u616e\u4e8b\u9805\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f\u3001\u30a4\u30f3\u30d5\u30e9\u30b9\u30c8\u30e9\u30af\u30c1\u30e3\u5168\u4f53\u306b\u308f\u305f\u3063\u3066\u30b9\u30e0\u30fc\u30ba\u306a\u5c55\u958b\u3092\u78ba\u4fdd\u3059\u308b\u306e\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u30aa\u30f3\u30d7\u30ec\u30df\u30b9\u30b5\u30fc\u30d0\u30fc\u307e\u305f\u306fC#\u3067PDF\u3092\u751f\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u30af\u30e9\u30a6\u30c9\u74b0\u5883\u304c\u542b\u307e\u308c\u307e\u3059\u3002

.NET\u30d0\u30fc\u30b8\u30e7\u30f3\u4e92\u63db\u6027

IronPDF\u306f\u3059\u3079\u3066\u306e\u6700\u65b0\u306e.NET\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u6700\u65b0\u306e\u30ea\u30ea\u30fc\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b\u7d99\u7d9a\u7684\u306b\u66f4\u65b0\u3055\u308c\u307e\u3059:

  • .NET 8 - \u3059\u3079\u3066\u306e\u6a5f\u80fd\u304c\u30d5\u30eb\u30b5\u30dd\u30fc\u30c8
  • .NET 9 - \u5b8c\u5168\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059\uff08\u73fe\u5728\u306e\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\uff09
  • .NET 10 - \u30d7\u30ec\u30ea\u30ea\u30fc\u30b9\u30b5\u30dd\u30fc\u30c8\u304c\u5229\u7528\u53ef\u80fd\uff08IronPDF\u306f2025\u5e7411\u6708\u306e\u30ea\u30ea\u30fc\u30b9\u306b\u3059\u3067\u306b\u6e96\u62e0\u3057\u3066\u3044\u307e\u3059\uff09
  • .NET 7, 6, 5 - \u5b8c\u5168\u306b\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059
  • .NET Core 3.1+ - \u3059\u3079\u3066\u306e\u6a5f\u80fd\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u3059
  • .NET Framework 4.6.2+ - \u30ec\u30ac\u30b7\u30fc\u30b5\u30dd\u30fc\u30c8\u304c\u7dad\u6301\u3055\u308c\u3066\u3044\u307e\u3059

\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u30b5\u30dd\u30fc\u30c8

\u3042\u3089\u3086\u308b\u4e3b\u8981\u306a\u30aa\u30da\u30ec\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306bPDF\u751f\u6210\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u5c55\u958b\u3067\u304d\u307e\u3059:

Windows

  • Windows 11\u300110\u30018\u30017
  • Windows Server 2022\u30012019\u30012016\u30012012

Linux

  • Ubuntu 20.04\u300122.04\u300124.04
  • Debian 10\u300111\u300112
  • CentOS 7\u30018
  • Red Hat Enterprise Linux
  • Alpine Linux\uff08\u8ffd\u52a0\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\uff09

macOS

  • macOS 13\uff08Ventura\uff09\u4ee5\u964d
  • Apple Silicon (M1/M2/M3) のネイティブサポート
  • Intel ベースの Mac が完全にサポートされています

クラウドプラットフォーム展開

IronPDF はすべての主要なクラウドプラットフォームでシームレスに動作します:

Microsoft Azure

// Azure App Service configuration
// Use at least B1 tier for optimal performance
// Enable 64-bit platform in Configuration settings

// For Azure Functions
public static class PdfFunction
{
    [FunctionName("GeneratePdf")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req)
    {
        var renderer = new ChromePdfRenderer();
        var html = await new StreamReader(req.Body).ReadToEndAsync();
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        return new FileContentResult(pdf.BinaryData, "application/pdf");
    }
}
// Azure App Service configuration
// Use at least B1 tier for optimal performance
// Enable 64-bit platform in Configuration settings

// For Azure Functions
public static class PdfFunction
{
    [FunctionName("GeneratePdf")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req)
    {
        var renderer = new ChromePdfRenderer();
        var html = await new StreamReader(req.Body).ReadToEndAsync();
        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        return new FileContentResult(pdf.BinaryData, "application/pdf");
    }
}
$vbLabelText   $csharpLabel

Amazon Web Services (AWS)

// AWS Lambda configuration
// Use custom runtime or container deployment
// Ensure Lambda has at least 512MB memory

public class PdfLambdaFunction
{
    private readonly ChromePdfRenderer _renderer;

    public PdfLambdaFunction()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for Lambda environment
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    }

    public async Task<APIGatewayProxyResponse> FunctionHandler(
        APIGatewayProxyRequest request, 
        ILambdaContext context)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(request.Body);

        return new APIGatewayProxyResponse
        {
            StatusCode = 200,
            Headers = new Dictionary<string, string> 
            { 
                { "Content-Type", "application/pdf" } 
            },
            Body = Convert.ToBase64String(pdf.BinaryData),
            IsBase64Encoded = true
        };
    }
}
// AWS Lambda configuration
// Use custom runtime or container deployment
// Ensure Lambda has at least 512MB memory

public class PdfLambdaFunction
{
    private readonly ChromePdfRenderer _renderer;

    public PdfLambdaFunction()
    {
        _renderer = new ChromePdfRenderer();
        // Configure for Lambda environment
        IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    }

    public async Task<APIGatewayProxyResponse> FunctionHandler(
        APIGatewayProxyRequest request, 
        ILambdaContext context)
    {
        var pdf = await _renderer.RenderHtmlAsPdfAsync(request.Body);

        return new APIGatewayProxyResponse
        {
            StatusCode = 200,
            Headers = new Dictionary<string, string> 
            { 
                { "Content-Type", "application/pdf" } 
            },
            Body = Convert.ToBase64String(pdf.BinaryData),
            IsBase64Encoded = true
        };
    }
}
$vbLabelText   $csharpLabel

コンテナデプロイメント (Docker/Kubernetes)

# app.yaml for App Engine
runtime: aspnetcore
env: flex

# Use 2nd generation for Cloud Run
# Deploy with: gcloud run deploy --execution-environment gen2
# app.yaml for App Engine
runtime: aspnetcore
env: flex

# Use 2nd generation for Cloud Run
# Deploy with: gcloud run deploy --execution-environment gen2
YAML

IronPDFは完全なDockerおよびKubernetesサポートでコンテナレディです:

IronPDF は完全なDockerおよび Kubernetes サポートを持つコンテナ対応です:

# Multi-stage Dockerfile for optimal size
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["YourApp.csproj", "./"]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app

# InstallIronPDFdependencies
RUN apt-get update && apt-get install -y \
    libglib2.0-0 libnss3 libatk1.0-0 libatk-bridge2.0-0 \
    libcups2 libxkbcommon0 libxcomposite1 libxdamage1 \
    libxrandr2 libgbm1 libpango-1.0-0 libcairo2 libasound2

COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "YourApp.dll"]

デスクトップアプリケーションサポート

IronPDF はすべての主要な .NET デスクトップフレームワークで動作します:

WPF (Windows Presentation Foundation)

public partial class MainWindow : Window
{
    private async void GeneratePdfButton_Click(object sender, RoutedEventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var html = HtmlEditor.Text;

        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        var saveDialog = new SaveFileDialog
        {
            Filter = "PDF files (*.pdf)|*.pdf",
            DefaultExt = "pdf"
        };

        if (saveDialog.ShowDialog() == true)
        {
            pdf.SaveAs(saveDialog.FileName);
            MessageBox.Show("PDF saved successfully!");
        }
    }
}
public partial class MainWindow : Window
{
    private async void GeneratePdfButton_Click(object sender, RoutedEventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var html = HtmlEditor.Text;

        var pdf = await renderer.RenderHtmlAsPdfAsync(html);

        var saveDialog = new SaveFileDialog
        {
            Filter = "PDF files (*.pdf)|*.pdf",
            DefaultExt = "pdf"
        };

        if (saveDialog.ShowDialog() == true)
        {
            pdf.SaveAs(saveDialog.FileName);
            MessageBox.Show("PDF saved successfully!");
        }
    }
}
$vbLabelText   $csharpLabel

Windows Forms

public partial class PdfGeneratorForm : Form
{
    private void btnGeneratePdf_Click(object sender, EventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(txtHtml.Text);

        using (var saveDialog = new SaveFileDialog())
        {
            saveDialog.Filter = "PDF files|*.pdf";
            if (saveDialog.ShowDialog() == DialogResult.OK)
            {
                pdf.SaveAs(saveDialog.FileName);
                MessageBox.Show($"PDF saved to {saveDialog.FileName}");
            }
        }
    }
}
public partial class PdfGeneratorForm : Form
{
    private void btnGeneratePdf_Click(object sender, EventArgs e)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(txtHtml.Text);

        using (var saveDialog = new SaveFileDialog())
        {
            saveDialog.Filter = "PDF files|*.pdf";
            if (saveDialog.ShowDialog() == DialogResult.OK)
            {
                pdf.SaveAs(saveDialog.FileName);
                MessageBox.Show($"PDF saved to {saveDialog.FileName}");
            }
        }
    }
}
$vbLabelText   $csharpLabel

MAUI (マルチプラットフォームアプリ UI)

public partial class MainPage : ContentPage
{
    public async Task GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync(HtmlContent);

        // Save to app's document directory
        var documentsPath = FileSystem.Current.AppDataDirectory;
        var filePath = Path.Combine(documentsPath, "output.pdf");

        await File.WriteAllBytesAsync(filePath, pdf.BinaryData);

        await DisplayAlert("Success", $"PDF saved to {filePath}", "OK");
    }
}
public partial class MainPage : ContentPage
{
    public async Task GeneratePdfAsync()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = await renderer.RenderHtmlAsPdfAsync(HtmlContent);

        // Save to app's document directory
        var documentsPath = FileSystem.Current.AppDataDirectory;
        var filePath = Path.Combine(documentsPath, "output.pdf");

        await File.WriteAllBytesAsync(filePath, pdf.BinaryData);

        await DisplayAlert("Success", $"PDF saved to {filePath}", "OK");
    }
}
$vbLabelText   $csharpLabel

C#アプリケーションでのPDF作成を開始する準備はできましたか?

C# アプリケーションで PDF を作成する準備はできましたか? このステップバイステップガイドに従って、インストールから最初に生成した PDF まで進めてください。 ### ステップ1: IronPDFのインストール

ステップ1: IronPDFのインストール

開発環境に最適なインストール方法を選択してください:

Visual Studio パッケージマネージャー** (推奨)

  1. Visual Studio でプロジェクトを開きます
  2. ソリューションエクスプローラーでプロジェクトを右クリックします
  3. "NuGet パッケージの管理"を選択します。
  4. "IronPDF"を検索します
  5. Iron SoftwareのIronPdfパッケージでインストールをクリックします

パッケージマネージャーコンソール**

Install-Package IronPdf

.NET CLI

dotnet add package IronPdf

NuGetパッケージには、Windows、Linux、macOSでのPDF生成に必要なものがすべて含まれています。 特殊なデプロイメントには、サイズとパフォーマンスを最適化するためのプラットフォーム専用パッケージを検討してください:

  • IronPdf.Linux - Linux環境に最適化
  • IronPdf.MacOs - ネイティブ Apple Silicon サポート
  • IronPdf.Slim - 実行時に依存関係をダウンロードする最小限のパッケージ

ステップ2: 最初のPDFを作成

すべてが正常に動作することを確認するために、簡単な例から開始します:

using IronPdf;

class Program
{
    static void Main()
    {
        // Create a new PDF generator instance
        var renderer = new ChromePdfRenderer();

        // Generate PDF from HTML
        var pdf = renderer.RenderHtmlAsPdf(@"
            # Welcome to IronPDF!
            <p>This is your first generated PDF document.</p>
            <p>Created on: " + DateTime.Now + "</p>"
        );

        // Save the PDF
        pdf.SaveAs("my-first-pdf.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
using IronPdf;

class Program
{
    static void Main()
    {
        // Create a new PDF generator instance
        var renderer = new ChromePdfRenderer();

        // Generate PDF from HTML
        var pdf = renderer.RenderHtmlAsPdf(@"
            # Welcome to IronPDF!
            <p>This is your first generated PDF document.</p>
            <p>Created on: " + DateTime.Now + "</p>"
        );

        // Save the PDF
        pdf.SaveAs("my-first-pdf.pdf");

        Console.WriteLine("PDF created successfully!");
    }
}
$vbLabelText   $csharpLabel

ステップ3: 例とチュートリアルを探る

IronPDFは、PDF生成を習得するのに役立つ豊富なリソースを提供します:

  1. コード例 - 一般的なシナリオのためのすぐに使用できるコードスニペット
  2. チュートリアル - 特定の機能についてのステップバイステップガイド
  3. ハウツーガイド - 実際の問題に対する実践的な解決策
  4. APIリファレンス - すべてのクラスとメソッドの包括的なドキュメント

ステップ4: 必要に応じてヘルプを取得

IronPDFは、成功を確実にするために複数のサポートチャネルを提供しています:

ステップ5: 開発とデプロイメント

無料開発ライセンス

IronPDFは、開発とテストのために無料です。 開発中にすべての機能を制限なしで探索できます。 開発モードで生成されたPDFには透かしが表示されますが、機能には影響しません。

本番デプロイメントオプション

本番環境に展開する準備ができたら、IronPDF は柔軟なライセンスを提供します:

  1. 無料トライアル - 本番でのテストに30日間のトライアルライセンスを取得し、透かしなしでお試し 2.商用ライセンス- 単一プロジェクト展開の場合は$799から
  2. エンタープライズソリューション - 大規模組織向けのカスタムパッケージ

コード内でライセンスを適用するには:

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

ステップ 6: 最新情報をお届けします

PDF生成能力を最新に保ちます:

定期的なアップデートにより、最新 for .NETバージョンとの互換性が保証され、パフォーマンスの向上、新機能、セキュリティアップデートが含まれます。

C#でのPDF生成にIronPDFを選ぶ理由は?

さまざまなアプローチを検討後にC#でPDFを作成する理由として、IronPDFが多くの開発者に選ばれる点が挙げられます。 それはたんに特徴の問題ではなく、最初の実装から長期的な保守に至るまで、PDFを.NETで生成する必要があるときの開発者体験全体です。 全世界で1,400万人以上の開発者がIronPDFをC# PDF生成の標準にしています。 なぜ開発者がC#でのPDF作成にIronPDFを選ぶのかを見ていきましょう。

ピクセルパーフェクトレンダリング

他のPDFライブラリがHTMLデザインの近似値を生成するのとは異なり、IronPDFは実際のChromiumエンジンを使用して、PDFがモダンなWebブラウザで表示されるように正確に見えることを保証します。 このピクセルパーフェクトのレンダリング能力は、金融機関が精度が重要な規制レポートを生成するためにIronPDFを信頼する理由です。 あなたのCSSグリッドレイアウトフレックスボックスデザイン、およびJavaScript レンダリングコンテンツはすべて完璧に動作します。 もはや独自のレイアウトエンジンと戦ったり、PDF文書を作成する際に"十分に近い"結果を受け入れたりする必要はありません。

開発者に優しいAPI

IronPDFのAPIは、開発者によって開発者のために設計されています。 APIのシンプルさが、スタートアップ企業がPDF生成をすぐに稼働させることができる理由です。 複雑な PDF 仕様を学習する代わりに、使い慣れた概念を操作します。

using IronPdf;

// Other libraries might require this:
// document.Add(new Paragraph("Hello World"));
// document.Add(new Table(3, 2));
// cell.SetBackgroundColor(ColorConstants.LIGHT_GRAY);

// With IronPDF, just use HTML:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
    # Hello World
    <table>
        <tr style='background: lightgray;'>
            <td>Simple</td>
            <td>Intuitive</td>
        </tr>
    </table>
");
using IronPdf;

// Other libraries might require this:
// document.Add(new Paragraph("Hello World"));
// document.Add(new Table(3, 2));
// cell.SetBackgroundColor(ColorConstants.LIGHT_GRAY);

// With IronPDF, just use HTML:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(@"
    # Hello World
    <table>
        <tr style='background: lightgray;'>
            <td>Simple</td>
            <td>Intuitive</td>
        </tr>
    </table>
");
$vbLabelText   $csharpLabel

エンタープライズ対応機能

IronPDFには、エンタープライズアプリケーションが要求する機能が含まれており、フォーチュン500企業はミッションクリティカルなドキュメント生成のためにこれに依存しています:

-セキュリティ:暗号化、デジタル署名、権限制御により機密文書を保護します -コンプライアンス: PDF/AおよびPDF/UA のサポートにより、生成された PDF が規制要件を満たしていることが保証されます。 -パフォーマンス:非同期操作とバッチ処理により、数百万のドキュメントを効率的に処理します。 -信頼性:広範なエラー処理とログ記録により、生産時の稼働時間を維持できます。

卓越したサポート

ヘルプが必要なとき、IronPDFのサポートチームは実際のエンジニアで構成されており、あなたの課題を理解しています。 24/7ライブチャットサポート平均30秒未満の応答時間により、待たされることはありません。 このようなサポートレベルが、IronPDFが業界最高のサポートを持つと開発者に評価される理由です。 サポートチームは、基本的な質問から複雑な実装課題まで、PDF生成プロジェクトの成功に必要なサポートを提供します。

透明な価格設定

隠れた料金はありません驚きのコストはありませんサーバーごとのライセンスの複雑さはありません。 IronPDFのシンプルなライセンスモデルにより、正確に何に対して料金を支払っているのかがわかります。 開発は常に無料であり、本番ライセンスは永久ライセンスです - 一生涯持つことができます。 この透明性が、複雑なライセンススキームで知られる業界において、新鮮なものです。

積極的な開発

IronPDFは、毎月のアップデートで機能を追加し、パフォーマンスを向上させ、最新 for .NETリリースとの互換性を確保しながら、継続的に改善されています。 チームは顧客のフィードバックを積極的に監視し、定期的にリクエストされた機能を実装しています。 最近の追加には、フォーム処理の向上PDF編集機能の強化、クラウッドデプロイメントの最適化が含まれます。

実世界の成功事例

さまざまな業界の何千もの企業が、ミッションクリティカルなPDF 生成にIronPDF を信頼しています。

-金融:銀行はIronPDFの安全なドキュメント機能を使用して、毎月数百万の明細書やレポートを作成しています。 -ヘルスケア:病院はHIPAA準拠のセキュリティ設定で患者の記録と検査結果を作成します -電子商取引:オンライン小売業者は、請求書と配送ラベルを大規模に作成し、ピーク時の負荷にも容易に対応します。 -政府:政府機関はデジタル署名と暗号化を使用して公式文書やフォームを作成します

これらの組織は、単一の請求書を生成する場合でも、毎日数百万の文書を処理する場合でも、一貫した結果をスケールで提供するためIronPDFを選択します。

IronPDFは他の C# PDF ライブラリとどのように比較されますか?

PDF ライブラリの選択は、C# で PDF を生成する必要がある場合、あなたのプロジェクトの成功にとって重要です。 IronPDFが.NETエコシステムで人気のある他のオプションとどのように比較されるのかを見てみましょう。 .NETでのPDF作成を目指す人々のための実際の使用例、開発者のフィードバック、および技術的ケイパビリティに基づくこの比較。 これらの違いを理解することで、あなたの特定のニーズに最適なC# PDFジェネレーターを選ぶ手助けとなります。

比較表

フィーチャー IronPDF wkhtmltopdf QuestPDF iText 7 PdfSharp Syncfusion Aspose.PDF
HTMLからPDFの品質 ピクセルパーフェクト 印刷スタイル 該当なし 制限的 HTMLなし 良い 良い
HTML5/CSS3サポート フル 古い コードのみ 部分的 なし フル フル
JavaScriptサポート フル なし なし 制限的 なし 制限的 制限的
使いやすさ 3行 CLIのみ コードファースト 複雑 低レベル 良い 複雑
サーバー依存 なし 実行可能 なし なし なし なし なし
パフォーマンス 高速+非同期 遅い 高速 高速 高速 高速 高速
積極的な開発 非常に活発 中止 活発 活発 最小 活発 活発
ライセンスタイプ 商用 オープンソース MIT→商用* AGPL/商用 MIT 商用 商用
開始価格 $799 無料 $599+* $2,399+ 無料 $2,995+ $2,499+

*注: QuestPDF は最近 MIT から商用ライセンスに変更されました

詳細な比較

IronPDFvs wkhtmltopdf

  • wkhtmltopdfは無料ですが、2020年に停止され、見た目が古くなっています
  • プラットフォーム固有の実行可能ファイルが必要で、デプロイメントを複雑にします
  • JavaScriptサポートがないため、モダンなWebアプリは正しくレンダリングされません
  • IronPDFは外部依存関係なしに現代のレンダリングを提供します

IronPDF対 QuestPDF

  • QuestPDFは完全にC#コードでPDFを構築する必要があり、HTMLのサポートはありません
  • プログラムによるPDF作成には良いが、複雑なレイアウトには時間がかかります
  • 最近MITから商業ライセンスに移行しました
  • IronPDFならすでに持っているHTML/CSSのスキルを活用できます

IronPDFvs iText 7

  • iTextはAGPLライセンスであり、それがあなたのコードベースを"感染"させる可能性があります
  • 商用ライセンスは$1,999からで、複雑な価格設定がされています
  • 限定的なHTMLからPDFの機能で、CSSのサポートが不十分です
  • IronPDFは、より安価で優れたHTMLレンダリングを提供します

IronPDFvs PdfSharp

  • PdfSharpは低レベルなPDF操作に非常に優れていますが、HTMLのサポートは全くありません
  • ページ上のすべての要素を手動で配置する必要があります
  • 無料およびオープンソースですが、機能が非常に限られています
  • IronPDFは高レベルのHTMLと低レベルのPDF操作の両方を処理します

IronPDFvs Syncfusion/Aspose.PDF

  • 両方ともエンタープライズ向けのオプションで、優れた機能を持っていますが、価格が高いです
  • Syncfusionは$2,995から、Asposeは$2,499からです
  • どちらも、IronPDFほどのピクセルパーフェクトなHTMLレンダリングを達成できません
  • IronPDFは比較可能なエンタープライズ機能でより優れた価値を提供します

移行パス

多くの開発者は他のライブラリからIronPDFに切り替えます。 その理由はこちらです:

wkhtmltopdfから

  • "プラットフォーム固有のバイナリと古くなったレンダリングに苦労していました"
  • "IronPDFは、最新のCSSサポートを提供し、私たちのDockerの頭痛を解消してくれました"

iTextSharp/iText 7から

  • "学習曲線が私たちの生産性を害し、IronPDFがHTMLを使用させてくれました"
  • "AGPLライセンスは商用製品にとって致命的でした"

PdfSharpから

  • "HTMLをPDFに変換する必要がありましたが、PdfSharpはそれを実行しませんでした"
  • "すべての要素を手動で配置するのに時間がかかりすぎていました"

QuestPDFから

  • "C#コードでレイアウトを構築するのはHTML/CSSを使用するのに比べて煩わしかった"
  • "最近のライセンス変更により、私たちは選択肢を再考しなければなりませんでした"

結論

C#でPDFを作成するのは難しくない必要はありません。 IronPDFを使用すれば、すでに持っているHTMLとCSSのスキルを活用してプロフェッショナルなPDFドキュメントを生成することができます。 シンプルな報告書を作成する場合でも、チャートやフォームを含む複雑な文書を作成する場合でも、IronPDFが重い作業を引き受けるので、アプリケーションロジックに集中できます。 全世界で1,400万人を超える開発者がIronPDFをC# PDFジェネレーターとして信頼し、PDFを生成するが、信頼性が高く効率的です。

このガイドを通して、HTML文字列やURLから、Word文書やMarkdownのような既存のファイルを変換する方法まで、複数のアプローチを使用してPDFドキュメントを作成する方法を探りました。IronPDFのモダンな Chromium ベースのレンダリングエンジンが実際のウェブデザインのように見えるピクセル単位の完璧な結果を生成するのを見たことがあります。 PDF文書をプログラムで操作し、セキュリティ機能を追加し、パフォーマンスを最適化する能力により、IronPDFは.NETでのすべてのPDF生成タスクのための完璧なソリューションです。

IronPDFを他と一線を画すのは、開発者優先のアプローチです。 たった3行のコードで最初のPDFを生成することができます。 直感的なAPIにより、プロプライエタリなPDF構文を学ぶ時間を減らし、機能構築により多くの時間を費やすことができます。 リアルエンジニアからの素晴らしいサポート透明な価格設定、および継続的なアップデート(.NET 10のプレリリースサポートを含む)と組み合わせることで、今日と将来においてもあなたのC#でのPDF作成が機能するという自信を与えます。

無料トライアルライセンスを取得することで、今すぐPDFを作成し始めます - .NETでのPDF生成があなたのアプリケーションでどれほど簡単かを見てください。 IronPDFを使用すれば、数分でプロフェッショナルなPDFを生成することができます、数時間ではなく。

最初のPDFを構築する準備ができましたか? IronPDFを使って始めましょう - 開発のための無料で、数分でC#でPDFを作成することができます。

ご注意Aspose、iText、wkhtmltopdf、QuestPDF、PdfSharpおよびSyncFusionは、それぞれの所有者の登録商標です。 このサイトは、Aspose、iText、wkhtmltopdf、QuestPDF、PdfSharpまたはSyncFusionによって承認、推奨、スポンサーされていません。 すべての製品名、ロゴ、およびブランドは各所有者の財産です。 比較は情報提供のみを目的としており、執筆時点での公開されている情報に基づいています。)]

よくある質問

C#でHTMLコンテンツからPDFを作成する方法は?

C#でHTMLコンテンツからPDFを作成するには、IronPDFのRenderHtmlAsPdfメソッドを使用します。これにより、HTML文字列やURLを直接PDFドキュメントに簡単に変換できます。

商業用PDFライブラリを無料のものより使用する利点は何ですか?

IronPDFのような商業用PDFライブラリは、JavaScriptやCSS3の完全なサポート、レスポンシブレイアウトなどの堅牢な機能を提供します。信頼性の高いパフォーマンス、定期的な更新、包括的なサポートを提供し、高品質のPDF作成に最適化されています。

IronPDFを使用してASP.NET MVCアプリケーションでPDFを生成できますか?

はい、IronPDFはASP.NET MVCアプリケーションで使用でき、RazorビューやHTMLテンプレートをPDFに変換できるため、ウェブアプリケーションへのPDF生成をシームレスに統合できます。

C#を使用してPDFドキュメントに画像やCSSを統合する方法は?

IronPDFを使用すると、画像タグやCSSスタイルをHTMLコンテンツ内に含めることで、PDFドキュメントに画像やCSSを簡単に統合できます。その後、IronPDFのレンダリング機能を使用してPDFに変換します。

C#でPDFにヘッダー、フッター、ページ番号を追加することができますか?

はい、IronPDFは、PDFドキュメントにヘッダー、フッター、ページ番号を追加するための高度な機能を提供します。HTMLコンテンツをレンダリングする前にPDF設定を構成することで実行できます。

C#でPDFを生成する際にXMLデータを処理する方法は?

IronPDFを使用すると、XMLをHTMLに変換するか、XSLTを使用してXMLをスタイル化し、それをIronPDFのRenderHtmlAsPdfメソッドを使用してPDFドキュメントに変換できます。

C#でPDFを生成する際に一般的な課題は何ですか?

一般的な課題には、レイアウトの一貫性の維持、複雑なCSSとJavaScriptの処理、ウェブ技術の正確なレンダリングが含まれます。IronPDFは、最新のChromiumエンジンとHTML5およびCSS3標準への広範なサポートでこれらの課題に対応しています。

C#で効率的に大きなPDFを生成する方法は?

IronPDFは、効率的に大きなPDFを生成するよう設計されています。高度なパフォーマンスのレンダリングエンジンを使用し、非同期操作をサポートして大きなドキュメントを簡単に管理します。

商業ライセンスなしでIronPDFをテストできますか?

はい、IronPDFは、開発とテストの目的で無料ライセンスを提供しており、商業ライセンスを購入する前にその機能を評価することができます。

.NET 10 の互換性: IronPDF を .NET 10 で使用できますか? また、特別な考慮事項はありますか?

はい、IronPDFは.NET 10と完全に互換性があります。Windows、Linux、コンテナ環境、Webフレームワークをターゲットとするプロジェクトを含め、すぐに.NET 10をサポートします。特別な設定は必要ありません。最新のIronPDF NuGetパッケージをインストールするだけで、.NET 10とシームレスに連携します。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

彼の主要なIronPDFとIron Suite .NETライブラリは、世界中で3000万以上のNuGetインストールを達成し、彼の基礎となるコードは世界中で使用されている開発者ツールに力を与え続けています。25年の商業経験と41年のコーディングの専門知識を持つJacobは、次世代の技術リーダーを指導しながら、エンタープライズグレードのC#、Java、Python PDFテクノロジーにおけるイノベーションの推進に注力しています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me