フッターコンテンツにスキップ
製品比較
IronPDF vs iText7 における HTML から PDF への比較

IronPDFとiText7の比較

PDFを操作するための適切でシンプルなツールは、PDFドキュメントの作成と編集に関わる多くの作業とプロセスを合理化することができます。 .NETエコシステムには、IronPDFとiTextという2つの人気のあるライブラリがあり、Adobeに依存せずにPDFを生成することができます。 それぞれ、作成、編集、変換など様々な機能を提供していますが、この記事ではこれらのライブラリを次の3つの基準で比較します: 提供される機能、提供されるドキュメントの品質、そして製品を使用するために採用された価格政策。

IronPDFとiTextの概要

IronPDFは、プログラマーがPDFドキュメントを簡単に作成、修正、やり取りすることができる著名な.NET PDFライブラリです。 それは、Core、8、7、6、Frameworkなどの異なる.NET環境で使用でき、多様な開発要件に対して非常に柔軟です。 IronPDFの主な機能は、HTMLからPDFへの変換、PDFのマージ機能、PDFの暗号化、およびデジタル署名の適用など豊富な機能セットにあります。 ドキュメントはユーザーが理解しやすいように書かれており、ライブラリ自体は強力な技術サポートを持っています。

iTextはJavaや.NET (C#)用の最も人気のあるPDFライブラリの一つです。 iText Core 8は、PDFファイルの作成と操作のためのエンタープライズレベルのプログラマブルソリューションを提供します。 iTextは多くの異なる機能をサポートし、オープンソース(AGPL)ライセンスと商用ライセンスの両方でリリースされています。 これは、その多様性のおかげで、デジタルトランスフォーメーションプロジェクトで広範なユースケースに対応できることを意味します。

クロスプラットフォーム互換性

IronPDFとiTextは様々なプラットフォームと互換性があります; それらは様々なシステムと.NETフレームワークに渡ってPDFを処理できます。 以下で各製品のサポートされているフレームワークとプラットフォームを比較します。

IronPDF:

IronPDFサポートプラットフォームの概要は、さまざまなシステムでのシームレスな統合と展開を可能にする、広範なプラットフォームと環境をサポートしています:

  • .NETバージョン:

    • .NET Core (8, 7, 6, 5, 3.1+)
    • .NET Standard (2.0+)
    • .NET Framework (4.6.2+)
  • アプリ環境: IronPDFは、Windows、Linux、Mac、Docker、Azure、AWSを含むアプリ環境で動作します。

  • IDEs: Microsoft Visual Studio、JetBrains Rider、ReSharperなどのIDEで動作します。

  • OSとプロセッサー: Windows、Mac、Linux、x64、x86、ARMなどの異なるOSとプロセッサーをサポートします。

iText

  • .NETバージョン:

    • .NET Core (2.x, 3.x)
    • .NET Framework (4.6.1+)
    • .NET 5+
  • アプリ環境: iTextは、Javaと.NET (C#)の両方をサポートしているため、Windows、Mac、Linux、Dockerを含む様々なアプリ環境をサポートします。

  • OS: Windows、macOS、およびLinuxオペレーティングシステムで動作します。

主な機能比較: IronPDF vs. iText

IronPDFの主な機能一覧、およびiTextの両方がPDFファイルを操作するための多くの機能とツールを提供しています。 次のセクションでは、これらの機能のいくつかを詳しく見ていき、異なるPDF関連のタスクを実行する際に、2つのライブラリがどのように比較されるかを確認します。

IronPDF

  • HTMLからPDFへの変換: HTML、CSS、JavaScript、画像をサポートします。

  • PDFファイルの操作: ドキュメントの分割とマージ、フォーマットを変更、既存のPDF文書の編集。

  • セキュリティ:PDFの暗号化と復号化。

  • 編集: 注釈、ブックマーク、およびアウトラインを追加。

  • テンプレート: ヘッダー、フッター、ページ番号を適用。

  • 透かし: PDFファイルに簡単にテキストと画像の透かしを適用; HTML/CSSを使用して完全にコントロール。

  • PDFスタンプ: IronPDFを使用してPDFドキュメントに画像とテキストをスタンプ。

IronPDFが提供する豊富な機能セットの詳細については、IronPDFの機能ページをご覧ください。

iText

  • PDFの作成: ゼロからPDF文書の作成をサポートします。

  • フォーム: PDFフォームを作成および編集。

  • デジタル署名: PDF文書に署名。

  • 圧縮: PDFファイルサイズを最適化。

  • コンテンツ抽出: PDFからテキストと画像を抽出。

  • オープンソース: AGPLライセンスで利用可能。

  • カスタマイズ性: 高度なユースケースのための高いカスタマイズ性。

IronPDFとiTextのPDF機能の比較

HTMLからPDFへの変換

HTMLコンテンツをIronPDFでPDFに変換するは、多くの異なるオフィスやワークスペースで実行されています。 以下は、IronPDFとiTextがこのプロセスにどのようにアプローチするかのコード例です。

IronPDF

using IronPdf;

// Configure security settings
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS and JavaScript.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
using IronPdf;

// Configure security settings
Installation.EnableWebSecurity = true;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");

// Advanced Example with HTML Assets
// Load external HTML assets: images, CSS and JavaScript.
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
Imports IronPdf

' Configure security settings
Installation.EnableWebSecurity = True

' Instantiate Renderer
Dim renderer = New ChromePdfRenderer()

' Create a PDF from an HTML string using C#
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")

' Advanced Example with HTML Assets
' Load external HTML assets: images, CSS and JavaScript.
Dim myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", "C:\site\assets\")
myAdvancedPdf.SaveAs("html-with-assets.pdf")
$vbLabelText   $csharpLabel

iText

using iText.Html2pdf;

static void Main(string[] args)
{
    using (FileStream htmlSource = File.Open("input.html", FileMode.Open))
    using (FileStream pdfDest = File.Open("output.pdf", FileMode.Create))
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
    }
}
using iText.Html2pdf;

static void Main(string[] args)
{
    using (FileStream htmlSource = File.Open("input.html", FileMode.Open))
    using (FileStream pdfDest = File.Open("output.pdf", FileMode.Create))
    {
        ConverterProperties converterProperties = new ConverterProperties();
        HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties);
    }
}
Imports iText.Html2pdf

Shared Sub Main(ByVal args() As String)
	Using htmlSource As FileStream = File.Open("input.html", FileMode.Open)
	Using pdfDest As FileStream = File.Open("output.pdf", FileMode.Create)
		Dim converterProperties As New ConverterProperties()
		HtmlConverter.ConvertToPdf(htmlSource, pdfDest, converterProperties)
	End Using
	End Using
End Sub
$vbLabelText   $csharpLabel

HTMLからPDFへの変換の際、IronPDFはこの作業に便利で使いやすいツールを提供します。 ChromePdfRendererを使用してHTMLコンテンツをPDFに変換し、IronPDFはユーザーにピクセルパーフェクトなPDFドキュメントを提供するのに優れています。 ユーザーはHTML文字列から直接PDFを作成したり、外部の資産をオプションのベースパスと共に含めることができます。これは高度な例で示されています。 一方、iTextはHtmlConverterクラスを使用してHTMLファイルからPDFドキュメントを作成する基本的な方法をとっています。

PDFファイルの暗号化

IronPDFでのPDFファイルの暗号化および復号化は、多くの職場で不可欠です。 以下では、iTextとIronPDFがPDFの暗号化をどのように処理するかを見ていきます。

IronPDF

using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
using IronPdf;
using System;

// Open an Encrypted File, alternatively create a new PDF from HTML
var pdf = PdfDocument.FromFile("encrypted.pdf", "password");

// Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto";
pdf.MetaData.Keywords = "SEO, Friendly";
pdf.MetaData.ModifiedDate = DateTime.Now;

// Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key");
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserFormData = false;
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;

// Change or set the document encryption password
pdf.Password = "my-password";
pdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System

' Open an Encrypted File, alternatively create a new PDF from HTML
Private pdf = PdfDocument.FromFile("encrypted.pdf", "password")

' Edit file metadata
pdf.MetaData.Author = "Satoshi Nakamoto"
pdf.MetaData.Keywords = "SEO, Friendly"
pdf.MetaData.ModifiedDate = DateTime.Now

' Edit file security settings
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SecuritySettings.MakePdfDocumentReadOnly("secret-key")
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserFormData = False
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights

' Change or set the document encryption password
pdf.Password = "my-password"
pdf.SaveAs("secured.pdf")
$vbLabelText   $csharpLabel

iText

using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

public class EncryptPdf
{
    public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

    public static readonly String OWNER_PASSWORD = "World";
    public static readonly String USER_PASSWORD = "Hello";

    public static void Main(String[] args)
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new EncryptPdf().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest)
    {
        PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
            new WriterProperties().SetStandardEncryption(
                Encoding.UTF8.GetBytes(USER_PASSWORD),
                Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA
            )));
        document.Close();
    }
}
using System;
using System.IO;
using System.Text;
using iText.Kernel.Pdf;

public class EncryptPdf
{
    public static readonly String DEST = "results/sandbox/security/encrypt_pdf.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hello.pdf";

    public static readonly String OWNER_PASSWORD = "World";
    public static readonly String USER_PASSWORD = "Hello";

    public static void Main(String[] args)
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new EncryptPdf().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest)
    {
        PdfDocument document = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest,
            new WriterProperties().SetStandardEncryption(
                Encoding.UTF8.GetBytes(USER_PASSWORD),
                Encoding.UTF8.GetBytes(OWNER_PASSWORD),
                EncryptionConstants.ALLOW_PRINTING,
                EncryptionConstants.ENCRYPTION_AES_128 | EncryptionConstants.DO_NOT_ENCRYPT_METADATA
            )));
        document.Close();
    }
}
Imports System
Imports System.IO
Imports System.Text
Imports iText.Kernel.Pdf

Public Class EncryptPdf
	Public Shared ReadOnly DEST As String = "results/sandbox/security/encrypt_pdf.pdf"
	Public Shared ReadOnly SRC As String = "../../../resources/pdfs/hello.pdf"

	Public Shared ReadOnly OWNER_PASSWORD As String = "World"
	Public Shared ReadOnly USER_PASSWORD As String = "Hello"

	Public Shared Sub Main(ByVal args() As String)
		Dim file As New FileInfo(DEST)
		file.Directory.Create()

		Call (New EncryptPdf()).ManipulatePdf(DEST)
	End Sub

	Protected Sub ManipulatePdf(ByVal dest As String)
		Dim document As New PdfDocument(New PdfReader(SRC), New PdfWriter(dest, (New WriterProperties()).SetStandardEncryption(Encoding.UTF8.GetBytes(USER_PASSWORD), Encoding.UTF8.GetBytes(OWNER_PASSWORD), EncryptionConstants.ALLOW_PRINTING, EncryptionConstants.ENCRYPTION_AES_128 Or EncryptionConstants.DO_NOT_ENCRYPT_METADATA)))
		document.Close()
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDFは、ユーザーにPDFファイルを暗号化する簡単な方法を提供し、メタデータを編集したり、コピーやペーストなどのユーザーアクションを制限するなどのセキュリティ設定の調整など、ユーザーに多くのコントロールを与えます。 一方、iTextは、PDFの暗号化を文書の作成中に適用し、所有者およびユーザーのパスワードを指定し、AES-128などの暗号化標準を使用して印刷権などの権限を決定し、低レベルで長い方法を採用しています。

PDFコンテンツの編集

時には機密情報やプライベート情報を扱う際、PDFファイルの一部をIronPDFでテキストを編集する必要があることがあります。以下のコード例では、IronPDFを使用してテキストを編集する方法をiTextと比較して示します。

IronPDF

using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

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

PdfDocument pdf = PdfDocument.FromFile("novel.pdf");

// Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are");

pdf.SaveAs("redacted.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("novel.pdf")

' Redact 'are' phrase from all pages
pdf.RedactTextOnAllPages("are")

pdf.SaveAs("redacted.pdf")
$vbLabelText   $csharpLabel

iText

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;

string src = "input.pdf";
string dest = "output_redacted.pdf";

using (PdfReader reader = new PdfReader(src))
using (PdfWriter writer = new PdfWriter(dest))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
    // Iterate through each page
    for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        PdfCanvas canvas = new PdfCanvas(page);
        Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Define rectangles to redact

        // Overlay black rectangles to simulate redaction
        foreach (Rectangle rect in rectanglesToRedact)
        {
            canvas.SetFillColor(ColorConstants.BLACK)
                .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                .Fill();
        }
    }
}
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Kernel.Colors;

string src = "input.pdf";
string dest = "output_redacted.pdf";

using (PdfReader reader = new PdfReader(src))
using (PdfWriter writer = new PdfWriter(dest))
using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
{
    // Iterate through each page
    for (int pageNum = 1; pageNum <= pdfDoc.GetNumberOfPages(); pageNum++)
    {
        PdfPage page = pdfDoc.GetPage(pageNum);
        PdfCanvas canvas = new PdfCanvas(page);
        Rectangle[] rectanglesToRedact = { new Rectangle(100, 100, 200, 50) }; // Define rectangles to redact

        // Overlay black rectangles to simulate redaction
        foreach (Rectangle rect in rectanglesToRedact)
        {
            canvas.SetFillColor(ColorConstants.BLACK)
                .Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight())
                .Fill();
        }
    }
}
Imports System
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Properties
Imports iText.Kernel.Colors

Private src As String = "input.pdf"
Private dest As String = "output_redacted.pdf"

Using reader As New PdfReader(src)
Using writer As New PdfWriter(dest)
Using pdfDoc As New PdfDocument(reader, writer)
	' Iterate through each page
	Dim pageNum As Integer = 1
	Do While pageNum <= pdfDoc.GetNumberOfPages()
		Dim page As PdfPage = pdfDoc.GetPage(pageNum)
		Dim canvas As New PdfCanvas(page)
		Dim rectanglesToRedact() As Rectangle = { New Rectangle(100, 100, 200, 50) } ' Define rectangles to redact

		' Overlay black rectangles to simulate redaction
		For Each rect As Rectangle In rectanglesToRedact
			canvas.SetFillColor(ColorConstants.BLACK).Rectangle(rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight()).Fill()
		Next rect
		pageNum += 1
	Loop
End Using
End Using
End Using
$vbLabelText   $csharpLabel

IronPDFの編集ツールはコンパクトで使いやすく、編集プロセスを合理化するために数行のコードを必要とするだけです。 これにより、PDF編集タスクの効率が向上し、ユーザーに機密データやプライベートデータを安全に保つための簡単な方法を提供します。 一方で、iTextは、IronPDFと同じ意味での組み込みの編集ツールを提供していません。 しかし、上記の方法を使用してユーザーが編集したいコンテンツに矩形を描画することで、依然として機密データをカバーすることができます。 これは潜在的な問題を引き起こす可能性があります。これらの矩形は実際にはテキストを削除したり適切に編集したりするわけではないため、他の人がコピーして貼り付けることで編集されたデータを取得できる可能性があります。

PDF文書への署名

IronPDFでPDF文書にデジタル署名をすることは、特に自動化プロセスとすることで、時間を節約できます。 以下は、IronPDFが文書のデジタル署名を実行する方法がiTextとどのように異なるかを比較したコードの断片です。

IronPDF

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
PdfDocument pdf = PdfDocument.FromFile("document.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
PdfDocument pdf = PdfDocument.FromFile("document.pdf");
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create PdfSignature object
Private sig = New PdfSignature(cert)

' Sign PDF document
Private pdf As PdfDocument = PdfDocument.FromFile("document.pdf")
pdf.Sign(sig)
pdf.SaveAs("signed.pdf")
$vbLabelText   $csharpLabel

iText

using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;

class Program
{
    static void Main(string[] args)
    {
        string src = "input.pdf";
        string dest = "output_signed.pdf";
        string pfxFile = "your_certificate.pfx";
        string pfxPassword = "your_password";

        try
        {
            // Load your certificate
            Pkcs12Store ks = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray());
            string alias = null;
            foreach (string al in ks.Aliases)
            {
                if (ks.IsKeyEntry(al))
                {
                    alias = al;
                    break;
                }
            }
            ICipherParameters pk = ks.GetKey(alias).Key;
            X509CertificateEntry[] chain = ks.GetCertificateChain(alias);
            X509Certificate2 cert = new X509Certificate2(chain[0].Certificate.GetEncoded());

            // Create output PDF with signed content
            using (PdfReader reader = new PdfReader(src))
            using (PdfWriter writer = new PdfWriter(dest))
            using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
            {
                // Create the signer
                PdfSigner signer = new PdfSigner(pdfDoc, writer, new StampingProperties().UseAppendMode());

                // Configure signature appearance
                PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
                appearance.SetReason("Digital Signature");
                appearance.SetLocation("Your Location");
                appearance.SetContact("Your Contact");

                // Create signature
                IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
                signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
            }

            Console.WriteLine($"PDF digitally signed successfully: {dest}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error signing PDF: {ex.Message}");
        }
    }
}
using System;
using System.IO;
using iText.Kernel.Pdf;
using iText.Signatures;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.X509;

class Program
{
    static void Main(string[] args)
    {
        string src = "input.pdf";
        string dest = "output_signed.pdf";
        string pfxFile = "your_certificate.pfx";
        string pfxPassword = "your_password";

        try
        {
            // Load your certificate
            Pkcs12Store ks = new Pkcs12Store(new FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray());
            string alias = null;
            foreach (string al in ks.Aliases)
            {
                if (ks.IsKeyEntry(al))
                {
                    alias = al;
                    break;
                }
            }
            ICipherParameters pk = ks.GetKey(alias).Key;
            X509CertificateEntry[] chain = ks.GetCertificateChain(alias);
            X509Certificate2 cert = new X509Certificate2(chain[0].Certificate.GetEncoded());

            // Create output PDF with signed content
            using (PdfReader reader = new PdfReader(src))
            using (PdfWriter writer = new PdfWriter(dest))
            using (PdfDocument pdfDoc = new PdfDocument(reader, writer))
            {
                // Create the signer
                PdfSigner signer = new PdfSigner(pdfDoc, writer, new StampingProperties().UseAppendMode());

                // Configure signature appearance
                PdfSignatureAppearance appearance = signer.GetSignatureAppearance();
                appearance.SetReason("Digital Signature");
                appearance.SetLocation("Your Location");
                appearance.SetContact("Your Contact");

                // Create signature
                IExternalSignature pks = new PrivateKeySignature(pk, "SHA-256");
                signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
            }

            Console.WriteLine($"PDF digitally signed successfully: {dest}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error signing PDF: {ex.Message}");
        }
    }
}
Imports System
Imports System.IO
Imports iText.Kernel.Pdf
Imports iText.Signatures
Imports Org.BouncyCastle.Crypto
Imports Org.BouncyCastle.Pkcs
Imports Org.BouncyCastle.X509

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim src As String = "input.pdf"
		Dim dest As String = "output_signed.pdf"
		Dim pfxFile As String = "your_certificate.pfx"
		Dim pfxPassword As String = "your_password"

		Try
			' Load your certificate
			Dim ks As New Pkcs12Store(New FileStream(pfxFile, FileMode.Open), pfxPassword.ToCharArray())
			Dim [alias] As String = Nothing
			For Each al As String In ks.Aliases
				If ks.IsKeyEntry(al) Then
					[alias] = al
					Exit For
				End If
			Next al
			Dim pk As ICipherParameters = ks.GetKey([alias]).Key
			Dim chain() As X509CertificateEntry = ks.GetCertificateChain([alias])
			Dim cert As New X509Certificate2(chain(0).Certificate.GetEncoded())

			' Create output PDF with signed content
			Using reader As New PdfReader(src)
			Using writer As New PdfWriter(dest)
			Using pdfDoc As New PdfDocument(reader, writer)
				' Create the signer
				Dim signer As New PdfSigner(pdfDoc, writer, (New StampingProperties()).UseAppendMode())

				' Configure signature appearance
				Dim appearance As PdfSignatureAppearance = signer.GetSignatureAppearance()
				appearance.SetReason("Digital Signature")
				appearance.SetLocation("Your Location")
				appearance.SetContact("Your Contact")

				' Create signature
				Dim pks As IExternalSignature = New PrivateKeySignature(pk, "SHA-256")
				signer.SignDetached(pks, chain, Nothing, Nothing, Nothing, 0, PdfSigner.CryptoStandard.CMS)
			End Using
			End Using
			End Using

			Console.WriteLine($"PDF digitally signed successfully: {dest}")
		Catch ex As Exception
			Console.WriteLine($"Error signing PDF: {ex.Message}")
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

PDFファイルにデジタル署名を適用する際、IronPDFはこのプロセスを完了するための簡潔でありながら強力なツールを提供します。 その簡便さにより、開発者の署名ニーズのためにこれを実装するあらゆる開発者にとって迅速にプロセスを実行することができます。 一方、iTextはPDFファイルにデジタル署名を適用するために長くて複雑なプロセスを必要とします。 異なるインターフェースオプションやキーを使用してユーザーにより多くのコントロールを提供しますが、このツールがこのタスクを実行する方法の複雑さがその使用を妨げる可能性があります。

PDF文書への透かしの適用

IronPDFでPDFに透かしを追加し、カスタマイズする能力は、機密性、著作権保護、ブランディング、または機密情報を含むあらゆるタスクで大いに役立ちます。 以下は、IronPDFとiTextがPDFファイルに透かしを適用する方法の比較です。

IronPDF

using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
using IronPdf;

// Stamps a Watermark onto a new or existing PDF
var renderer = new ChromePdfRenderer();

var pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf");
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs(@"C:\Path\To\Watermarked.pdf");
Imports IronPdf

' Stamps a Watermark onto a new or existing PDF
Private renderer = New ChromePdfRenderer()

Private pdf = renderer.RenderUrlAsPdf("https://www.nuget.org/packages/IronPdf")
pdf.ApplyWatermark("<h2 style='color:red'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("C:\Path\To\Watermarked.pdf")
$vbLabelText   $csharpLabel

iText

using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public class TransparentWatermark 
{
    public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hero.pdf";

    public static void Main(String[] args) 
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new TransparentWatermark().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest) 
    {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
        PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
        PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
        Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark1.Close();
        PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
        over.SetFillColor(ColorConstants.BLACK);
        paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark2.Close();
        paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);
        over.SaveState();

        PdfExtGState gs1 = new PdfExtGState();
        gs1.SetFillOpacity(0.5f);
        over.SetExtGState(gs1);
        Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark3.Close();
        over.RestoreState();

        pdfDoc.Close();
    }
}
using iText.IO.Font;
using iText.IO.Font.Constants;
using iText.Kernel.Colors;
using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Kernel.Pdf.Extgstate;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

public class TransparentWatermark 
{
    public static readonly String DEST = "results/sandbox/stamper/transparent_watermark.pdf";
    public static readonly String SRC = "../../../resources/pdfs/hero.pdf";

    public static void Main(String[] args) 
    {
        FileInfo file = new FileInfo(DEST);
        file.Directory.Create();

        new TransparentWatermark().ManipulatePdf(DEST);
    }

    protected void ManipulatePdf(String dest) 
    {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
        PdfCanvas under = new PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), new PdfResources(), pdfDoc);
        PdfFont font = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
        Paragraph paragraph = new Paragraph("This watermark is added UNDER the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark1 = new Canvas(under, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark1.Close();
        PdfCanvas over = new PdfCanvas(pdfDoc.GetFirstPage());
        over.SetFillColor(ColorConstants.BLACK);
        paragraph = new Paragraph("This watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);

        Canvas canvasWatermark2 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark2.Close();
        paragraph = new Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")
                .SetFont(font)
                .SetFontSize(15);
        over.SaveState();

        PdfExtGState gs1 = new PdfExtGState();
        gs1.SetFillOpacity(0.5f);
        over.SetExtGState(gs1);
        Canvas canvasWatermark3 = new Canvas(over, pdfDoc.GetDefaultPageSize())
                .ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0);
        canvasWatermark3.Close();
        over.RestoreState();

        pdfDoc.Close();
    }
}
Imports iText.IO.Font
Imports iText.IO.Font.Constants
Imports iText.Kernel.Colors
Imports iText.Kernel.Font
Imports iText.Kernel.Pdf
Imports iText.Kernel.Pdf.Canvas
Imports iText.Kernel.Pdf.Extgstate
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Properties

Public Class TransparentWatermark
	Public Shared ReadOnly DEST As String = "results/sandbox/stamper/transparent_watermark.pdf"
	Public Shared ReadOnly SRC As String = "../../../resources/pdfs/hero.pdf"

	Public Shared Sub Main(ByVal args() As String)
		Dim file As New FileInfo(DEST)
		file.Directory.Create()

		Call (New TransparentWatermark()).ManipulatePdf(DEST)
	End Sub

	Protected Sub ManipulatePdf(ByVal dest As String)
		Dim pdfDoc As New PdfDocument(New PdfReader(SRC), New PdfWriter(dest))
		Dim under As New PdfCanvas(pdfDoc.GetFirstPage().NewContentStreamBefore(), New PdfResources(), pdfDoc)
		Dim font As PdfFont = PdfFontFactory.CreateFont(FontProgramFactory.CreateFont(StandardFonts.HELVETICA))
		Dim paragraph As Paragraph = (New Paragraph("This watermark is added UNDER the existing content")).SetFont(font).SetFontSize(15)

		Dim canvasWatermark1 As Canvas = (New Canvas(under, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 550, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
		canvasWatermark1.Close()
		Dim over As New PdfCanvas(pdfDoc.GetFirstPage())
		over.SetFillColor(ColorConstants.BLACK)
		paragraph = (New Paragraph("This watermark is added ON TOP OF the existing content")).SetFont(font).SetFontSize(15)

		Dim canvasWatermark2 As Canvas = (New Canvas(over, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 500, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
		canvasWatermark2.Close()
		paragraph = (New Paragraph("This TRANSPARENT watermark is added ON TOP OF the existing content")).SetFont(font).SetFontSize(15)
		over.SaveState()

		Dim gs1 As New PdfExtGState()
		gs1.SetFillOpacity(0.5F)
		over.SetExtGState(gs1)
		Dim canvasWatermark3 As Canvas = (New Canvas(over, pdfDoc.GetDefaultPageSize())).ShowTextAligned(paragraph, 297, 450, 1, TextAlignment.CENTER, VerticalAlignment.TOP, 0)
		canvasWatermark3.Close()
		over.RestoreState()

		pdfDoc.Close()
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDFの簡単で直感的なAPIは、ユーザーがカスタム透かしを迅速にPDFファイルに適用することを可能にし、プロセス全体で完全なコントロールを提供します。 HTML/CSSを使用することで、カスタマイズコントロールを失うことなくプロセスをさらに簡素化します。 iTextのアプローチは、PDFに透かしを追加するために、手作業が必要であり、そのプロセスを遅延させる可能性があります。

PDFに画像とテキストをスタンプする

PDFにテキストや画像をスタンプするとき、PDFファイルに透かしを適用する必要があるようなことがあります。 IronPDFとiTextがPDF文書にコンテンツをスタンプする方法を比較します。

IronPDF

using IronPdf;
using IronPdf.Editing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
using IronPdf;
using IronPdf.Editing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>");

// Create text stamper
TextStamper textStamper = new TextStamper()
{
    Text = "Text Stamper!",
    FontFamily = "Bungee Spice",
    UseGoogleFont = true,
    FontSize = 30,
    IsBold = true,
    IsItalic = true,
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the text stamper
pdf.ApplyStamp(textStamper);
pdf.SaveAs("stampText.pdf");

// Create image stamper
ImageStamper imageStamper = new ImageStamper(new Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg"))
{
    VerticalAlignment = VerticalAlignment.Top,
};

// Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0);
pdf.SaveAs("stampImage.pdf");
Imports IronPdf
Imports IronPdf.Editing

Private renderer As New ChromePdfRenderer()

Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Example HTML Document!</h1>")

' Create text stamper
Private textStamper As New TextStamper() With {
	.Text = "Text Stamper!",
	.FontFamily = "Bungee Spice",
	.UseGoogleFont = True,
	.FontSize = 30,
	.IsBold = True,
	.IsItalic = True,
	.VerticalAlignment = VerticalAlignment.Top
}

' Stamp the text stamper
pdf.ApplyStamp(textStamper)
pdf.SaveAs("stampText.pdf")

' Create image stamper
Dim imageStamper As New ImageStamper(New Uri("https://ironpdf.com/img/svgs/iron-pdf-logo.svg")) With {.VerticalAlignment = VerticalAlignment.Top}

' Stamp the image stamper
pdf.ApplyStamp(imageStamper, 0)
pdf.SaveAs("stampImage.pdf")
$vbLabelText   $csharpLabel

iText

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void StampPDF(string inputPdfPath, string outputPdfPath, string stampText)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPdfPath), new PdfWriter(outputPdfPath));

    Document doc = new Document(pdfDoc);

    // Add stamp (text) to each page
    int numPages = pdfDoc.GetNumberOfPages();
    for (int i = 1; i <= numPages; i++)
    {
        doc.ShowTextAligned(new Paragraph(stampText),
                            36, 36, i, iText.Layout.Properties.TextAlignment.LEFT,
                            iText.Layout.Properties.VerticalAlignment.TOP, 0);
    }

    doc.Close();
}
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void StampPDF(string inputPdfPath, string outputPdfPath, string stampText)
{
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(inputPdfPath), new PdfWriter(outputPdfPath));

    Document doc = new Document(pdfDoc);

    // Add stamp (text) to each page
    int numPages = pdfDoc.GetNumberOfPages();
    for (int i = 1; i <= numPages; i++)
    {
        doc.ShowTextAligned(new Paragraph(stampText),
                            36, 36, i, iText.Layout.Properties.TextAlignment.LEFT,
                            iText.Layout.Properties.VerticalAlignment.TOP, 0);
    }

    doc.Close();
}
Imports iText.Kernel.Pdf
Imports iText.Layout
Imports iText.Layout.Element

Public Sub StampPDF(ByVal inputPdfPath As String, ByVal outputPdfPath As String, ByVal stampText As String)
	Dim pdfDoc As New PdfDocument(New PdfReader(inputPdfPath), New PdfWriter(outputPdfPath))

	Dim doc As New Document(pdfDoc)

	' Add stamp (text) to each page
	Dim numPages As Integer = pdfDoc.GetNumberOfPages()
	For i As Integer = 1 To numPages
		doc.ShowTextAligned(New Paragraph(stampText), 36, 36, i, iText.Layout.Properties.TextAlignment.LEFT, iText.Layout.Properties.VerticalAlignment.TOP, 0)
	Next i

	doc.Close()
End Sub
$vbLabelText   $csharpLabel

IronPDFは、可変でカスタマイズ可能な方法でPDFにテキストや画像を追加することを可能にし、全体的なコントロールを提供します。 そのAPIはHTML/CSSに慣れた開発者にとって特に理解しやすく、扱いやすいです。 iTextは、その画像とテキストスタンピングツールを使用して、ユーザーのPDFファイルに表示されるコンテンツに対してより多くのコントロールを提供しますが、プロセスがより手動になりがちです。

DOCXからPDFに変換

時には、PDFをあるフォーマットから別のフォーマットに変換する必要があります。 この場合、私たちはIronPDFでのDOCXからPDFへの変換とこのプロセスをIronPDFとiTextがどのように処理するかを見ます。

IronPDF

using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
using IronPdf;

// Instantiate Renderer
DocxToPdfRenderer renderer = new DocxToPdfRenderer();

// Render from DOCX file
PdfDocument pdf = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx");

// Save the PDF
pdf.SaveAs("pdfFromDocx.pdf");
Imports IronPdf

' Instantiate Renderer
Private renderer As New DocxToPdfRenderer()

' Render from DOCX file
Private pdf As PdfDocument = renderer.RenderDocxAsPdf("Modern-chronological-resume.docx")

' Save the PDF
pdf.SaveAs("pdfFromDocx.pdf")
$vbLabelText   $csharpLabel

iText

iText自体では、DOCXからPDFへの変換を取り扱うことができません; 代わりに、外部のライブラリ(例: DocXやAspose.Words)に依存しています。

IronPDFは開発者に対し、外部ライブラリなしでDOCXファイルをPDFフォーマットに変換するための簡潔で直接的なツールを提供しています。 iTextはこのタスクを実行するために外部ライブラリに依存しています。

コード例比較のまとめ

iText C# HTML to PDFの選択肢

より詳しい例については、IronPDFの例: HTMLからPDFの作成をご覧ください。

Bootstrap とモダン CSS フレームワークのサポート

現実の開発において、各ライブラリが最新のCSSフレームワークをどの程度うまく対応できるかがしばしば重要な考慮事項となります。 Bootstrap, Tailwind CSS, Foundationなどがほとんどの現代のWebアプリケーションの基盤を形成しているため、フレームワークの互換性は開発ワークフローと出力の品質に大きな影響を与える可能性があります。

IronPDF: モダンなフレームワークの完全サポート

IronPDFのChromeレンダリングエンジンは、すべての現代CSSフレームワークに対して完全で生産に準備されたサポートを提供します:

  • Bootstrap 5: すべてのレイアウトにネイティブのフレックスボックスとCSS Gridのサポート
  • Tailwind CSS: 完全なユーティリティファーストフレームワークのサポート
  • モダンなCSS3: 変形、アニメーション、カスタムプロパティ、そして高度なセレクタ
  • Framework validation: Successfully renders the Bootstrap homepage and Bootstrap templates

コード例: Bootstrap進捗インディケータ

using IronPdf;

var renderer = new ChromePdfRenderer();

string bootstrap ProgressBars = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h2 class='mb-4'>Project Progress Dashboard</h2>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Backend Development</span>
                <span class='text-success fw-bold'>85%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-striped bg-success' role='progressbar'
                     style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Frontend UI</span>
                <span class='text-warning fw-bold'>60%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
                     style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Testing & QA</span>
                <span class='text-info fw-bold'>40%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar bg-info' role='progressbar'
                     style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

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

var renderer = new ChromePdfRenderer();

string bootstrap ProgressBars = @"
<!DOCTYPE html>
<html>
<head>
    <link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
</head>
<body>
    <div class='container my-5'>
        <h2 class='mb-4'>Project Progress Dashboard</h2>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Backend Development</span>
                <span class='text-success fw-bold'>85%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-striped bg-success' role='progressbar'
                     style='width: 85%' aria-valuenow='85' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Frontend UI</span>
                <span class='text-warning fw-bold'>60%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar progress-bar-animated bg-warning' role='progressbar'
                     style='width: 60%' aria-valuenow='60' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>

        <div class='mb-4'>
            <div class='d-flex justify-content-between mb-1'>
                <span>Testing & QA</span>
                <span class='text-info fw-bold'>40%</span>
            </div>
            <div class='progress' style='height: 25px;'>
                <div class='progress-bar bg-info' role='progressbar'
                     style='width: 40%' aria-valuenow='40' aria-valuemin='0' aria-valuemax='100'>
                </div>
            </div>
        </div>
    </div>
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars);
pdf.SaveAs("project-progress.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

iText7: フレームワークサポートの限定

iText7は、最新のCSSフレームワークに対する重大な制限を持つカスタムHTMLからPDFコンバータ(pdfHTML)を使用しています:

  • JavaScriptの実行不可: ダイナミックなBootstrapコンポーネントを扱うことができません
  • 限られたフレックスボックスサポート: Bootstrap 4以上のレイアウトがしばしば正しくレンダリングされません(v7.1.15には部分的なサポートがあります)
  • CSS Gridサポートなし: モダンなグリッドベースのレイアウトは機能しません
  • 手動の前処理が必要: 複雑なレイアウトにはSeleniumやPuppeteerのような外部ツールが必要です

公式のiText doc」taonにによると、開発者には次のことを推奨されています:

  1. フレックスボックスを含む複雑なCSSレイアウトを避ける
  2. モダンなグリッドシステムの代わりにテーブルベースのレイアウトを使用する
  3. Bootstrapコンポーネントを基本的なHTMLに簡素化する
  4. フレームワークの互換性が限られているため、十分にテストする

現実の影響: あなたのアプリケーションがそのユーザーインターフェースにBootstrapを使用しており、Webデザインに一致するPDFエクスポートが必要な場合、iText7はPDF生成のためにHTML/CSSの大幅な再設計を必要とするか、外部のブラウザ自動化ツールとの統合を必要とし、複雑さと開発時間を実質的に増加させます。

包括的なCSSフレームワークの互換性情報については、Bootstrap & Flexbox CSS ガイドをご覧ください。

価格とライセンス: IronPDF vs. iText Library

IronPDFの価格とライセンス

IronPDFのライセンスオプションは、ライセンスを購入するための様々なレベルと追加機能を提供しています。 開発者は、Iron Softwareの全製品へのアクセスを2つの値段で得るため、Iron Suiteを購入することもできます。 ライセンスを購入する準備ができていない場合、IronPDFは30日間の無料試用版を提供しています。

  • 永続ライセンス: チームのサイズ、プロジェクトのニーズ、拠点数に応じた幅広い永続ライセンスを提供。 各ライセンスタイプにはメールサポートが含まれています。

  • Lite License: このライセンスは1人の開発者、1か所、1つのプロジェクトをサポートします。

  • Plus License: 3人の開発者、3か所、3つのプロジェクトをサポートし、費用は$1,199です。 Plusライセンスは、チャット、電話、メールサポートが提供されています。

  • Professional License: 10人の開発者、10か所、10のプロジェクトをサポートするためのより大きなチームに適しています。費用は$2,399です。 以前の層と同じ連絡サポートチャネルを提供し、スクリーンシェアリングサポートも提供します。

  • ロイヤリティフリーの再配布: IronPDFのライセンスは、ロイヤリティフリーの再配布を追加$2,399で提供します。

  • 途切れない製品サポート: 継続的な製品更新、セキュリティ機能のアップグレード、およびエンジニアリングチームからのサポートにアクセスできます。また、$1,199/年、または$2,399の5年間のカバレッジの一括購入が可能です。

  • Iron Suite: $1,498で、Iron Softwareのすべての製品、IronPDF、IronOCR、IronWord、IronXL、IronBarcode、IronQR、IronZIP、IronPrint、IronWebScraperにアクセス可能。

IronPDFライセンス比較

iTextライセンス

  • AGPLライセンス: iText Coreライブラリはオープンソースであり、無料でユーザーが利用できます。 このライセンスモデルの下でiTextを使用するには、その条件に従う必要があり、iTextそれ自体に対するあらゆる変更もAGPLライセンスモデルの下でリリースされなければなりません。

  • 商用ライセンス: iTextは、AGPLの条件に準拠したプロジェクトでない開発者に商用のライセンスモデルを提供しており、価格は見積もりが必要です。

ドキュメントとサポート: IronPDF vs. iText

IronPDF

  • 包括的なドキュメント: すべての機能を網羅したユーザーフレンドリーなドキュメントを提供

  • 24/5サポート: アクティブなエンジニアサポートを提供

  • ビデオチュートリアル: YouTubeにてステップバイステップのビデオガイドが利用可能

  • コミュニティフォーラム: 追加サポートのためにエンゲージされたコミュニティ

  • 定期更新: 最新の機能とセキュリティパッチを含む毎月の製品更新。

iText

  • ドキュメント: iTextソフトウェアの機能を網羅する詳細なドキュメント。

  • 例とチュートリアル: 様々な機能に関するチュートリアルとコード例。

  • GitHub: 開発者はiText GitHubリポジトリに問題やバグを提出し、iTextグループと連絡を取ることができます。

  • 更新: iTextは定期的な更新と改善を提供しています。

For more details on IronPDF documentation and support, visit IronPDF Documentation and the Iron Software YouTube Channel.

結論

.NETでのPDFマニピュレーションツールの領域では、IronPDFとiTextの両方がさまざまな開発ニーズに応じた強力な機能を提供しています。 IronPDFは、.NET Core、Framework、Standardなどのプラットフォーム間でのシンプルな統合と、HTMLからPDFへの変換や高度なセキュリティオプションなどの包括的な機能を備えている点で際立ちます。 一方でiTextは、Javaの伝統で知られ、オープンソースと商用ライセンスの両方で強力なPDF生成および操作ツールを提供し、多用途性とカスタマイズ性を強調します。

これらのツールの選択は最終的にプロジェクトの要件、ライセンスの好み、および必要な技術サポートレベルにかかっています。 IronPDFのシンプルさと柔軟性を選ぶにしても、iTextというオープンソースのPDFライブラリの広範な機能セットを選ぶにしても、開発者はアプリケーションでPDFワークフローを効果的に合理化するための十分なリソースを持っています。

利用可能な機能を確認するために、30日間の無料試用を試すことができます。

[{i: (iTextはその所有者の登録商標です。 このサイトは、iTextと提携しておらず、承認されてもおらず、後援されてもいません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。)}]

よくある質問

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

IronPDF の RenderHtmlAsPdf メソッドを使用して、HTML 文字列を PDF に変換できます。RenderHtmlFileAsPdf を使用して HTML ファイルを PDF に変換することもできます。

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

IronPDF は、使いやすさ、包括的なドキュメント、強力な技術サポートの点で称賛されており、開発者にとってユーザーフレンドリーなオプションです。一方、iText は堅牢ですが、しばしばより多くの手作業を必要とし、オープンソース (AGPL) および商業的ライセンスとして利用可能です。

PDF ライブラリにはどのようなライセンスオプションがありますか?

IronPDF はさまざまな無期限ライセンスとロイヤリティフリーのオプションを提供し、iText は AGPL に従わないプロジェクトに対して商業オプション付きの無償AGPLライセンスを提供しています。

どの PDF ライブラリが開発者へのサポートをより良く提供していますか?

IronPDF は包括的なドキュメント、24/5のエンジニアサポート、活発なコミュニティフォーラムを提供しており、開発者が最新のリソースや支援を受けられることを保証しています。

IronPDF は異なる .NET 環境と互換性がありますか?

はい、IronPDFは.NET Core、.NET Standard、.NET Frameworkと互換性があり、Windows、Linux、Mac、Docker、Azure、AWSなどの環境で動作します。

IronPDF は PDF 暗号化をどのように処理しますか?

IronPDF は、簡単にメタデータを編集したりセキュリティ設定を調整したりできる、使いやすい API を提供しており、ドキュメントのセキュリティとコンプライアンスを確保します。

IronPDF は DOCX から PDF への変換を行えますか?

はい、IronPDFはDOCXからPDFへの変換に優れており、外部ライブラリを必要とせず直接的で効率的なプロセスを提供し、アプリケーション内の文書変換タスクを簡素化します。

HTML から PDF への変換で IronPDF が際立つ特徴は何ですか?

IronPDF は ChromePdfRenderer を使用して HTML から PDF への変換を行い、HTML、CSS、JavaScript の容易な統合を可能にし、Web コンテンツを PDF に正確にレンダリングします。

クロスプラットフォーム互換性の点で IronPDF と iText はどのように比較されますか?

両方のライブラリは複数のオペレーティングシステムおよび環境をサポートしていますが、IronPDF は HTML から PDF への変換や PDF 暗号化などのタスクでよりスムーズな体験を提供します。

IronPDF の提供する主要な機能は何ですか?

IronPDF は、HTML から PDF への変換、PDF ファイル操作、暗号化と復号化、編集機能、透かし、水印スタンピング、デジタル署名といった機能を提供しています。

Curtis Chau
テクニカルライター

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

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。