フッターコンテンツにスキップ
製品比較

IronPDF vs PDFSharpCore: 2025年に選ぶべき.NET PDFライブラリはどれ?

PDF の生成および操作機能を必要とする最新の .NET アプリケーションを開発する場合、適切なライブラリを選択すると、プロジェクトの成功に大きな影響を与える可能性があります。 .NET エコシステムにおける 2 つの主要なオプションはIronPDFPDFSharpCoreであり、それぞれ PDF 処理に対して異なるアプローチを提供します。 この包括的な比較は、特定の要件、予算、および技術的なニーズに基づいて、情報に基づいた決定を下すのに役立ちます。

クイック比較の概要

技術的な詳細に入る前に、IronPDF と PDFシャープコア の主な違いをまとめた包括的な比較表を以下に示します。

製品比較の概要
.NET PDF 処理におけるIronPDFと PDFシャープコア の比較
カテゴリ特徴/側面IronPDFPDFSharpCore主な利点
コアアーキテクチャデザイン哲学Chromeベースのレンダリング、直感的なAPI軽量な手動PDF構築IronPDF: より速い開発
APIの複雑さRenderHtmlAsPdf()のような単純なメソッド。XGraphics による手動描画IronPDF: コードが70%削減
学習曲線通常1~2日通常3~5日IronPDF: より迅速な導入
プラットフォームサポートクロスプラットフォームネイティブサポート、追加パッケージなし完全なクロスプラットフォームサポート両方: 最新の展開
.NETバージョン.NET 10、9、8、7、6、5、Core 3.1 以上、Framework 4.6.2 以上.NET 6+、.NET Standard 2.0IronPDF: より幅広い互換性
オペレーティングシステムWindows、Linux、macOS、Docker、Azure、AWSWindows, Linux, macOSIronPDF: クラウド最適化
HTMLからPDFへレンダリングエンジンフルクロームV8エンジンネイティブHTMLサポートなしIronPDF: HTML機能
CSS3/HTML5 サポート完全なサポートサードパーティのライブラリが必要IronPDF: 最新のWeb標準
JavaScriptの実行完全なJavaScriptサポート製品の更新とサポートオプション:IronPDF: 動的コンテンツ
主な特徴テキスト抽出組み込みのExtractAllText()です。限定的なサポートIronPDF: 優れた抽出
透かし入りHTML/CSSベースの完全なスタイル手書きの描画が必要IronPDF: 豊富な透かし
デジタル署名統合された視覚的シグネチャNot supportedIronPDF: エンタープライズセキュリティ
暗号化AES-256、カスタムハンドラー基本的な暗号化サポートIronPDF: 高度なセキュリティ
ヘッダー/フッターHTMLベースの動的コンテンツ手動位置決めIronPDF: 動的ヘッダー
パフォーマンスHTMLレンダリング速度通常 0.8 ~ 2 秒 (Chrome エンジン)製品の更新とサポートオプション:IronPDF: HTMLレンダリング
大規模ドキュメント処理スケールに最適化メモリ効率が良いPDFSharpCore: メモリ不足
スレッドサポートネイティブの async/await、並列処理スレッドセーフな操作IronPDF: 優れたスケーラビリティ
開発者としての経験ドキュメント豊富なチュートリアル、APIドキュメント、ビデオ基本的なドキュメントIronPDF: より良いリソース
コード例すぐに実行できる100以上のサンプルコミュニティの例IronPDF: 豊富なサンプル
インテリセンスサポート完全なIntelliSense、XMLドキュメント標準のインテリセンス両方: IDE統合
Licensing & Pricingライセンスの種類商業用、永久MITライセンス(無料)PDFSharpCore: 無料
入場料Lite: $799 (1 dev, 1 project)無料PDFSharpCore: ゼロコスト
サポート24時間365日のエンジニアリングサポートが含まれていますコミュニティサポートのみIronPDF: プロフェッショナルサポート
最適な対象使用例ウェブアプリ、レポート、エンタープライズシンプルなPDF、予算プロジェクト文脈依存
PDFSharpCoreは基本的なPDF作成に適したオープンソースライブラリですが、IronPDFはHTMLレンダリングやエンタープライズサポートを含む包括的な機能を提供します。選択はプロジェクトの複雑さと予算の制約に依存します。

IronPDFと PDFシャープコア の紹介

IronPDFとは何ですか?

IronPDFは、開発者が PDF を簡単に生成、編集、操作できるように設計された包括的な商用 .NET ライブラリです。 Chrome ベースのレンダリング エンジン上に構築されており、HTML、CSS、JavaScript コンテンツをピクセルパーフェクトな PDF に変換するのに優れています。 このライブラリは、 HTML から PDF への変換デジタル署名透かしPDF 暗号化フォーム管理などの広範な機能セットを提供します。

IronPDF は、.NET 10、9、8、7、6、5、Core 3.1+、Framework 4.6.2+ などの最新の .NET バージョンをサポートしており、新しいアプリケーションと従来のアプリケーションの両方に幅広く使用できます。 クラウドに最適化されたアーキテクチャにより、 AzureAWSDocker環境へのシームレスな展開が保証されます。

PDFSharpCoreとは何ですか?

PDFSharpCoreは、元の PDFsharp ライブラリの .NET Core ポートとして機能するオープンソース ライブラリです。 MIT ライセンスの下でリリースされており、Windows 固有のライブラリに依存せずにプログラムによる PDF 作成と基本的な操作に重点を置いています。 そのため、Linux、macOS、Windows で実行されるクロスプラットフォーム プロジェクトに最適です。

PDFSharpCore はネイティブの HTML から PDF への変換を提供しませんが、描画 API を通じて PDF ドキュメントの作成を正確に制御できます。 開発者は、座標ベースの描画コマンドを使用してテキスト、画像、グラフィックを配置することで、PDF ドキュメントを手動で作成できます。

インストールとセットアップ

IronPDFのインストール

プロジェクトでIronPDFの使用を開始するには、NuGet パッケージ マネージャーを使用して簡単にインストールできます。 次の手順に従います。

  1. Visual Studioでプロジェクトを開きます。
  2. [ツール] > [NuGet パッケージ マネージャー] > [ソリューションの NuGet パッケージの管理]に移動します。
  3. NuGet マネージャーでIronPdfを検索します。
  4. プロジェクトを選択し、 "インストール"をクリックしてIronPDFをプロジェクトに追加します。

! IronPDFとPDFSharpCoreの比較: 図1 - NuGetパッケージマネージャー経由でIronPDFをインストール Visual StudioのNuGetパッケージマネージャーインターフェースを通じてIronPDFをインストールする

あるいは、パッケージ マネージャー コンソールを使用して次のコマンドでIronPDFをインストールすることもできます。

Install-Package IronPdf

PDFSharpCoreのインストール

NuGet を使用して PDFシャープコア をインストールするには、次の手順に従います。

  1. Visual Studio プロジェクトが開いていることを確認します。
  2. [ツール] > [NuGet パッケージ マネージャー] > [ソリューションの NuGet パッケージの管理]に移動します。
  3. NuGet パッケージ マネージャーで、 PDFSharpCoreを検索します。
  4. プロジェクトを選択し、 "インストール"をクリックして PDFシャープコア を組み込みます。

! IronPDFとPDFSharpCoreの比較: 図2 - NuGet経由でPDFSharpCoreをインストール NuGet パッケージ マネージャーによる PDFシャープコア のインストール

パッケージ マネージャー コンソールを好む開発者の場合、次のコマンドで PDFシャープコア をインストールできます。

Install-Package PdfSharpCore

PDFファイルの作成: IronPDFとPDFSharpCore

IronPDF: 最新の HTML ベースのアプローチ

IronPDF は、開発者がすでに知っている Web テクノロジーを活用して PDF 作成に革命をもたらします。 Chrome ベースのレンダリング エンジンにより、HTML、CSS、JavaScript が最新のブラウザで表示されるのとまったく同じようにレンダリングされます。

高度な機能を備えた HTML 文字列を PDF に変換

IronPDF のHTML から PDF への変換機能は、単純なテキスト レンダリングをはるかに超えています。 その威力を示す強化された例を以下に示します。

using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        // Apply your license key (required for production)
        License.LicenseKey = "Your-License-Key";

        // Create renderer with optimized settings
        var renderer = new ChromePdfRenderer()
        {
            RenderingOptions = new ChromePdfRenderOptions()
            {
                // Set margins for professional appearance
                MarginTop = 25,
                MarginBottom = 25,
                MarginLeft = 20,
                MarginRight = 20,

                // Enable JavaScript execution for dynamic content
                EnableJavaScript = true,

                // Wait for AJAX/animations to complete
                RenderDelay = 500,

                // Set paper orientation and size
                PaperOrientation = PdfPaperOrientation.Portrait,
                PaperSize = PdfPaperSize.A4,

                // Enable printing of background colors and images
                PrintHtmlBackgrounds = true
            }
        };

        // HTML with Bootstrap styling and charts
        string htmlContent = @"
            <!DOCTYPE html>
            <html>
            <head>
                <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css' rel='stylesheet'>
                <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
                <style>
                    body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
                    .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; }
                    .chart-container { width: 100%; height: 300px; margin: 20px 0; }
                </style>
            </head>
            <body>
                <div class='header text-center'>
                    <h1>2024 Sales Performance Report</h1>
                    <p class='lead'>Comprehensive Analysis & Insights</p>
                </div>

                <div class='container mt-4'>
                    <div class='row'>
                        <div class='col-md-6'>
                            <div class='card'>
                                <div class='card-body'>
                                    <h5 class='card-title'>Q1 Performance Metrics</h5>
                                    <table class='table table-striped'>
                                        <thead>
                                            <tr>
                                                <th>Month</th>
                                                <th>Revenue</th>
                                                <th>Growth</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr>
                                                <td>January</td>
                                                <td>$50,000</td>
                                                <td><span class='badge bg-success'>+12%</span></td>
                                            </tr>
                                            <tr>
                                                <td>February</td>
                                                <td>$55,000</td>
                                                <td><span class='badge bg-success'>+10%</span></td>
                                            </tr>
                                            <tr>
                                                <td>March</td>
                                                <td>$60,000</td>
                                                <td><span class='badge bg-success'>+9%</span></td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                        </div>
                        <div class='col-md-6'>
                            <div class='card'>
                                <div class='card-body'>
                                    <h5 class='card-title'>Revenue Trend</h5>
                                    <canvas id='revenueChart'></canvas>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class='alert alert-info mt-4'>
                        <strong>Key Insight:</strong> Q1 showed consistent growth across all months, 
                        with total revenue reaching $165,000, representing a 31% increase YoY.
                    </div>
                </div>

                <script>
                    // Create an interactive chart
                    const ctx = document.getElementById('revenueChart').getContext('2d');
                    new Chart(ctx, {
                        type: 'line',
                        data: {
                            labels: ['January', 'February', 'March'],
                            datasets: [{
                                label: 'Revenue',
                                data: [50000, 55000, 60000],
                                borderColor: '#667eea',
                                backgroundColor: 'rgba(102, 126, 234, 0.1)',
                                tension: 0.4
                            }]
                        },
                        options: {
                            responsive: true,
                            maintainAspectRatio: false
                        }
                    });
                </script>
            </body>
            </html>";

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

        // Add metadata for better document management
        pdf.MetaData.Author = "Sales Department";
        pdf.MetaData.Title = "Q1 2024 Sales Report";
        pdf.MetaData.Subject = "Quarterly Performance Analysis";
        pdf.MetaData.Keywords = "sales, performance, Q1, 2024";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Save the PDF
        pdf.SaveAs("sales-report-q1-2024.pdf");
        Console.WriteLine("Professional sales report generated successfully!");
    }
}
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        // Apply your license key (required for production)
        License.LicenseKey = "Your-License-Key";

        // Create renderer with optimized settings
        var renderer = new ChromePdfRenderer()
        {
            RenderingOptions = new ChromePdfRenderOptions()
            {
                // Set margins for professional appearance
                MarginTop = 25,
                MarginBottom = 25,
                MarginLeft = 20,
                MarginRight = 20,

                // Enable JavaScript execution for dynamic content
                EnableJavaScript = true,

                // Wait for AJAX/animations to complete
                RenderDelay = 500,

                // Set paper orientation and size
                PaperOrientation = PdfPaperOrientation.Portrait,
                PaperSize = PdfPaperSize.A4,

                // Enable printing of background colors and images
                PrintHtmlBackgrounds = true
            }
        };

        // HTML with Bootstrap styling and charts
        string htmlContent = @"
            <!DOCTYPE html>
            <html>
            <head>
                <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css' rel='stylesheet'>
                <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
                <style>
                    body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; }
                    .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; }
                    .chart-container { width: 100%; height: 300px; margin: 20px 0; }
                </style>
            </head>
            <body>
                <div class='header text-center'>
                    <h1>2024 Sales Performance Report</h1>
                    <p class='lead'>Comprehensive Analysis & Insights</p>
                </div>

                <div class='container mt-4'>
                    <div class='row'>
                        <div class='col-md-6'>
                            <div class='card'>
                                <div class='card-body'>
                                    <h5 class='card-title'>Q1 Performance Metrics</h5>
                                    <table class='table table-striped'>
                                        <thead>
                                            <tr>
                                                <th>Month</th>
                                                <th>Revenue</th>
                                                <th>Growth</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <tr>
                                                <td>January</td>
                                                <td>$50,000</td>
                                                <td><span class='badge bg-success'>+12%</span></td>
                                            </tr>
                                            <tr>
                                                <td>February</td>
                                                <td>$55,000</td>
                                                <td><span class='badge bg-success'>+10%</span></td>
                                            </tr>
                                            <tr>
                                                <td>March</td>
                                                <td>$60,000</td>
                                                <td><span class='badge bg-success'>+9%</span></td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                        </div>
                        <div class='col-md-6'>
                            <div class='card'>
                                <div class='card-body'>
                                    <h5 class='card-title'>Revenue Trend</h5>
                                    <canvas id='revenueChart'></canvas>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class='alert alert-info mt-4'>
                        <strong>Key Insight:</strong> Q1 showed consistent growth across all months, 
                        with total revenue reaching $165,000, representing a 31% increase YoY.
                    </div>
                </div>

                <script>
                    // Create an interactive chart
                    const ctx = document.getElementById('revenueChart').getContext('2d');
                    new Chart(ctx, {
                        type: 'line',
                        data: {
                            labels: ['January', 'February', 'March'],
                            datasets: [{
                                label: 'Revenue',
                                data: [50000, 55000, 60000],
                                borderColor: '#667eea',
                                backgroundColor: 'rgba(102, 126, 234, 0.1)',
                                tension: 0.4
                            }]
                        },
                        options: {
                            responsive: true,
                            maintainAspectRatio: false
                        }
                    });
                </script>
            </body>
            </html>";

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

        // Add metadata for better document management
        pdf.MetaData.Author = "Sales Department";
        pdf.MetaData.Title = "Q1 2024 Sales Report";
        pdf.MetaData.Subject = "Quarterly Performance Analysis";
        pdf.MetaData.Keywords = "sales, performance, Q1, 2024";
        pdf.MetaData.CreationDate = DateTime.Now;

        // Save the PDF
        pdf.SaveAs("sales-report-q1-2024.pdf");
        Console.WriteLine("Professional sales report generated successfully!");
    }
}
$vbLabelText   $csharpLabel

この例では、IronPDF のいくつかの高度な機能を紹介します。

  • Bootstrap 統合:人気の CSS フレームワークを活用してプロフェッショナルなスタイルを実現します
  • JavaScript チャート: PDF で動的な Chart.js の視覚化をレンダリングします -レスポンシブデザイン:レスポンシブレイアウトをインテリジェントに処理します -メタデータ管理:ドキュメント管理システムに検索可能なメタデータを追加します -レンダリング遅延:レンダリング前に JavaScript コンテンツが完全に読み込まれるようにします

ChromePdfRendererクラスは、レンダリング プロセスを広範囲に制御できます。 主なオプションは次のとおりです。

  • EnableJavaScript : レンダリング前にJavaScriptコードを実行します
  • RenderDelay : 非同期コンテンツの読み込みを待機します
  • PrintHtmlBackgrounds : 背景色と画像を保存します
  • PaperOrientationPaperSize : ページレイアウトを制御します
  • プロフェッショナルな文書の外観を実現する余白設定

HTMLファイルとURLの変換

IronPDF は、既存の HTML ファイルやライブ Web ページの変換にも優れています。

using IronPdf;

class Program
{
    static async Task Main(string[] args)
    {
        License.LicenseKey = "Your-License-Key";

        var renderer = new ChromePdfRenderer();

        // Convert a local HTML file with external resources
        var filePdf = renderer.RenderHtmlFileAsPdf(@"C:\Reports\template.html");
        filePdf.SaveAs("from-file.pdf");

        // Convert a URL with authentication
        renderer.LoginCredentials = new ChromeHttpLoginCredentials()
        {
            Username = "user@example.com",
            Password = "secure-password"
        };

        // Render a password-protected page
        var urlPdf = await renderer.RenderUrlAsPdfAsync("https://secure.example.com/reports");
        urlPdf.SaveAs("secure-report.pdf");
    }
}
using IronPdf;

class Program
{
    static async Task Main(string[] args)
    {
        License.LicenseKey = "Your-License-Key";

        var renderer = new ChromePdfRenderer();

        // Convert a local HTML file with external resources
        var filePdf = renderer.RenderHtmlFileAsPdf(@"C:\Reports\template.html");
        filePdf.SaveAs("from-file.pdf");

        // Convert a URL with authentication
        renderer.LoginCredentials = new ChromeHttpLoginCredentials()
        {
            Username = "user@example.com",
            Password = "secure-password"
        };

        // Render a password-protected page
        var urlPdf = await renderer.RenderUrlAsPdfAsync("https://secure.example.com/reports");
        urlPdf.SaveAs("secure-report.pdf");
    }
}
$vbLabelText   $csharpLabel

PDFSharpCore: 手動ドキュメント構築

PDFSharpCore は根本的に異なるアプローチを採用しており、開発者は描画コマンドを使用して PDF ドキュメントを手動で構築する必要があります。 これにより正確な制御が可能になりますが、複雑なレイアウトの場合は大幅に多くのコードが必要になります。

using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf;
using System;

class Program
{
    static void Main()
    {
        // Create a new PDF document
        var document = new PdfDocument();
        document.Info.Title = "Sales Report Q1 2024";
        document.Info.Author = "Sales Department";

        // Add a page
        var page = document.AddPage();
        page.Size = PdfSharpCore.PageSize.A4;

        // Create graphics object for drawing
        var gfx = XGraphics.FromPdfPage(page);

        // Define fonts
        var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
        var headingFont = new XFont("Arial", 14, XFontStyle.Bold);
        var normalFont = new XFont("Arial", 11, XFontStyle.Regular);

        // Draw title with gradient-like effect (manual implementation)
        var titleBrush = new XLinearGradientBrush(
            new XPoint(0, 0), 
            new XPoint(page.Width, 0),
            XColors.DarkBlue, 
            XColors.Purple
        );
        gfx.DrawRectangle(titleBrush, 0, 0, page.Width, 80);
        gfx.DrawString("2024 Sales Performance Report", 
            titleFont, XBrushes.White,
            new XRect(0, 20, page.Width, 40),
            XStringFormats.TopCenter);

        // Draw table manually
        double yPosition = 120;
        double margin = 50;
        double columnWidth = (page.Width - 2 * margin) / 3;

        // Table header
        gfx.DrawRectangle(XBrushes.LightGray, margin, yPosition, page.Width - 2 * margin, 25);
        gfx.DrawString("Month", headingFont, XBrushes.Black, 
            new XRect(margin, yPosition, columnWidth, 25), 
            XStringFormats.Center);
        gfx.DrawString("Revenue", headingFont, XBrushes.Black, 
            new XRect(margin + columnWidth, yPosition, columnWidth, 25), 
            XStringFormats.Center);
        gfx.DrawString("Growth", headingFont, XBrushes.Black, 
            new XRect(margin + 2 * columnWidth, yPosition, columnWidth, 25), 
            XStringFormats.Center);

        // Table data
        string[,] data = {
            { "January", "$50,000", "+12%" },
            { "February", "$55,000", "+10%" },
            { "March", "$60,000", "+9%" }
        };

        yPosition += 25;
        for (int i = 0; i < 3; i++)
        {
            // Alternate row colors
            if (i % 2 == 0)
            {
                gfx.DrawRectangle(XBrushes.WhiteSmoke, margin, yPosition, page.Width - 2 * margin, 20);
            }

            for (int j = 0; j < 3; j++)
            {
                gfx.DrawString(data[i, j], normalFont, XBrushes.Black,
                    new XRect(margin + j * columnWidth, yPosition, columnWidth, 20),
                    XStringFormats.Center);
            }
            yPosition += 20;
        }

        // Draw a simple line chart (very basic implementation)
        yPosition += 40;
        gfx.DrawString("Revenue Trend", headingFont, XBrushes.Black,
            new XRect(margin, yPosition, page.Width - 2 * margin, 25),
            XStringFormats.TopLeft);

        // Chart area
        yPosition += 30;
        double chartHeight = 150;
        double chartWidth = page.Width - 2 * margin;

        // Draw axes
        gfx.DrawLine(XPens.Black, margin, yPosition + chartHeight, margin + chartWidth, yPosition + chartHeight);
        gfx.DrawLine(XPens.Black, margin, yPosition, margin, yPosition + chartHeight);

        // Plot points (simplified)
        double[] revenues = { 50000, 55000, 60000 };
        double maxRevenue = 65000;
        double xStep = chartWidth / 3;

        for (int i = 0; i < revenues.Length; i++)
        {
            double x = margin + (i + 0.5) * xStep;
            double y = yPosition + chartHeight - (revenues[i] / maxRevenue * chartHeight);

            // Draw point
            gfx.DrawEllipse(XBrushes.Blue, x - 3, y - 3, 6, 6);

            // Draw connecting lines
            if (i > 0)
            {
                double prevX = margin + (i - 0.5) * xStep;
                double prevY = yPosition + chartHeight - (revenues[i - 1] / maxRevenue * chartHeight);
                gfx.DrawLine(new XPen(XColors.Blue, 2), prevX, prevY, x, y);
            }

            // Labels
            gfx.DrawString($"${revenues[i]:N0}", normalFont, XBrushes.Black,
                new XRect(x - 30, y - 20, 60, 15),
                XStringFormats.TopCenter);
        }

        // Save the document
        document.Save("pdfsharp-sales-report.pdf");
        Console.WriteLine("PDF created with PDFSharpCore");
    }
}
using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf;
using System;

class Program
{
    static void Main()
    {
        // Create a new PDF document
        var document = new PdfDocument();
        document.Info.Title = "Sales Report Q1 2024";
        document.Info.Author = "Sales Department";

        // Add a page
        var page = document.AddPage();
        page.Size = PdfSharpCore.PageSize.A4;

        // Create graphics object for drawing
        var gfx = XGraphics.FromPdfPage(page);

        // Define fonts
        var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
        var headingFont = new XFont("Arial", 14, XFontStyle.Bold);
        var normalFont = new XFont("Arial", 11, XFontStyle.Regular);

        // Draw title with gradient-like effect (manual implementation)
        var titleBrush = new XLinearGradientBrush(
            new XPoint(0, 0), 
            new XPoint(page.Width, 0),
            XColors.DarkBlue, 
            XColors.Purple
        );
        gfx.DrawRectangle(titleBrush, 0, 0, page.Width, 80);
        gfx.DrawString("2024 Sales Performance Report", 
            titleFont, XBrushes.White,
            new XRect(0, 20, page.Width, 40),
            XStringFormats.TopCenter);

        // Draw table manually
        double yPosition = 120;
        double margin = 50;
        double columnWidth = (page.Width - 2 * margin) / 3;

        // Table header
        gfx.DrawRectangle(XBrushes.LightGray, margin, yPosition, page.Width - 2 * margin, 25);
        gfx.DrawString("Month", headingFont, XBrushes.Black, 
            new XRect(margin, yPosition, columnWidth, 25), 
            XStringFormats.Center);
        gfx.DrawString("Revenue", headingFont, XBrushes.Black, 
            new XRect(margin + columnWidth, yPosition, columnWidth, 25), 
            XStringFormats.Center);
        gfx.DrawString("Growth", headingFont, XBrushes.Black, 
            new XRect(margin + 2 * columnWidth, yPosition, columnWidth, 25), 
            XStringFormats.Center);

        // Table data
        string[,] data = {
            { "January", "$50,000", "+12%" },
            { "February", "$55,000", "+10%" },
            { "March", "$60,000", "+9%" }
        };

        yPosition += 25;
        for (int i = 0; i < 3; i++)
        {
            // Alternate row colors
            if (i % 2 == 0)
            {
                gfx.DrawRectangle(XBrushes.WhiteSmoke, margin, yPosition, page.Width - 2 * margin, 20);
            }

            for (int j = 0; j < 3; j++)
            {
                gfx.DrawString(data[i, j], normalFont, XBrushes.Black,
                    new XRect(margin + j * columnWidth, yPosition, columnWidth, 20),
                    XStringFormats.Center);
            }
            yPosition += 20;
        }

        // Draw a simple line chart (very basic implementation)
        yPosition += 40;
        gfx.DrawString("Revenue Trend", headingFont, XBrushes.Black,
            new XRect(margin, yPosition, page.Width - 2 * margin, 25),
            XStringFormats.TopLeft);

        // Chart area
        yPosition += 30;
        double chartHeight = 150;
        double chartWidth = page.Width - 2 * margin;

        // Draw axes
        gfx.DrawLine(XPens.Black, margin, yPosition + chartHeight, margin + chartWidth, yPosition + chartHeight);
        gfx.DrawLine(XPens.Black, margin, yPosition, margin, yPosition + chartHeight);

        // Plot points (simplified)
        double[] revenues = { 50000, 55000, 60000 };
        double maxRevenue = 65000;
        double xStep = chartWidth / 3;

        for (int i = 0; i < revenues.Length; i++)
        {
            double x = margin + (i + 0.5) * xStep;
            double y = yPosition + chartHeight - (revenues[i] / maxRevenue * chartHeight);

            // Draw point
            gfx.DrawEllipse(XBrushes.Blue, x - 3, y - 3, 6, 6);

            // Draw connecting lines
            if (i > 0)
            {
                double prevX = margin + (i - 0.5) * xStep;
                double prevY = yPosition + chartHeight - (revenues[i - 1] / maxRevenue * chartHeight);
                gfx.DrawLine(new XPen(XColors.Blue, 2), prevX, prevY, x, y);
            }

            // Labels
            gfx.DrawString($"${revenues[i]:N0}", normalFont, XBrushes.Black,
                new XRect(x - 30, y - 20, 60, 15),
                XStringFormats.TopCenter);
        }

        // Save the document
        document.Save("pdfsharp-sales-report.pdf");
        Console.WriteLine("PDF created with PDFSharpCore");
    }
}
$vbLabelText   $csharpLabel

ご覧のとおり、PDFSharpCore を使用して中程度に複雑なドキュメントを作成する場合でも、次のものが必要です。

  • すべての要素を手動で配置
  • レイアウトのための複雑な計算
  • HTML または CSS の組み込みサポートはありません
  • チャートとグラフの手動実装
  • 同じ結果を得るのにコードが大幅に増える

PDFシャープコア を使用した HTML から PDF への変換

PDFSharpCore は HTML から PDF への変換をネイティブにサポートしていないため、開発者はサードパーティのライブラリを使用する必要があります。 一般的な選択肢は、PDFSharpCore と HtmlRenderer を組み合わせることです。

using PdfSharpCore.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

var document = new PdfDocument();
string htmlContent = File.ReadAllText("template.html");

// Note: HtmlRenderer has limited CSS support
PdfGenerator.AddPdfPages(document, htmlContent, PdfSharpCore.PageSize.A4);
document.Save("from-html.pdf");
using PdfSharpCore.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

var document = new PdfDocument();
string htmlContent = File.ReadAllText("template.html");

// Note: HtmlRenderer has limited CSS support
PdfGenerator.AddPdfPages(document, htmlContent, PdfSharpCore.PageSize.A4);
document.Save("from-html.pdf");
$vbLabelText   $csharpLabel

ただし、このアプローチには重大な制限があります。

  • CSS3 のサポートが限定的 (互換性は約 70~80%)
  • JavaScript 実行なし
  • 最新のWeb機能の扱いが不十分
  • ブラウザと比較してレンダリングが一貫していない

最新の CSS フレームワークのサポート: Bootstrap とその先

Web コンテンツから PDF を生成する必要があるアプリケーションを開発する場合、Bootstrap と最新の CSS フレームワークのサポートが重要です。 ほとんどの Web アプリケーションでは、一貫したデザインのためにこれらのフレームワークが使用されており、これらのインターフェイスを変更せずに PDF に変換できるため、開発時間が大幅に短縮されます。

IronPDF: フルBootstrapおよびCSSフレームワークサポート

  • Bootstrap 5:完全なフレックスボックスレイアウトエンジン、CSSグリッド、ユーティリティクラス、すべてのコンポーネントシステム
  • Bootstrap 4:フルカードコンポーネント、ナビゲーション、Flexユーティリティ、レスポンシブクラス
  • Tailwind CSS:正確なレンダリングを備えたすべてのユーティリティクラス
  • Foundation:完全なグリッドシステムとコンポーネントライブラリ -最新の CSS3: Flexbox、CSS グリッド、カスタム プロパティ、アニメーション、トランジション、トランスフォーム

現実世界での証明:IronPDFは、 Bootstrap ホームページとすべての公式テンプレートをピクセル単位の精度でレンダリングします。

コード例: プロジェクト進捗ダッシュボード

using IronPdf;

// Set yourIronPDFlicense key
IronPdf.License.LicenseKey = "License-Key goes here";

var renderer = new ChromePdfRenderer();
string bootstrapProgress = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .project-card {
            transition: all 0.3s ease;
            border-left: 4px solid transparent;
        }
        .project-card.active { border-left-color: #0d6efd; }
        .progress-label { font-size: 0.75rem; font-weight: 600; }
    </style>
</head>
<body>
    <div class='container my-5'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <div>
                <h1 class='display-6 mb-1'>Project Portfolio Status</h1>
                <p class='text-muted mb-0'>Q1 2025 Development Pipeline</p>
            </div>
            <div>
                <span class='badge bg-success fs-6'>8 Active Projects</span>
            </div>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-primary mb-2'>72%</div>
                        <h6 class='text-muted text-uppercase mb-0'>Overall Progress</h6>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-success mb-2'>5</div>
                        <h6 class='text-muted text-uppercase mb-0'>On Track</h6>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-warning mb-2'>2</div>
                        <h6 class='text-muted text-uppercase mb-0'>At Risk</h6>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-danger mb-2'>1</div>
                        <h6 class='text-muted text-uppercase mb-0'>Delayed</h6>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm mb-4'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Active Projects</h5>
            </div>
            <div class='card-body p-0'>
                <div class='list-group list-group-flush'>
                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>E-Commerce Platform Redesign</h6>
                                <small class='text-muted'>Lead: Sarah Chen | Due: Apr 15, 2025</small>
                            </div>
                            <span class='badge bg-success'>On Track</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-primary'>85%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-primary' role='progressbar' style='width: 85%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>Frontend: 90%</span>
                            <span class='badge bg-light text-dark'>Backend: 80%</span>
                            <span class='badge bg-light text-dark'>Testing: 85%</span>
                        </div>
                    </div>

                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>Mobile App Integration</h6>
                                <small class='text-muted'>Lead: Marcus Johnson | Due: Mar 30, 2025</small>
                            </div>
                            <span class='badge bg-success'>On Track</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-success'>92%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-success' role='progressbar' style='width: 92%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>iOS: 95%</span>
                            <span class='badge bg-light text-dark'>Android: 90%</span>
                            <span class='badge bg-light text-dark'>API: 100%</span>
                        </div>
                    </div>

                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>Customer Analytics Dashboard</h6>
                                <small class='text-muted'>Lead: Emily Rodriguez | Due: Apr 22, 2025</small>
                            </div>
                            <span class='badge bg-warning text-dark'>At Risk</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-warning'>58%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-warning' role='progressbar' style='width: 58%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>Data Pipeline: 65%</span>
                            <span class='badge bg-light text-dark'>UI: 50%</span>
                            <span class='badge bg-light text-dark'>Reports: 45%</span>
                        </div>
                        <div class='alert alert-warning mt-2 mb-0 py-2'>
                            <small><strong>Issue:</strong> Resource constraints affecting timeline. Review scheduled for next week.</small>
                        </div>
                    </div>

                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>Security Infrastructure Upgrade</h6>
                                <small class='text-muted'>Lead: David Kim | Due: Mar 25, 2025</small>
                            </div>
                            <span class='badge bg-danger'>Delayed</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-danger'>42%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-danger' role='progressbar' style='width: 42%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>Authentication: 60%</span>
                            <span class='badge bg-light text-dark'>暗号化: 40%</span>
                            <span class='badge bg-light text-dark'>Audit Logs: 25%</span>
                        </div>
                        <div class='alert alert-danger mt-2 mb-0 py-2'>
                            <small><strong>Critical:</strong> 7 days behind schedule. Additional resources allocated. Daily standup required.</small>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-6'>
                <div class='card shadow-sm'>
                    <div class='card-header bg-white'>
                        <h5 class='mb-0'>Sprint Velocity</h5>
                    </div>
                    <div class='card-body'>
                        <div class='mb-3'>
                            <div class='d-flex justify-content-between mb-1'>
                                <span class='text-muted'>Current Sprint</span>
                                <strong>42 Story Points</strong>
                            </div>
                            <div class='progress' style='height: 20px;'>
                                <div class='progress-bar bg-success' style='width: 84%'>84% Complete</div>
                            </div>
                        </div>
                        <div class='mb-3'>
                            <div class='d-flex justify-content-between mb-1'>
                                <span class='text-muted'>Previous Sprint</span>
                                <strong>38 Story Points</strong>
                            </div>
                            <div class='progress' style='height: 20px;'>
                                <div class='progress-bar bg-info' style='width: 100%'>Completed</div>
                            </div>
                        </div>
                        <div class='mb-0'>
                            <div class='d-flex justify-content-between mb-1'>
                                <span class='text-muted'>Average Velocity</span>
                                <strong>40 Story Points</strong>
                            </div>
                            <div class='progress' style='height: 20px;'>
                                <div class='progress-bar bg-primary' style='width: 100%'>Baseline</div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col-md-6'>
                <div class='card shadow-sm'>
                    <div class='card-header bg-white'>
                        <h5 class='mb-0'>Team Capacity</h5>
                    </div>
                    <div class='card-body'>
                        <div class='d-flex justify-content-between align-items-center mb-3'>
                            <div>
                                <h6 class='mb-0'>Frontend Team</h6>
                                <small class='text-muted'>6 developers</small>
                            </div>
                            <span class='badge bg-success'>92% Utilized</span>
                        </div>
                        <div class='d-flex justify-content-between align-items-center mb-3'>
                            <div>
                                <h6 class='mb-0'>Backend Team</h6>
                                <small class='text-muted'>5 developers</small>
                            </div>
                            <span class='badge bg-success'>88% Utilized</span>
                        </div>
                        <div class='d-flex justify-content-between align-items-center mb-3'>
                            <div>
                                <h6 class='mb-0'>QA Team</h6>
                                <small class='text-muted'>3 testers</small>
                            </div>
                            <span class='badge bg-warning text-dark'>105% Utilized</span>
                        </div>
                        <div class='d-flex justify-content-between align-items-center mb-0'>
                            <div>
                                <h6 class='mb-0'>DevOps Team</h6>
                                <small class='text-muted'>2 engineers</small>
                            </div>
                            <span class='badge bg-danger'>110% Utilized</span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapProgress);
pdf.SaveAs("project-progress.pdf");
using IronPdf;

// Set yourIronPDFlicense key
IronPdf.License.LicenseKey = "License-Key goes here";

var renderer = new ChromePdfRenderer();
string bootstrapProgress = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
    <style>
        .project-card {
            transition: all 0.3s ease;
            border-left: 4px solid transparent;
        }
        .project-card.active { border-left-color: #0d6efd; }
        .progress-label { font-size: 0.75rem; font-weight: 600; }
    </style>
</head>
<body>
    <div class='container my-5'>
        <div class='d-flex justify-content-between align-items-center mb-4'>
            <div>
                <h1 class='display-6 mb-1'>Project Portfolio Status</h1>
                <p class='text-muted mb-0'>Q1 2025 Development Pipeline</p>
            </div>
            <div>
                <span class='badge bg-success fs-6'>8 Active Projects</span>
            </div>
        </div>

        <div class='row g-4 mb-4'>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-primary mb-2'>72%</div>
                        <h6 class='text-muted text-uppercase mb-0'>Overall Progress</h6>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-success mb-2'>5</div>
                        <h6 class='text-muted text-uppercase mb-0'>On Track</h6>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-warning mb-2'>2</div>
                        <h6 class='text-muted text-uppercase mb-0'>At Risk</h6>
                    </div>
                </div>
            </div>
            <div class='col-md-3'>
                <div class='card text-center shadow-sm'>
                    <div class='card-body'>
                        <div class='display-4 text-danger mb-2'>1</div>
                        <h6 class='text-muted text-uppercase mb-0'>Delayed</h6>
                    </div>
                </div>
            </div>
        </div>

        <div class='card shadow-sm mb-4'>
            <div class='card-header bg-primary text-white'>
                <h5 class='mb-0'>Active Projects</h5>
            </div>
            <div class='card-body p-0'>
                <div class='list-group list-group-flush'>
                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>E-Commerce Platform Redesign</h6>
                                <small class='text-muted'>Lead: Sarah Chen | Due: Apr 15, 2025</small>
                            </div>
                            <span class='badge bg-success'>On Track</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-primary'>85%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-primary' role='progressbar' style='width: 85%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>Frontend: 90%</span>
                            <span class='badge bg-light text-dark'>Backend: 80%</span>
                            <span class='badge bg-light text-dark'>Testing: 85%</span>
                        </div>
                    </div>

                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>Mobile App Integration</h6>
                                <small class='text-muted'>Lead: Marcus Johnson | Due: Mar 30, 2025</small>
                            </div>
                            <span class='badge bg-success'>On Track</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-success'>92%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-success' role='progressbar' style='width: 92%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>iOS: 95%</span>
                            <span class='badge bg-light text-dark'>Android: 90%</span>
                            <span class='badge bg-light text-dark'>API: 100%</span>
                        </div>
                    </div>

                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>Customer Analytics Dashboard</h6>
                                <small class='text-muted'>Lead: Emily Rodriguez | Due: Apr 22, 2025</small>
                            </div>
                            <span class='badge bg-warning text-dark'>At Risk</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-warning'>58%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-warning' role='progressbar' style='width: 58%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>Data Pipeline: 65%</span>
                            <span class='badge bg-light text-dark'>UI: 50%</span>
                            <span class='badge bg-light text-dark'>Reports: 45%</span>
                        </div>
                        <div class='alert alert-warning mt-2 mb-0 py-2'>
                            <small><strong>Issue:</strong> Resource constraints affecting timeline. Review scheduled for next week.</small>
                        </div>
                    </div>

                    <div class='list-group-item'>
                        <div class='d-flex justify-content-between align-items-start mb-3'>
                            <div>
                                <h6 class='mb-1'>Security Infrastructure Upgrade</h6>
                                <small class='text-muted'>Lead: David Kim | Due: Mar 25, 2025</small>
                            </div>
                            <span class='badge bg-danger'>Delayed</span>
                        </div>
                        <div class='mb-2'>
                            <div class='d-flex justify-content-between align-items-center mb-1'>
                                <span class='progress-label text-muted'>COMPLETION</span>
                                <span class='progress-label text-danger'>42%</span>
                            </div>
                            <div class='progress' style='height: 8px;'>
                                <div class='progress-bar bg-danger' role='progressbar' style='width: 42%'></div>
                            </div>
                        </div>
                        <div class='d-flex gap-2 flex-wrap'>
                            <span class='badge bg-light text-dark'>Authentication: 60%</span>
                            <span class='badge bg-light text-dark'>暗号化: 40%</span>
                            <span class='badge bg-light text-dark'>Audit Logs: 25%</span>
                        </div>
                        <div class='alert alert-danger mt-2 mb-0 py-2'>
                            <small><strong>Critical:</strong> 7 days behind schedule. Additional resources allocated. Daily standup required.</small>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class='row g-4'>
            <div class='col-md-6'>
                <div class='card shadow-sm'>
                    <div class='card-header bg-white'>
                        <h5 class='mb-0'>Sprint Velocity</h5>
                    </div>
                    <div class='card-body'>
                        <div class='mb-3'>
                            <div class='d-flex justify-content-between mb-1'>
                                <span class='text-muted'>Current Sprint</span>
                                <strong>42 Story Points</strong>
                            </div>
                            <div class='progress' style='height: 20px;'>
                                <div class='progress-bar bg-success' style='width: 84%'>84% Complete</div>
                            </div>
                        </div>
                        <div class='mb-3'>
                            <div class='d-flex justify-content-between mb-1'>
                                <span class='text-muted'>Previous Sprint</span>
                                <strong>38 Story Points</strong>
                            </div>
                            <div class='progress' style='height: 20px;'>
                                <div class='progress-bar bg-info' style='width: 100%'>Completed</div>
                            </div>
                        </div>
                        <div class='mb-0'>
                            <div class='d-flex justify-content-between mb-1'>
                                <span class='text-muted'>Average Velocity</span>
                                <strong>40 Story Points</strong>
                            </div>
                            <div class='progress' style='height: 20px;'>
                                <div class='progress-bar bg-primary' style='width: 100%'>Baseline</div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class='col-md-6'>
                <div class='card shadow-sm'>
                    <div class='card-header bg-white'>
                        <h5 class='mb-0'>Team Capacity</h5>
                    </div>
                    <div class='card-body'>
                        <div class='d-flex justify-content-between align-items-center mb-3'>
                            <div>
                                <h6 class='mb-0'>Frontend Team</h6>
                                <small class='text-muted'>6 developers</small>
                            </div>
                            <span class='badge bg-success'>92% Utilized</span>
                        </div>
                        <div class='d-flex justify-content-between align-items-center mb-3'>
                            <div>
                                <h6 class='mb-0'>Backend Team</h6>
                                <small class='text-muted'>5 developers</small>
                            </div>
                            <span class='badge bg-success'>88% Utilized</span>
                        </div>
                        <div class='d-flex justify-content-between align-items-center mb-3'>
                            <div>
                                <h6 class='mb-0'>QA Team</h6>
                                <small class='text-muted'>3 testers</small>
                            </div>
                            <span class='badge bg-warning text-dark'>105% Utilized</span>
                        </div>
                        <div class='d-flex justify-content-between align-items-center mb-0'>
                            <div>
                                <h6 class='mb-0'>DevOps Team</h6>
                                <small class='text-muted'>2 engineers</small>
                            </div>
                            <span class='badge bg-danger'>110% Utilized</span>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapProgress);
pdf.SaveAs("project-progress.pdf");
$vbLabelText   $csharpLabel

出力: Bootstrap 5 のフレックスボックスベースのレイアウト、進行状況バー コンポーネント、バッジ ユーティリティ、レスポンシブ カード システム、アラート コンポーネントを備えたプロフェッショナルなプロジェクト管理 PDF。すべてが完璧な配置、間隔、色の精度でレンダリングされます。

PDFSharpCore: ネイティブ HTML サポートなし

PDFSharpCore にはネイティブの HTML レンダリング エンジンがありません。 このライブラリは、低レベルの PDF 操作と描画操作専用に設計されています。

  • Bootstrap をサポートしていません: HTML/CSS フレームワークをまったく処理できません -フレックスボックスやCSSグリッドはありません。CSSレンダリング機能は一切ありません。 -手動構築のみ:座標ベースの API を使用してテキスト、図形、画像を描画する必要があります -必要な外部ツール:サードパーティの HTML レンダラーまたは変換サービスを使用する必要があります

HtmlRenderer 統合 (サードパーティ) は、CSS3 互換性が約 70 ~ 80%、フレックスボックス、CSS グリッド、最新のフレームワークのサポートがないなど、厳しい制限付きの基本的な HTML サポートのみを提供します。

開発への影響:チームは HTML ベースのワークフローを完全に放棄するか、複数のツール (PDFSharpCore + 外部 HTML レンダラー) を統合する必要があり、複雑さ、メンテナンスの負担、およびライブラリ バージョン間の互換性の問題が発生する可能性があります。

Bootstrapフレームワークの互換性およびCSS3レンダリング機能の詳細については、Bootstrap & Flexbox CSSガイドをご覧ください。

高度な機能比較

テキスト抽出

最も一般的な PDF 操作の 1 つは、インデックス作成、分析、または変換のためにテキストを抽出することです。 両方のライブラリがこのタスクを処理する方法は次のとおりです。

IronPDFテキスト抽出

IronPDF は、シンプルな API で強力なテキスト抽出機能を提供します。

using IronPdf;

// Extract all text from a PDF
var pdf = PdfDocument.FromFile("report.pdf");
string allText = pdf.ExtractAllText();

// Extract text from specific pages
for (int i = 0; i < pdf.PageCount; i++)
{
    string pageText = pdf.ExtractTextFromPage(i);
    Console.WriteLine($"Page {i + 1}: {pageText.Substring(0, Math.Min(100, pageText.Length))}...");
}

// Extract text from a specific region
var pageIndex = 0;
var region = new Rectangle(50, 50, 200, 100); // x, y, width, height
string regionText = pdf.ExtractTextFromPage(pageIndex, region);
using IronPdf;

// Extract all text from a PDF
var pdf = PdfDocument.FromFile("report.pdf");
string allText = pdf.ExtractAllText();

// Extract text from specific pages
for (int i = 0; i < pdf.PageCount; i++)
{
    string pageText = pdf.ExtractTextFromPage(i);
    Console.WriteLine($"Page {i + 1}: {pageText.Substring(0, Math.Min(100, pageText.Length))}...");
}

// Extract text from a specific region
var pageIndex = 0;
var region = new Rectangle(50, 50, 200, 100); // x, y, width, height
string regionText = pdf.ExtractTextFromPage(pageIndex, region);
$vbLabelText   $csharpLabel

PDFシャープコア テキスト抽出

PDFSharpCore にはネイティブ テキスト抽出機能が制限されています。 比較記事でも指摘されているように、断片的または不完全な結果が生成されることがよくあります。

// PDFシャープコア doesn't have reliable text extraction
// This is a significant limitation for many use cases
// PDFシャープコア doesn't have reliable text extraction
// This is a significant limitation for many use cases
$vbLabelText   $csharpLabel

透かし

PDF に透かしを入れることは、ブランディングとドキュメントのセキュリティにとって不可欠です。

IronPDF透かし

using IronPdf;

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

// HTML-based watermark with full CSS support
string watermarkHtml = @"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.3);
        transform: rotate(-45deg);
        text-align: center;
        font-weight: bold;
    '>
        CONFIDENTIAL
    </div>";

pdf.ApplyWatermark(watermarkHtml, 50, VerticalAlignment.Middle, HorizontalAlignment.Center);

// Image watermark
pdf.ApplyWatermark("logo.png", 30, VerticalAlignment.Bottom, HorizontalAlignment.Right);

pdf.SaveAs("watermarked.pdf");
using IronPdf;

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

// HTML-based watermark with full CSS support
string watermarkHtml = @"
    <div style='
        font-size: 48px;
        color: rgba(255, 0, 0, 0.3);
        transform: rotate(-45deg);
        text-align: center;
        font-weight: bold;
    '>
        CONFIDENTIAL
    </div>";

pdf.ApplyWatermark(watermarkHtml, 50, VerticalAlignment.Middle, HorizontalAlignment.Center);

// Image watermark
pdf.ApplyWatermark("logo.png", 30, VerticalAlignment.Bottom, HorizontalAlignment.Right);

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

PDFシャープコア 透かし

using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf;
using PdfSharpCore.Pdf.IO;

var document = PdfReader.Open("document.pdf", PdfDocumentOpenMode.Modify);

foreach (var page in document.Pages)
{
    var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append);

    // Create watermark font
    var font = new XFont("Arial", 48);

    // Calculate rotation
    gfx.TranslateTransform(page.Width / 2, page.Height / 2);
    gfx.RotateTransform(-45);

    // Draw watermark
    var size = gfx.MeasureString("CONFIDENTIAL", font);
    gfx.DrawString("CONFIDENTIAL", font, 
        new XSolidBrush(XColor.FromArgb(128, 255, 0, 0)),
        new XRect(-size.Width / 2, -size.Height / 2, size.Width, size.Height),
        XStringFormats.Center);
}

document.Save("watermarked-pdfsharp.pdf");
using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf;
using PdfSharpCore.Pdf.IO;

var document = PdfReader.Open("document.pdf", PdfDocumentOpenMode.Modify);

foreach (var page in document.Pages)
{
    var gfx = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append);

    // Create watermark font
    var font = new XFont("Arial", 48);

    // Calculate rotation
    gfx.TranslateTransform(page.Width / 2, page.Height / 2);
    gfx.RotateTransform(-45);

    // Draw watermark
    var size = gfx.MeasureString("CONFIDENTIAL", font);
    gfx.DrawString("CONFIDENTIAL", font, 
        new XSolidBrush(XColor.FromArgb(128, 255, 0, 0)),
        new XRect(-size.Width / 2, -size.Height / 2, size.Width, size.Height),
        XStringFormats.Center);
}

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

デジタル署名

デジタル署名により、文書の信頼性と整合性が保証されます。

IronPDFデジタル署名

using IronPdf;
using IronPdf.Signing;

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

// Create a signature with certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "legal@company.com",
    SigningLocation = "New York, NY",
    SigningReason = "Contract Approval"
};

// Add visual signature
var signatureImage = new PdfSignature("certificate.pfx", "password")
{
    SignatureImage = new PdfSignatureImage("signature.png", 0, 0, 200, 100)
};

// Apply signature to the last page
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
using IronPdf;
using IronPdf.Signing;

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

// Create a signature with certificate
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "legal@company.com",
    SigningLocation = "New York, NY",
    SigningReason = "Contract Approval"
};

// Add visual signature
var signatureImage = new PdfSignature("certificate.pfx", "password")
{
    SignatureImage = new PdfSignatureImage("signature.png", 0, 0, 200, 100)
};

// Apply signature to the last page
pdf.Sign(signature);
pdf.SaveAs("signed-contract.pdf");
$vbLabelText   $csharpLabel

PDFシャープコア デジタル署名

PDFSharpCore はデジタル署名をネイティブにサポートしていないため、ドキュメントのセキュリティを必要とするビジネス アプリケーションにとっては大きな制限となります。

フォーム処理

インタラクティブなドキュメントでは、 PDF フォームの操作が重要です。

IronPDFフォーム処理

using IronPdf;

// Create a form from HTML
var html = @"
    <form>
        <label>Name: <input type='text' name='fullName' required></label><br>
        <label>Email: <input type='email' name='email' required></label><br>
        <label>Subscribe: <input type='checkbox' name='subscribe' value='yes'></label><br>
        <label>
            Plan:
            <select name='plan'>
                <option value='basic'>Basic</option>
                <option value='pro'>Professional</option>
                <option value='enterprise'>Enterprise</option>
            </select>
        </label>
    </form>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

// Fill existing form
var filledPdf = PdfDocument.FromFile("application-form.pdf");
filledPdf.Form.FindFormField("fullName").Value = "John Doe";
filledPdf.Form.FindFormField("email").Value = "john@example.com";
filledPdf.Form.FindFormField("subscribe").Value = "yes";

filledPdf.SaveAs("completed-application.pdf");
using IronPdf;

// Create a form from HTML
var html = @"
    <form>
        <label>Name: <input type='text' name='fullName' required></label><br>
        <label>Email: <input type='email' name='email' required></label><br>
        <label>Subscribe: <input type='checkbox' name='subscribe' value='yes'></label><br>
        <label>
            Plan:
            <select name='plan'>
                <option value='basic'>Basic</option>
                <option value='pro'>Professional</option>
                <option value='enterprise'>Enterprise</option>
            </select>
        </label>
    </form>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

// Fill existing form
var filledPdf = PdfDocument.FromFile("application-form.pdf");
filledPdf.Form.FindFormField("fullName").Value = "John Doe";
filledPdf.Form.FindFormField("email").Value = "john@example.com";
filledPdf.Form.FindFormField("subscribe").Value = "yes";

filledPdf.SaveAs("completed-application.pdf");
$vbLabelText   $csharpLabel

パフォーマンスベンチマーク

広範なテストとコミュニティのフィードバックに基づいたパフォーマンス比較は次のとおりです。

HTMLからPDFへのレンダリング

テストケースIronPDFPDFSharpCore(HtmlRenderer付き)
シンプルなHTML(1ページ)0.8-1.2s0.3-0.5s
CSS3 を使用した複雑な HTML1.5~2秒頻繁に失敗したり、正しくレンダリングされない
JavaScript チャート2~3秒サポートされていません
100ページの報告書15~20代45~60代
メモリ使用量150~200MB80~120MB

主要なパフォーマンスの洞察

  1. IronPDF の優れた点:

    • 完全なブラウザ互換性を備えた複雑な HTML レンダリング
    • バッチ操作の並列処理
    • さまざまなコンテンツタイプにわたって一貫したパフォーマンス
    • スケーラビリティ向上のための非同期操作
  2. PDFSharpCore は次の場合に優れたパフォーマンスを発揮します。
    • シンプルなプログラムによるPDF作成
    • メモリフットプリントの低減
    • 基本的なドキュメントの変更

実際のパフォーマンス例

//IronPDF- Batch processing with parallel execution
using IronPdf;
using System.Threading.Tasks;

class BatchProcessor
{
    public static async Task ProcessInvoicesAsync(List<string> htmlInvoices)
    {
        var renderer = new ChromePdfRenderer();

        // Process multiple PDFs in parallel
        var tasks = htmlInvoices.Select(async (html, index) =>
        {
            var pdf = await renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"invoice-{index}.pdf");
        });

        await Task.WhenAll(tasks);
    }
}
//IronPDF- Batch processing with parallel execution
using IronPdf;
using System.Threading.Tasks;

class BatchProcessor
{
    public static async Task ProcessInvoicesAsync(List<string> htmlInvoices)
    {
        var renderer = new ChromePdfRenderer();

        // Process multiple PDFs in parallel
        var tasks = htmlInvoices.Select(async (html, index) =>
        {
            var pdf = await renderer.RenderHtmlAsPdfAsync(html);
            await pdf.SaveAsAsync($"invoice-{index}.pdf");
        });

        await Task.WhenAll(tasks);
    }
}
$vbLabelText   $csharpLabel

実際の利用例

IronPDFを選ぶとき

IronPDF は次の場合に最適です:

  1. Webアプリケーションの統合
    • 動的なWebコンテンツをPDFに変換する
    • Webダッシュボードからのレポート生成
    • HTMLテンプレートから請求書を作成する

2.エンタープライズドキュメント管理

  • デジタル署名を使用したドキュメントワークフローの実装
  • 機密データ用の安全で暗号化されたPDFの作成
  • 大量の文書をバッチ処理する
  1. SaaSアプリケーション
    • マルチテナントPDF生成
    • Azure/AWS 上のクラウドネイティブ展開
    • 高性能な非同期処理

4.複雑なレポート

  • 図表とグラフ付きの財務諸表
  • リッチメディアを使ったマーケティング資料
  • コードハイライト付きの技術ドキュメント

PDFSharpCoreを選ぶべきタイミング

PDFSharpCoreは次の場合に適しています:

1.予算重視のプロジェクト

  • ライセンス予算のないオープンソースプロジェクト
  • シンプルなPDF生成のニーズ
  • 学術的または個人的なプロジェクト

2.基本的なPDF操作

  • シンプルなテキストベースのPDFの作成
  • 基本的なドキュメントの結合
  • シンプルなグラフィックや図形を追加する

3.軽量アプリケーション

  • メモリ制約のある組み込みシステム
  • シンプルなコマンドラインツール
  • 依存関係が最小限のマイクロサービス

ライセンスと価格

IronPDFライセンス

IronPDF は柔軟なライセンス オプションを提供します(価格は 2025 年時点)。

  • Lite ライセンス: $799 (開発者 1 人、場所 1 つ、プロジェクト 1 つ) -プラスライセンス: $1,199 (開発者 3 人、場所 3 つ、プロジェクト 3 つ) -プロフェッショナルライセンス: $2,399 (開発者 10 人、拠点 10 か所、プロジェクト 10 件) -無料トライアル 30日間の全機能トライアル

追加特典:

  • 永続ライセンス(1回限りの購入)
  • ロイヤリティフリーの再配布が可能
  • 24時間365日のエンジニアリングサポートが含まれています
  • 1年間の無料アップデート
  • Iron Suiteバンドルでさらにお得に

PDFSharpCoreライセンス

PDFSharpCore は MIT ライセンスの下で完全に無料です。

  • ライセンス費用なし
  • 商用利用に制限はありません
  • コミュニティサポートのみ
  • アップデートやバグ修正は保証されない

開発者エクスペリエンス

ドキュメントとリソース

IronPDF は以下を提供します:

-包括的なドキュメント

PDFSharpCore は以下を提供します:

  • 基本的なGitHubドキュメント
  • コミュニティの例
  • 限定的な公式チュートリアル

サポート比較

サポートタイプIronPDFPDFシャープコア
プロフェッショナルサポート24時間/5日込みなし
応答時間24~48時間コミュニティ依存
直接エンジニアリングアクセスはいなし
バグ修正保証はいなし

結論

IronPDF と PDFシャープコア はどちらも .NET PDF エコシステムで重要な役割を果たしますが、対象とするニーズとユースケースは異なります。

次の場合はIronPDFを選択してください:

  • CSS3とJavaScriptを完全にサポートした堅牢なHTMLからPDFへの変換が必要です
  • プロジェクトにはデジタル署名、暗号化、フォーム処理などの高度な機能が必要です
  • エンタープライズまたは商用アプリケーションを構築している
  • 包括的なドキュメントと専門的なサポートを重視します
  • パフォーマンスと信頼性が重要 -クラウド対応の導入オプションが必要

次の場合は PDFシャープコア を選択してください:

  • 予算が限られているプロジェクトやオープンソースプロジェクトに取り組んでいる
  • PDF のニーズはシンプルで、HTML レンダリングは必要ありません
  • PDF 構築よりも手動での制御を好む
  • メモリフットプリントは重要な懸念事項です
  • コミュニティのサポートに満足している

IronPDF の PDF 生成に対する最新のアプローチは、その広範な機能セットと優れたサポートと組み合わされており、ほとんどのプロフェッショナル アプリケーションにとって最適な選択肢となっています。 ライセンス投資は必要ですが、開発時間の節約と信頼性の向上により、商用プロジェクトのコストが正当化されることがよくあります。

違いを体験する準備はできましたか? IronPDF の 30 日間無料トライアルを開始して、PDF 生成ワークフローがどのように変化するかを確認してください。 包括的なドキュメント、応答性の高いサポート、機能豊富な API を備えたIronPDFは、開発者が最小限の労力でプロフェッショナルな PDF を作成できるようにします。

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

BRACKET-i-OPEN--PDFSharpCoreは各所有者の登録商標です。 このサイトは PDFシャープコア と提携、承認、または後援されていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

C# で HTML を PDF に変換するにはどうすればいいですか?

IronPDFのRenderHtmlAsPdfメソッドを使用して、HTML文字列をPDFに変換できます。このメソッドはフルCSS3およびJavaScriptの実行をサポートし、高忠実度のレンダリングを保証します。

IronPDFとPDFSharpCoreの主な違いは何ですか?

IronPDFはHTMLからPDFへの変換、デジタル署名、クラウドプラットフォームの最適化などの高度な機能を備えた商用ライブラリです。PDFSharpCoreはオープンソースで、手動の描画コマンドによる基本的なPDF作成に重点を置いており、ネイティブのHTMLからPDFへの変換を欠いています。

これらのライブラリを使用してPDFからテキストを抽出できますか?

IronPDFはExtractAllText()ExtractTextFromPage()のようなメソッドを使用して、ドキュメント構造を維持しながら強力なテキスト抽出機能を提供します。PDFSharpCoreは限定的なテキスト抽出機能を持ち、多くの場合、断片的な出力を生じます。

C#でPDFにデジタル署名を追加する最良の方法は何ですか?

IronPDFは、視覚的な署名や証明書の使用を含む包括的なデジタル署名サポートを提供します。PDFに署名するためのカスタマイズ可能なオプションを提供し、安全な文書ワークフローに適しています。

HTMLレンダリング速度に関して、これらのライブラリはどのように動作しますか?

IronPDFは通常、複雑なHTMLを0.8〜2秒程度でPDFにレンダリングし、完全なCSS3およびJavaScriptをサポートします。PDFSharpCoreは単純なプログラム的PDF作成には速いですが、現代のWeb技術をサポートしていないため、レンダリング能力が影響を受けます。

PDFライブラリを評価するための試用版はありますか?

IronPDFは30日間の無料試用版を提供しており、HTMLからPDFへの変換を含むすべての機能を探ることができます。PDFSharpCoreはMITライセンスの下で無料で提供され、基本的な機能を提供し、試用期間はありません。

どのライブラリがPDFフォームの扱いに適していますか?

IronPDFはHTMLからのフォーム作成やそのデータ抽出の能力でフォーム処理に優れています。PDFSharpCoreは基本的なフォーム処理をサポートしますが、手動のフィールド作成が必要で、同じレベルの自動化は提供していません。

これらのライブラリはクロスプラットフォーム開発をどのようにサポートしますか?

IronPDFとPDFSharpCoreはどちらもWindows、Linux、macOSをサポートします。IronPDFはAzureやAWSのようなクラウドプラットフォームに最適化された構成を備えており、PDFSharpCoreはクラウド環境で追加の設定が必要かもしれません。

これらのライブラリとどのようなサポートを期待できますか?

IronPDFは24-48時間の応答時間と詳細なドキュメントで24/5のプロフェッショナルエンジニアリングサポートを提供します。PDFSharpCoreはフォーラムやGitHubを通じたコミュニティサポートに依存し、応答時間の保証はありません。

これらのライブラリは、複雑なPDF操作のパフォーマンスをどのように処理しますか?

IronPDFは複雑なHTMLレンダリングの処理に優れており、バッチ操作のための並列処理をサポートし、優れたスループットを提供します。PDFSharpCoreは単純なドキュメントのメモリ効率において利点を示しますが、高度なレンダリング能力に欠けます。

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

Jacob Mellorは、Iron Softwareの最高技術責任者であり、C# PDF技術の開拓者としてその先進的な役割を担っています。Iron Softwareのコアコードベースのオリジナルデベロッパーである彼は、創業時から製品のアーキテクチャを形作り、CEOのCameron Rimingtonと協力してNASA、Tesla、全世界の政府機関を含む50人以上の会社に成長させました。

Jacobは、1998年から2001年にかけてマンチェスター大学で土木工学の第一級優等学士号(BEng)を取得しました。1999年にロンドンで最初のソフトウェアビジネスを立ち上げ、2005年には最初の.NETコンポーネントを作成し、Microsoftエコシステムにおける複雑な問題の解決を専門にしました。

彼の旗艦製品であるIronPDFとIronSuite .NETライブラリは、全世界で3000万以上のNuGetインストールを達成しており、彼の基本コードが世界中で使用されている開発者ツールを支えています。商業的な経験を25年間積み、コードを書くことを41年間続けるJacobは、企業向けのC#、Java、およびPython PDF技術の革新を推進し続け、次世代の技術リーダーを指導しています。