푸터 콘텐츠로 바로가기
제품 비교
IronPDF 대 iText7에서 HTML에서 PDF로의 비교

IronPDF & iText7의 비교

Full Comparison

Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.

View Full Comparison

PDF를 조작하기 위한 적당하고 단순한 도구는 PDF 문서 작성 및 편집에 관련된 많은 작업과 프로세스를 간소화할 수 있습니다. .NET 생태계에서 IronPDF 및 iText는 Adobe 종속성 없이 PDF 생성을 허용하는 두 가지 인기 있는 라이브러리입니다. 각각은 생성, 편집, 변환 등 다양한 기능을 제공하지만 이 기사는 이들이 제공하는 기능, 제공하는 문서의 품질, 그리고 이들 제품을 사용하는 데 적용되는 가격 정책을 중심으로 이 라이브러리를 비교할 것입니다.

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 파일을 만들고 조작하기 위한 Enterprise급 프로그래머블 솔루션을 제공합니다. iText는 여러 다른 기능을 위한 지원을 제공하며 오픈 소스 (AGPL) 라이선스 및 상용 라이선스로 배포됩니다. 이는 디지털 변환 프로젝트 진행 중 활용 범위가 넓다는 것을 의미합니다.

플랫폼 간 호환성

IronPDF와 iText는 다양한 플랫폼과 호환됩니다; 여러 다른 시스템과 .NET Framework 내에서 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를 포함한 다양한 앱 환경에서 작동합니다.

  • IDE: Microsoft Visual Studio, JetBrains Rider 및 ReSharper와 같은 IDE와 함께 작동합니다.

  • OS 및 프로세서: Windows, Mac, Linux, x64, x86, ARM을 포함한 여러 운영 체제 및 프로세서를 지원합니다.

iText

  • .NET 버전:

    • .NET Core (2.x, 3.x)
    • .NET Framework (4.6.1+)
    • .NET 5+
  • 앱 환경: iText는 Java 및 .NET(C#) 지원 덕분에 Windows, Mac, Linux 및 Docker를 포함한 다양한 앱 환경을 지원합니다.

  • 운영 체제: Windows, macOS 및 Linux 운영 체제에서 실행됩니다.

주요 기능 비교: IronPDF vs. iText

IronPDF 주요 기능 목록과 iText는 모두 PDF 파일 작업을 위한 다양한 기능과 도구를 제공합니다. 다음 섹션에서는 이러한 기능 중 일부를 더 자세히 살펴보고, PDF 관련 작업을 수행할 때 두 라이브러리가 어떻게 비교되는지 확인할 것입니다.

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 vs. iText의 PDF 기능 비교

HTML을 PDF로 변환

IronPDF를 사용하여 HTML 콘텐츠를 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는 HTML 파일에서 PDF 문서를 생성하는 HtmlConverter 클래스를 사용하여 기본적인 접근 방식을 취합니다.

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는 문서 생성 중에 오너 및 사용자 암호와 인쇄 권한과 같은 권한을 지정하고 AES-128과 같은 암호화 표준을 사용하여 PDF 암호화를 적용하는 낮은 수준의 길고 복잡한 방법을 사용합니다.

PDF 콘텐츠 수정

기밀 또는 민감한 정보를 처리하는 동안에는 때때로 PDF 파일의 일부를 수정하는 것이 필요할 수 있습니다. IronPDF를 사용하여 PDF에서 텍스트를 수정하는 코드 예제는 아래에 제시됩니다.

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와 how 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 Alternatives

더 자세한 예제를 보려면 HTML로 PDF 생성하기 위한 IronPDF 예제를 방문하세요.

부트스트랩 및 최신 CSS 프레임워크 지원

실제 개발 과정에서 자주 떠오르는 중요한 고려 사항은 각 라이브러리가 최신 CSS 프레임워크를 얼마나 잘 처리하는가입니다. 부트스트랩, Tailwind CSS, Foundation은 대부분의 현대 웹 애플리케이션의 기초를 이루며, 프레임워크 호환성은 개발 워크플로우와 결과물 품질에 크게 영향을 미칠 수 있습니다.

IronPDF: 전체 현대 프레임워크 지원

IronPDF의 Chrome 렌더링 엔진은 모든 최신 CSS 프레임워크에 대해 완전하고 프로덕션에 적합한 지원을 제공합니다:

  • Bootstrap 5: 모든 레이아웃에 대한 네이티브 플렉스박스 및 CSS 그리드 지원
  • Tailwind CSS: 완전한 유틸리티 우선 프레임워크 지원
  • Modern CSS3: 변환, 애니메이션, 사용자 정의 속성, 고급 선택자
  • 프레임워크 유효성 검증: 부트스트랩 홈페이지부트스트랩 템플릿을 성공적으로 렌더링

코드 예제: 부트스트랩 진행 표시기

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");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim bootstrapProgressBars As String = "
<!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>"

Dim pdf = renderer.RenderHtmlAsPdf(bootstrapProgressBars)
pdf.SaveAs("project-progress.pdf")
$vbLabelText   $csharpLabel

iText7: 제한된 프레임워크 지원

iText7은 맞춤 HTML에서 PDF로의 변환기(pdfHTML)를 사용하며, 최신 CSS 프레임워크에는 상당한 제한이 있습니다:

  • JavaScript 실행 불가: 동적 부트스트랩 구성 요소 처리 불가
  • 제한된 플렉스박스 지원: Bootstrap 4+ 레이아웃이 종종 올바르게 렌더링되지 않음(v7.1.15에서 부분 지원)
  • CSS 그리드 미지원: 최신 그리드 기반 레이아웃 작동하지 않음
  • 수동 전처리 필요: 복잡한 레이아웃은 Selenium이나 Puppeteer와 같은 외부 도구가 필요

iText 공식 문서에 따르면, 개발자들은 다음과 같이 권장됩니다:

  1. 플렉스박스를 포함한 복잡한 CSS 레이아웃을 피하세요
  2. 현대적 그리드 시스템 대신 테이블 기반 레이아웃을 사용하세요
  3. 부트스트랩 구성 요소를 기본 HTML로 단순화하세요
  4. 프레임워크 호환성이 제한되어 있으므로 철저히 테스트하세요

실제 영향: 애플리케이션에서 사용자 인터페이스로 부트스트랩을 사용하는 경우, 웹 디자인과 일치하는 PDF 내보내기를 위해서는 iText7가 PDF 생성 시 상당한 HTML/CSS 재설계가 필요하거나 외부 브라우저 자동화 도구와의 통합이 필요하여 복잡성과 개발 시간이 크게 증가합니다.

종합적인 CSS 프레임워크 호환성 정보를 보려면 부트스트랩 & 플렉스박스 CSS 가이드를 참조하세요.

가격 및 라이선스: IronPDF와 iText 라이브러리

IronPDF 가격 및 라이선스

IronPDF 라이선스 옵션은 다양한 수준과 추가 기능을 제공하여 라이선스를 구매할 수 있도록 합니다. 개발자는 Iron Suite를 구매하여 Iron Software의 모든 제품을 두 개의 가격으로 액세스할 수 있습니다. 라이선스를 구매할 준비가 되지 않았다면, IronPDF는 30일간 지속되는 무료 체험판을 제공합니다.

  • 영구 라이선스: 팀 규모, 프로젝트 요구 사항 및 위치 수에 따라 다양한 영구 라이선스를 제공합니다. 각 라이선스 유형에는 이메일 지원이 포함됩니다.

  • Lite License: 이 라이선스는 한 명의 개발자, 하나의 위치, 하나의 프로젝트를 지원합니다.

  • Plus License: 세 명의 개발자, 세 개의 위치, 세 개의 프로젝트를 지원하며, 비용은 $1,199입니다. Plus 라이선스는 채팅, 전화, 이메일 지원을 제공합니다.

  • Professional License: 더 큰 팀에 적합하며, 열 명의 개발자, 열 개의 위치, 열 개의 프로젝트를 $2,399에 지원합니다. 그것은 이전 등급과 동일한 연락 지원 채널을 제공하면서도 화면 공유 지원을 추가로 제공합니다.

  • 로열티-없는 재배포: IronPDF의 라이선스는 추가 비용 $2,399로 로열티 없는 재배포도 제공합니다.

  • 끊김 없는 제품 지원: 연간 $1,199 또는 5년 보장을 위한 일회 구매 $2,399으로 지속적인 제품 업데이트, 보안 기능 업그레이드 및 엔지니어 팀의 지원을 받으세요.

  • Iron Suite: $1,498으로 IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint, IronWebScraper를 포함한 모든 Iron Software 제품에 대한 액세스를 받을 수 있습니다.

IronPDF Licensing Comparison

iText 라이선스

  • AGPL 라이선스: iText Core 라이브러리는 오픈 소스로 제공되며 사용자는 무료로 이용할 수 있습니다. 이 라이선스 모델하에서 iText를 사용하려면 사용자는 그 약관에 따라야 하며, 이 라이선스하에 iText에 가해진 모든 수정 사항은 AGPL 라이선스 모델에 따라 공개되어야 합니다.

  • 상업용 라이선스: iText는 AGPL 약관을 충족하지 않는 프로젝트를 위한 상업용 라이선스 모델을 제공하며 가격은 견적을 기반으로 합니다.

문서 및 지원: IronPDF 대 iText

IronPDF

  • 종합 문서: 모든 기능을 다룬 광범위하고 사용자 친화적인 문서입니다.

  • 24/5 지원: 활동적인 엔지니어 지원이 가능합니다.

  • 비디오 튜토리얼: YouTube에서 단계별 비디오 가이드를 제공합니다.

  • 커뮤니티 포럼: 추가 지원을 위한 참여 커뮤니티입니다.

  • 정기 업데이트: 최신 기능과 보안 패치가 포함된 월간 제품 업데이트.

iText

  • 문서: iText 소프트웨어 기능에 대한 심층 문서.

  • 예제 및 튜토리얼: 다양한 기능에 대한 튜토리얼 및 코드 예제.

  • GitHub: 개발자는 iText GitHub 저장소에 문제 또는 버그를 제출하고 iText 그룹과 소통할 수 있습니다.

  • 업데이트: iText는 정기적인 업데이트 및 개선 사항을 제공합니다.

IronPDF 문서 및 지원에 대한 자세한 사항은 IronPDF 문서Iron Software YouTube 채널을 방문하십시오.

결론

.NET용 PDF 조작 도구 영역에서 IronPDF와 iText는 다양한 개발 요구에 맞추어진 강력한 역량을 제공합니다. IronPDF는 HTML에서 PDF 변환 및 고급 보안 옵션과 같은 포괄적인 기능과 함께 .NET Core, Framework 및 Standard 등의 플랫폼 간의 간단한 통합으로 두드러집니다. 한편, Java 유산으로 알려진 iText는 오픈 소스 및 상업 라이선스 하에 강력한 PDF 생성 및 조작 도구를 제공하며 다용성과 사용자 정의를 강조합니다.

이 도구 중 하나를 선택하는 것은 궁극적으로 프로젝트 요구 사항, 라이선스 선호도 및 필요한 기술 지원 수준에 좌우됩니다. IronPDF의 단순성과 유연성 또는 iText라는 오픈 소스 PDF 라이브러리의 광범위한 기능 세트를 선택하든, 개발자는 PDF 워크플로를 효과적으로 간소화할 수 있는 충분한 자원을 확보하고 있습니다.

30일 무료 체험판을 통해 제공되는 기능을 확인할 수 있습니다.

참고해 주세요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로 변환하는 데 탁월하여 외부 라이브러리를 필요로 하지 않고 응용 프로그램 내에서 문서 변환 작업을 간소화하는 직접적이고 효율적인 프로세스를 제공합니다.

IronPDF가 HTML to PDF 변환에서 돋보이는 기능은 무엇입니까?

IronPDF는 HTML을 PDF로 변환하기 위해 ChromePdfRenderer를 사용하여 HTML, CSS 및 JavaScript를 쉽게 통합하여 웹 콘텐츠를 PDF로 정확하게 렌더링합니다.

IronPDF와 iText는 플랫폼 간 호환성 면에서 어떻게 비교됩니까?

두 라이브러리 모두 여러 운영 체제 및 환경을 지원하지만 IronPDF는 HTML을 PDF로 변환하고 PDF 암호화를 수행하는 작업에 더 간소화된 환경을 제공합니다.

IronPDF가 제공하는 주요 기능은 무엇입니까?

IronPDF는 HTML에서 PDF로의 변환, PDF 파일 조작, 암호화 및 해독, 편집 기능, 워터마킹, PDF 도장, 디지털 서명을 제공합니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

iText Logo

비싼 갱신 비용과 시대에 뒤떨어진 제품 업데이트에 지치셨나요?

저희의 엔지니어링 마이그레이션 지원과 더 나은 조건으로 iText 에서 간편하게 전환하세요.

IronPDF Logo

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해