IRONPDFの使用 C# 14 で PDF を作成: Visual Studio Code を使用した 2025 年の上級ガイド Jacob Mellor 更新日:2026年2月1日 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る 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生成タスクのパフォーマンスを最適化する方法を学びます。 When you need help, IronPDF's support team consists of **actual engineers** who understand your challenges. With **24/7 live chat support** and typical response times under 30 seconds, you're never stuck waiting for answers. このようなサポートレベルが、IronPDFが業界最高のサポートを持つと開発者に評価される理由です。 The support team can help with everything fr# How to Create PDFs in C# - The Complete Guide to PDF Generation in .NET クイックスタート: 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に変換するなど、さまざまな機能を提供します。 プロセスの一般的な概要は次のとおりです: PDFライブラリのインストール: Visual StudioのNuGetパッケージマネージャを使用して適切なライブラリをインストールします。 新しいPDFドキュメントの作成: PDFドキュメントオブジェクトをインスタンス化します。 コンテンツの追加: ページ、テキスト、画像、およびその他の要素をドキュメントに追加します。 ドキュメントの保存: ファイルパスを指定し、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生成の依存関係を簡単に閲覧、インストール、管理できます: ソリューションエクスプローラーでプロジェクトを右クリック "NuGetパッケージの管理" を選択 "参照" をクリックし、"IronPDF" を検索 Iron Softwareによって開発されたIronPDFパッケージを選択 インストールをクリックし、ライセンス契約を承諾 方法 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ベースのレポートを文書化したりする際に非常に価値があります: 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テンプレートをファイルとして保存することで、デザインとロジックの間にクリーンな分離を可能にします。 このアプローチは、証明書、契約、または標準化されたレポートなど、一貫した文書を生成するのに非常に効果的です: 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: 包括的なドキュメント - 詳細なAPIリファレンスとガイド ナレッジベース - 共通の問題に対する解決策 コード例 - すぐに使えるコードスニペット コード例 - すぐに使えるコードスニペット サポートをリクエストする際は、以下を含めてください: .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 パッケージマネージャー** (推奨) Visual Studio でプロジェクトを開きます ソリューションエクスプローラーでプロジェクトを右クリックします "NuGet パッケージの管理"を選択します。 "IronPDF"を検索します 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生成を習得するのに役立つ豊富なリソースを提供します: コード例 - 一般的なシナリオのためのすぐに使用できるコードスニペット チュートリアル - 特定の機能についてのステップバイステップガイド ハウツーガイド - 実際の問題に対する実践的な解決策 APIリファレンス - すべてのクラスとメソッドの包括的なドキュメント ステップ4: 必要に応じてヘルプを取得 IronPDFは、成功を確実にするために複数のサポートチャネルを提供しています: 24/7ライブチャットサポート - 即時のサポートが必要なときにエンジニアとリアルタイムでチャットできます メールサポート - 複雑な質問に対する詳細な回答を得る スタック・オーバーフロー - コミュニティサポートと解決策 ステップ5: 開発とデプロイメント 無料開発ライセンス IronPDFは、開発とテストのために無料です。 開発中にすべての機能を制限なしで探索できます。 開発モードで生成されたPDFには透かしが表示されますが、機能には影響しません。 本番デプロイメントオプション 本番環境に展開する準備ができたら、IronPDF は柔軟なライセンスを提供します: 無料トライアル - 本番でのテストに30日間のトライアルライセンスを取得し、透かしなしでお試し 2.商用ライセンス- 単一プロジェクト展開の場合は$799から エンタープライズソリューション - 大規模組織向けのカスタムパッケージ コード内でライセンスを適用するには: 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 今すぐエンジニアリングチームとチャット 最高技術責任者(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テクノロジーにおけるイノベーションの推進に注力しています。 関連する記事 更新日 2026年3月1日 .NETでIronPDFを使用してPDFファイルを作成する方法 (C#チュートリアル) C#で開発者向けにPDFファイルを作成する効果的な方法を発見します。コーディングスキルを向上させ、プロジェクトを効率化します。この記事を今すぐお読みください! 詳しく読む 更新日 2026年2月27日 C#でPDFファイルをマージする方法 IronPDF で PDF をマージします。シンプルな VB.NET コードを使用して、複数の PDF ファイルを1つのドキュメントに結合する方法を学びます。ステップバイステップの例が含まれています。 詳しく読む 更新日 2026年3月1日 .NET 10 開発者向け C# PDFWriter チュートリアル このステップバイステップガイドで開発者がC# PDFWriterを使用してPDFを効率的に作成する方法を学びます。記事を読んでスキルを向上させましょう! 詳しく読む .NET Core PDFライブラリx509certificate2を使用してプ...
更新日 2026年3月1日 .NETでIronPDFを使用してPDFファイルを作成する方法 (C#チュートリアル) C#で開発者向けにPDFファイルを作成する効果的な方法を発見します。コーディングスキルを向上させ、プロジェクトを効率化します。この記事を今すぐお読みください! 詳しく読む
更新日 2026年2月27日 C#でPDFファイルをマージする方法 IronPDF で PDF をマージします。シンプルな VB.NET コードを使用して、複数の PDF ファイルを1つのドキュメントに結合する方法を学びます。ステップバイステップの例が含まれています。 詳しく読む
更新日 2026年3月1日 .NET 10 開発者向け C# PDFWriter チュートリアル このステップバイステップガイドで開発者がC# PDFWriterを使用してPDFを効率的に作成する方法を学びます。記事を読んでスキルを向上させましょう! 詳しく読む