移行ガイド C#でApi2pdfからIronPDFに移行する方法 カーティス・チャウ 公開日:2026年1月11日 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る Api2pdfはクラウドベースのPDF生成サービスを提供していますが、機密文書を外部サーバーに送信すると、セキュリティリスク、コンプライアンス問題、そして時間の経過とともに蓄積される継続的なコストにつながる可能性があります。このガイドでは、Api2pdfからIronPDFへの詳細な移行パスを説明します。IronPDFは、ドキュメントを完全に独自のインフラストラクチャで処理するネイティブ.NET PDFライブラリであり、データ転送の懸念を解消し、変換コストを一度きりの投資に抑えます。 Api2pdfから移行することを検討する理由は何ですか? Api2pdf は便利なクラウドベースの PDF 生成を提供しますが、開発チームが PDF 生成のニーズを満たすオンプレミスの代替手段を探す要因はいくつかあります。 セキュリティとコンプライアンスの懸念 Api2pdfはクラウドベースのサービスとして運営されており、機密性の高いHTMLや文書はサードパーティのサーバーに送信され、処理されます。 このため、規制対象データを扱う組織にとっては重大な懸念が生じます。 リスク Api2pdf IronPDF データ転送 外部サーバーに送信されるすべてのコンテンツ お客様のインフラストラクチャ上でローカルに処理 GDPRコンプライアンス。 データは管轄地域をまたぐ データはお客様の環境から離れません HIPAAコンプライアンス。 外部に送信されるPHI PHIをシステム内に保持 SOC 2 サードパーティ依存 データの取り扱いを完全に制御 PCI DSS (英語 公開される可能性のあるカードデータ 外部送信なし 長期的なコスト蓄積 Api2pdfは変換ごとに約$0.005を無期限で請求しますが、IronPdfは1回限りの永久ライセンスを提供します。 大量のPDFを生成するアプリケーションの場合、コストの差はかなりのものになります: ボリューム Api2pdf(年間) IronPDF (1回のみ) 10,000 PDF/月 ~600ドル/年 749ドル(Lite) 50,000 PDF/月 ~年間3,000ドル 749ドル(Lite) 100,000 PDF/月 ~年間6,000ドル 1,499ドル(Plus) IronPdfはほとんどのプロダクションアプリケーションで数ヶ月以内に元が取れます。 パフォーマンスと可用性 Api2pdfはPDF生成リクエストごとに2-5秒の待ち時間を追加するネットワークのラウンドトリップを必要とします。IronPdfはローカルで100-500ミリ秒で処理します。 さらに、IronPdfは完全にオフラインで動作し、外部サービスの可用性に依存できないアプリケーションにとって重要なエアギャップ環境でも動作します。 Api2pdfvs IronPDF:主な違い アスペクト Api2pdf IronPDF データ処理。 サードパーティのクラウドサーバーに送信 お客様のインフラストラクチャ上でローカルに処理 価格について ペイパーコンバージョン(~$0.005/PDF) 1回限りの永久ライセンス レイテンシーについて 2~5秒(ネットワーク往復) 100~500ミリ秒(ローカル処理) オフライン 不可 完全にオフラインで動作 インストール。 APIキー + HTTPクライアント シンプルなNuGetパッケージ。 コンプライアンス。 GDPR/HIPAAへの配慮(データがネットワークから漏れる) 完全なコンプライアンス管理 ステップごとの移行プロセス ステップ 1: NuGet パッケージを更新する Api2pdfパッケージを削除し、IronPdfをインストールしてください: # Remove Api2pdf dotnet remove package Api2Pdf # Install IronPDF dotnet add package IronPdf # Remove Api2pdf dotnet remove package Api2Pdf # Install IronPDF dotnet add package IronPdf SHELL またはパッケージマネージャーコンソールから: Uninstall-Package Api2Pdf Install-Package IronPdf ステップ 2: 名前空間参照の更新 Api2pdfの名前空間をIronPdfに置き換えてください: // Remove these using Api2Pdf; using Api2Pdf.DotNet; // Add these using IronPdf; using IronPdf.Rendering; // Remove these using Api2Pdf; using Api2Pdf.DotNet; // Add these using IronPdf; using IronPdf.Rendering; $vbLabelText $csharpLabel ステップ 3: ライセンス キーの設定 アプリケーション起動時にIronPdfライセンスキーを設定してください: // Set once at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; // Or configure via appsettings.json: // { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" } // Set once at application startup IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"; // Or configure via appsettings.json: // { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" } $vbLabelText $csharpLabel ステップ 4: API キー設定の削除 IronPdfはローカルで動作し、APIキーは必要ありません: // Remove thisApi2pdfpattern var client = new Api2PdfClient("API_KEY"); // Just create the renderer directly var renderer = new ChromePdfRenderer(); // Remove thisApi2pdfpattern var client = new Api2PdfClient("API_KEY"); // Just create the renderer directly var renderer = new ChromePdfRenderer(); $vbLabelText $csharpLabel 完全な API 移行のリファレンス コア クラス マッピング Api2pdfクラス IronPDF 同等物 ノート Api2PdfClient</code>|<code>ChromePdfRenderer 主なレンダリングクラス Api2PdfResult PdfDocument PDFを表す HeadlessChromeOptions ChromePdfRenderOptions レンダリング設定 メソッドマッピング Api2pdfメソッド IronPDF メソッド ノート client.HeadlessChrome.FromHtmlAsync(html). renderer.RenderHtmlAsPdf(html). HTML to PDF. client.HeadlessChrome.FromUrlAsync(url). renderer.RenderUrlAsPdf(url)のようにします。 URL to PDF. response.Pdf</code> (URL)|pdf.SaveAs(path)`のようにします。 ファイルに保存 response.Pdf(ダウンロード) pdf.BinaryData` バイト配列として取得 client.PdfSharp.MergePdfsAsync(urls). PdfDocument.Merge(pdfs). PDFをマージ。 client.PdfSharp.SetPasswordAsync(url, pwd). pdf.SecuritySettings.OwnerPassword。 パスワード保護 レンダリング オプション マッピング Api2pdfオプション IronPDF オプション ノート ランドスケープ = true RenderingOptions.PaperOrientation = Landscape. ページの向き PageSize = "A4". RenderingOptions.PaperSize=PdfPaperSize.A4。 用紙サイズ PrintBackground = true. RenderingOptions.PrintHtmlBackgrounds = true. 背景色 MarginTopなど。 RenderingOptions.MarginTopなど。 マージン(mm Delay = 5000. RenderingOptions.WaitFor.RenderDelay(5000)。 レンダリングする前に待つ コード移行の例 HTMLからPDFへの変換 最も一般的なApi2pdf操作は、クラウド API 呼び出しからローカル処理への根本的な移行を示しています。 Api2pdfの実装: // NuGet: Install-Package Api2Pdf.DotNet using System; using System.Threading.Tasks; using Api2Pdf.DotNet; class Program { static async Task Main(string[] args) { var a2pClient = new Api2PdfClient("your-api-key"); var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Hello World</h1>"); Console.WriteLine(apiResponse.Pdf); } } // NuGet: Install-Package Api2Pdf.DotNet using System; using System.Threading.Tasks; using Api2Pdf.DotNet; class Program { static async Task Main(string[] args) { var a2pClient = new Api2PdfClient("your-api-key"); var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Hello World</h1>"); Console.WriteLine(apiResponse.Pdf); } } $vbLabelText $csharpLabel IronPDFの実装:。 // NuGet: Install-Package IronPdf using System; using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } // NuGet: Install-Package IronPdf using System; using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>"); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created successfully"); } } $vbLabelText $csharpLabel IronPDFはネットワークのラウンドトリップ、APIキーの管理、Api2pdfのURLベースのレスポンスパターンに必要な個別のダウンロードステップを排除します。 URLからPDFへの変換 Api2pdfの実装: // NuGet: Install-Package Api2Pdf.DotNet using System; using System.Threading.Tasks; using Api2Pdf.DotNet; class Program { static async Task Main(string[] args) { var a2pClient = new Api2PdfClient("your-api-key"); var apiResponse = await a2pClient.HeadlessChrome.FromUrlAsync("https://www.example.com"); Console.WriteLine(apiResponse.Pdf); } } // NuGet: Install-Package Api2Pdf.DotNet using System; using System.Threading.Tasks; using Api2Pdf.DotNet; class Program { static async Task Main(string[] args) { var a2pClient = new Api2PdfClient("your-api-key"); var apiResponse = await a2pClient.HeadlessChrome.FromUrlAsync("https://www.example.com"); Console.WriteLine(apiResponse.Pdf); } } $vbLabelText $csharpLabel IronPDFの実装:。 // NuGet: Install-Package IronPdf using System; using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF created from URL successfully"); } } // NuGet: Install-Package IronPdf using System; using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderUrlAsPdf("https://www.example.com"); pdf.SaveAs("webpage.pdf"); Console.WriteLine("PDF created from URL successfully"); } } $vbLabelText $csharpLabel HTMLファイルをPDFに変換(オプション付き) Api2pdfの実装: // NuGet: Install-Package Api2Pdf.DotNet using System; using System.IO; using System.Threading.Tasks; using Api2Pdf.DotNet; class Program { static async Task Main(string[] args) { var a2pClient = new Api2PdfClient("your-api-key"); string html = File.ReadAllText("input.html"); var options = new HeadlessChromeOptions { Landscape = true, PrintBackground = true }; var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options); Console.WriteLine(apiResponse.Pdf); } } // NuGet: Install-Package Api2Pdf.DotNet using System; using System.IO; using System.Threading.Tasks; using Api2Pdf.DotNet; class Program { static async Task Main(string[] args) { var a2pClient = new Api2PdfClient("your-api-key"); string html = File.ReadAllText("input.html"); var options = new HeadlessChromeOptions { Landscape = true, PrintBackground = true }; var apiResponse = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options); Console.WriteLine(apiResponse.Pdf); } } $vbLabelText $csharpLabel IronPDFの実装:。 // NuGet: Install-Package IronPdf using System; using System.IO; using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape; renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print; string html = File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created with options successfully"); } } // NuGet: Install-Package IronPdf using System; using System.IO; using IronPdf; class Program { static void Main(string[] args) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape; renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print; string html = File.ReadAllText("input.html"); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); Console.WriteLine("PDF created with options successfully"); } } $vbLabelText $csharpLabel IronPdfはレンダリングオプションを各API呼び出しに個別のオプションパラメーターとして渡すのではなく、レンダリングオブジェクト上で直接設定します。 複数のPDFをマージする Api2pdfの実装: using Api2Pdf.DotNet; var a2pClient = new Api2PdfClient("YOUR_API_KEY"); var pdfUrls = new List<string> { "https://example.com/pdf1.pdf", "https://example.com/pdf2.pdf", "https://example.com/pdf3.pdf" }; var request = new PdfMergeRequest { Urls = pdfUrls }; var response = await a2pClient.PdfSharp.MergePdfsAsync(request); if (response.Success) { // Download merged PDF from response.Pdf URL } using Api2Pdf.DotNet; var a2pClient = new Api2PdfClient("YOUR_API_KEY"); var pdfUrls = new List<string> { "https://example.com/pdf1.pdf", "https://example.com/pdf2.pdf", "https://example.com/pdf3.pdf" }; var request = new PdfMergeRequest { Urls = pdfUrls }; var response = await a2pClient.PdfSharp.MergePdfsAsync(request); if (response.Success) { // Download merged PDF from response.Pdf URL } $vbLabelText $csharpLabel IronPDFの実装:。 using IronPdf; // Load PDFs from files var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var pdf3 = PdfDocument.FromFile("document3.pdf"); // Merge all PDFs var merged = PdfDocument.Merge(pdf1, pdf2, pdf3); merged.SaveAs("merged.pdf"); using IronPdf; // Load PDFs from files var pdf1 = PdfDocument.FromFile("document1.pdf"); var pdf2 = PdfDocument.FromFile("document2.pdf"); var pdf3 = PdfDocument.FromFile("document3.pdf"); // Merge all PDFs var merged = PdfDocument.Merge(pdf1, pdf2, pdf3); merged.SaveAs("merged.pdf"); $vbLabelText $csharpLabel IronPdfの静的なMergeメソッドは複数のドキュメントを直接受け取ることができ、URLベースのワークフローを排除します。 パスワードで保護された PDF Api2pdfの実装: using Api2Pdf.DotNet; var a2pClient = new Api2PdfClient("YOUR_API_KEY"); // Generate PDF first var pdfResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Confidential</h1>"); // Then add password protection in separate call var protectedResponse = await a2pClient.PdfSharp.SetPasswordAsync( pdfResponse.Pdf, "secretpassword" ); using Api2Pdf.DotNet; var a2pClient = new Api2PdfClient("YOUR_API_KEY"); // Generate PDF first var pdfResponse = await a2pClient.HeadlessChrome.FromHtmlAsync("<h1>Confidential</h1>"); // Then add password protection in separate call var protectedResponse = await a2pClient.PdfSharp.SetPasswordAsync( pdfResponse.Pdf, "secretpassword" ); $vbLabelText $csharpLabel IronPDFの実装:。 using IronPdf; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>"); // Set security in one step pdf.SecuritySettings.OwnerPassword = "owner123"; pdf.SecuritySettings.UserPassword = "user123"; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs("protected.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>"); // Set security in one step pdf.SecuritySettings.OwnerPassword = "owner123"; pdf.SecuritySettings.UserPassword = "user123"; pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint; pdf.SecuritySettings.AllowUserCopyPasteContent = false; pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit; pdf.SaveAs("protected.pdf"); $vbLabelText $csharpLabel IronPdfはSecuritySettingsプロパティを通してPDFのパーミッションを細かくコントロールします。 ヘッダーとフッター Api2pdfの実装: using Api2Pdf.DotNet; var a2pClient = new Api2PdfClient("YOUR_API_KEY"); var options = new HeadlessChromeOptions { HeaderHtml = "<div style='font-size:10px'>Company Header</div>", FooterHtml = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>" }; var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options); using Api2Pdf.DotNet; var a2pClient = new Api2PdfClient("YOUR_API_KEY"); var options = new HeadlessChromeOptions { HeaderHtml = "<div style='font-size:10px'>Company Header</div>", FooterHtml = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>" }; var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html, options); $vbLabelText $csharpLabel IronPDFの実装:。 using IronPdf; var renderer = new ChromePdfRenderer(); // HTML headers and footers with full styling renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>", DrawDividerLine = true }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>", DrawDividerLine = true }; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("with-headers.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); // HTML headers and footers with full styling renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>", DrawDividerLine = true }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>", DrawDividerLine = true }; var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("with-headers.pdf"); $vbLabelText $csharpLabel IronPDFは{page}や{total-pages}のようなプレースホルダートークンをサポートしています。 その他のオプションについては、headers and footers documentationを参照してください。 .NETコアの統合 Api2pdfの非同期HTTPパターンはIronPDFの直接PDF生成とは大きく異なります。 Api2pdfパターン: [ApiController] public class PdfController : ControllerBase { private readonly Api2PdfClient _client; public PdfController() { _client = new Api2PdfClient("YOUR_API_KEY"); } [HttpGet("generate")] public async Task<IActionResult> GeneratePdf() { var response = await _client.HeadlessChrome.FromHtmlAsync("<h1>Report</h1>"); if (!response.Success) return BadRequest(response.Error); // Redirect to download URL return Redirect(response.Pdf); } } [ApiController] public class PdfController : ControllerBase { private readonly Api2PdfClient _client; public PdfController() { _client = new Api2PdfClient("YOUR_API_KEY"); } [HttpGet("generate")] public async Task<IActionResult> GeneratePdf() { var response = await _client.HeadlessChrome.FromHtmlAsync("<h1>Report</h1>"); if (!response.Success) return BadRequest(response.Error); // Redirect to download URL return Redirect(response.Pdf); } } $vbLabelText $csharpLabel IronPDFパターン: [ApiController] public class PdfController : ControllerBase { [HttpGet("generate")] public IActionResult GeneratePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>"); // Return PDF directly - no download step needed return File(pdf.BinaryData, "application/pdf", "report.pdf"); } [HttpGet("generate-async")] public async Task<IActionResult> GeneratePdfAsync() { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>"); return File(pdf.Stream, "application/pdf", "report.pdf"); } } [ApiController] public class PdfController : ControllerBase { [HttpGet("generate")] public IActionResult GeneratePdf() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>"); // Return PDF directly - no download step needed return File(pdf.BinaryData, "application/pdf", "report.pdf"); } [HttpGet("generate-async")] public async Task<IActionResult> GeneratePdfAsync() { var renderer = new ChromePdfRenderer(); var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>"); return File(pdf.Stream, "application/pdf", "report.pdf"); } } $vbLabelText $csharpLabel IronPdfはBinaryDataまたはStream経由でPDFを直接返すので、リダイレクトからダウンロードというパターンがなくなります。 依存性注入の構成 // Program.cs or Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddScoped<IPdfService, IronPdfService>(); } // IPdfService.cs public interface IPdfService { PdfDocument GenerateFromHtml(string html); Task<PdfDocument> GenerateFromHtmlAsync(string html); } // IronPdfService.cs public class IronPdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public IronPdfService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.PrintHtmlBackgrounds = true; _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; } public PdfDocument GenerateFromHtml(string html) => _renderer.RenderHtmlAsPdf(html); public Task<PdfDocument> GenerateFromHtmlAsync(string html) => _renderer.RenderHtmlAsPdfAsync(html); } // Program.cs or Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddScoped<IPdfService, IronPdfService>(); } // IPdfService.cs public interface IPdfService { PdfDocument GenerateFromHtml(string html); Task<PdfDocument> GenerateFromHtmlAsync(string html); } // IronPdfService.cs public class IronPdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public IronPdfService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.PrintHtmlBackgrounds = true; _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4; } public PdfDocument GenerateFromHtml(string html) => _renderer.RenderHtmlAsPdf(html); public Task<PdfDocument> GenerateFromHtmlAsync(string html) => _renderer.RenderHtmlAsPdfAsync(html); } $vbLabelText $csharpLabel エラー処理の移行 Api2pdfはレスポンスオブジェクトチェックを使用しています。 IronPDFは.NETの標準的な例外を使用します。 Api2pdfパターン: var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html); if (!response.Success) { Console.WriteLine($"Error: {response.Error}"); return; } var response = await a2pClient.HeadlessChrome.FromHtmlAsync(html); if (!response.Success) { Console.WriteLine($"Error: {response.Error}"); return; } $vbLabelText $csharpLabel IronPDFパターン: try { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } catch (IronPdf.Exceptions.IronPdfLicenseException ex) { Console.WriteLine($"License error: {ex.Message}"); } catch (IronPdf.Exceptions.IronPdfRenderingException ex) { Console.WriteLine($"Rendering error: {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } try { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); } catch (IronPdf.Exceptions.IronPdfLicenseException ex) { Console.WriteLine($"License error: {ex.Message}"); } catch (IronPdf.Exceptions.IronPdfRenderingException ex) { Console.WriteLine($"Rendering error: {ex.Message}"); } catch (Exception ex) { Console.WriteLine($"Error: {ex.Message}"); } $vbLabelText $csharpLabel パフォーマンス比較 メトリック Api2pdf IronPDF シンプルなHTML。 2~5秒(ネットワーク) 100-500ミリ秒(ローカル) 複雑なページ 5~10秒 500ms-2s 100のバッチ。 分(レート制限) セカンズ(パラレル) オフライン 不可 作業内容 コールドスタート。 なし ~2秒(最初のレンダリング) パフォーマンス最適化のヒント // 1. Reuse renderer instance private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer(); public PdfDocument GeneratePdf(string html) { return SharedRenderer.RenderHtmlAsPdf(html); } // 2. Parallel generation var tasks = htmlDocs.Select(html => Task.Run(() => SharedRenderer.RenderHtmlAsPdf(html))); var results = await Task.WhenAll(tasks); // 3. Disable unnecessary features for speed var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = false; // If not needed renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay // 1. Reuse renderer instance private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer(); public PdfDocument GeneratePdf(string html) { return SharedRenderer.RenderHtmlAsPdf(html); } // 2. Parallel generation var tasks = htmlDocs.Select(html => Task.Run(() => SharedRenderer.RenderHtmlAsPdf(html))); var results = await Task.WhenAll(tasks); // 3. Disable unnecessary features for speed var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.EnableJavaScript = false; // If not needed renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay $vbLabelText $csharpLabel よくある移行の問題のトラブルシューティング 課題PDFの見た目がApi2pdfの出力と異なる Api2pdfのヘッドレスChromeの設定に合わせてください: var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.ViewPortWidth = 1280; renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor.RenderDelay(1000); var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; renderer.RenderingOptions.PrintHtmlBackgrounds = true; renderer.RenderingOptions.ViewPortWidth = 1280; renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.WaitFor.RenderDelay(1000); $vbLabelText $csharpLabel 問題です:外部リソースが読み込まれません リソースのロードタイムアウトを設定します: var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout: 10000); renderer.RenderingOptions.WaitFor.NetworkIdle(timeout: 10000); // Or use base URL for relative paths var pdf = renderer.RenderHtmlAsPdf(html, baseUrl: "https://example.com/"); var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout: 10000); renderer.RenderingOptions.WaitFor.NetworkIdle(timeout: 10000); // Or use base URL for relative paths var pdf = renderer.RenderHtmlAsPdf(html, baseUrl: "https://example.com/"); $vbLabelText $csharpLabel 課題PDFファイルのサイズが大きい 生成後に画像を圧縮します: renderer.RenderingOptions.ImageQuality = 80; // Or compress after generation pdf.CompressImages(quality: 75); pdf.SaveAs("compressed.pdf"); renderer.RenderingOptions.ImageQuality = 80; // Or compress after generation pdf.CompressImages(quality: 75); pdf.SaveAs("compressed.pdf"); $vbLabelText $csharpLabel 移行後のチェックリスト コードの移行が完了したら、以下を確認してください: PDF出力の品質が期待値に合っていることを確認 すべてのエッジケース(大きなドキュメント、特殊文字)をテストします パフォーマンス指標を検証する(大幅な改善が見られるはず) 該当する場合はDocker構成を更新します Api2pdfポータルアカウントとAPIキーを削除する 更新の監視(API レイテンシの追跡は不要) チームの新しいパターンを文書化する CI/CDパイプラインを更新する PDFインフラストラクチャの将来性を確保する .NET 10が近づき、C# 14が新しい言語機能を導入する中、ネイティブの.NET PDFライブラリを選択することで、進化するランタイム機能との互換性を確保できます。 IronPDFは最新の.NETバージョンをサポートしており、プロジェクトが2025年や2026年まで拡張されても、変換ごとの継続的なコストが発生することなく、移行への投資が報われます。 その他のリソース IronPDFドキュメント. HTMLからPDFへのチュートリアル。 APIリファレンス. NuGetパッケージ。 ライセンスオプション。 Api2pdfからIronPDFに移行することで、PDF生成はクラウドに依存した変換ごとのコストモデルから、ローカルの1回限りの投資に変わります。 機密文書がインフラ上に残り、待ち時間が数秒から数ミリ秒に短縮され、この重要なアプリケーション機能のベンダー依存が解消されます。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 公開日 2026年2月1日 C#でZetPDFからIronPDFに移行する方法 この完全なC#ガイドでZetPDFからIronPDFへの移行をマスターしてください。座標ベースのライブラリから最新のHTML-to-PDFソリューションに切り替えます。HTML変換、PDFのマージ、PDFSharpの依存関係の削除のコード例が含まれています。 詳しく読む 公開日 2026年2月1日 C#でScryber.CoreからIronPDFに移行する方法 この完全なC#ガイドでScryber.CoreからIronPDFへの移行をマスターしてください。カスタムXML/HTMLパースから最新のChromiumレンダラーに切り替えます。HTML変換、URLレンダリング、独自のバインディングを置き換えるコード例を含みます。 詳しく読む 公開日 2026年2月1日 C#でXFINIUM.PDFからIronPdfへ移行する方法 この完全なC#ガイドでXFINIUM.PDFからIronPDFへの移行をマスターしてください。座標ベースの手動ポジショニングから宣言的なHTML/CSSレンダリングに切り替えます。グラフィックスプリミティブの置き換えと自動レイアウトのコード例を含みます。 詳しく読む C#でApryse PDFからIronPDFへ移行する方法Apache PDFBoxからIronPdfへの移...
公開日 2026年2月1日 C#でZetPDFからIronPDFに移行する方法 この完全なC#ガイドでZetPDFからIronPDFへの移行をマスターしてください。座標ベースのライブラリから最新のHTML-to-PDFソリューションに切り替えます。HTML変換、PDFのマージ、PDFSharpの依存関係の削除のコード例が含まれています。 詳しく読む
公開日 2026年2月1日 C#でScryber.CoreからIronPDFに移行する方法 この完全なC#ガイドでScryber.CoreからIronPDFへの移行をマスターしてください。カスタムXML/HTMLパースから最新のChromiumレンダラーに切り替えます。HTML変換、URLレンダリング、独自のバインディングを置き換えるコード例を含みます。 詳しく読む
公開日 2026年2月1日 C#でXFINIUM.PDFからIronPdfへ移行する方法 この完全なC#ガイドでXFINIUM.PDFからIronPDFへの移行をマスターしてください。座標ベースの手動ポジショニングから宣言的なHTML/CSSレンダリングに切り替えます。グラフィックスプリミティブの置き換えと自動レイアウトのコード例を含みます。 詳しく読む