IronPDF & iText7 Arasındaki Karşılaştırma
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing.
PDF'leri manipüle etmek için uygun ve basit bir araç, PDF belgeleri oluşturulduğunda ve düzenlendiğinde yer alan birçok görev ve işlemi kolaylaştırabilir. .NET ekosisteminde, PDF oluşturma için Adobe ile ilgili herhangi bir bağımlılık olmadan izin veren - IronPDF ve iText - iki popüler kütüphane vardır. Her ikisi de oluşturma, düzenleme, dönüştürme gibi çeşitli özellikler sunarlar, ancak bu makale ürünleri kullanmaları için bu şirketler tarafından benimsenen fiyatlandırma politikaları, sundukları özellikler ve sağlanan dokümantasyon kalitesine dayalı olarak bu kütüphaneleri karşılaştırmaya odaklanacaktır.
IronPDF ve iText'e Genel Bakış
IronPDF, geliştiricilerin PDF belgelerini kolayca oluşturmasına, değiştirmesine ve etkileşimde bulunmasına olanak tanıyan önde gelen bir .NET PDF kütüphanesidir. Farklı .NET ortamlarında kullanılabilir, bu da diğer geliştirme gereksinimleri için son derece esnek olmasını sağlar. IronPDF'in temel özelliği, HTML'den PDF'e dönüşüm, PDF birleştirme yeteneği, PDF şifreleme ve dijital imza uygulaması gibi zengin özellik setidir. Dokümantasyon, kullanıcıların herhangi bir zorluk yaşamadan anlayabileceği şekilde yazılmıştır, kütüphanenin kendisi ise güçlü teknik destek sağlamaktadır.
iText, hem Java hem de .NET (C#) için mevcut en popüler PDF kütüphanelerinden biridir. iText Core 8, PDF dosyaları oluşturma ve değiştirme için kurumsal düzeyde programlanabilir bir çözüm sunar. iText, birçok farklı özelliği destekler ve hem açık kaynaklı (AGPL) hem de ticari lisanslar altında piyasaya sürülmüştür. Bu, çok yönlülüğü sayesinde dijital dönüşüm projeleri sırasında geniş bir kullanım yelpazesini kapsayabileceği anlamına gelir.
Çapraz Platform Uyumluluğu
IronPDF ve iText birçok farklı platformla uyumludur; farklı sistemlerde ve .NET framework içinde PDF işleyebilirler. Aşağıda her bir üründe desteklenen ortamları ve platformları karşılaştıracağız.
IronPDF:
IronPDF Desteklenen Platformlara Genel Bakış, çeşitli sistemlerde sorunsuz entegrasyon ve dağıtım sağlamak için geniş bir platform ve ortam yelpazesi desteklemektedir:
-
.NET sürümleri:
- .NET Core (8, 7, 6, 5 ve 3.1+)
- .NET Standard (2.0+)
- .NET Framework (4.6.2+)
-
Uygulama ortamları: IronPDF, Windows, Linux, Mac, Docker, Azure ve AWS dahil olmak üzere uygulama ortamlarında çalışır.
-
IDEs: Microsoft Visual Studio, JetBrains Rider ve ReSharper gibi IDE'ler ile çalışır.
- İşletim Sistemleri ve İşlemciler: Windows, Mac, Linux, x64, x86, ARM dahil olmak üzere birkaç farklı işletim sistemi ve işlemciyi destekler.
iText
-
.NET sürümleri:
- .NET Core (2.x, 3.x)
- .NET Framework (4.6.1+)
- .NET 5+
-
Uygulama ortamları: iText, Java ve .NET (C#) desteği sayesinde bir dizi uygulama ortamını destekler, bunlar arasında Windows, Mac, Linux ve Docker bulunmaktadır.
- İşletim Sistemi: Windows, macOS ve Linux işletim sistemlerinde çalışır.
Ana Özellik Karşılaştırması: IronPDF vs. iText
IronPDF Ana Özellik Listesi ve iText, PDF dosyaları ile çalışmak için çeşitli özellikler ve araçlar sunmaktadır. Bir sonraki bölümde, bu özelliklerden bazılarını daha yakından inceleyip farklı PDF ile ilgili görevleri yerine getirirken iki kütüphanenin nasıl karşılaştırıldığını göreceğiz.
IronPDF
-
HTML'den PDF'ye Dönüşüm: HTML, CSS, JavaScript ve resimleri destekler.
-
PDF Dosyası Manipülasyonu: Belgeleri bölüp birleştirme, format değişikliği ve mevcut PDF belgelerini düzenleme.
-
Güvenlik: PDF şifreleme ve şifre çözme.
-
Düzenleme: Anotasyonlar, yer imleri ve ana hatlar ekleme.
-
Şablonlar: Başlık, alt bilgi ve sayfa numaraları uygulama.
-
Filigran Eklenmesi: PDF dosyalarına kolayca metin ve resim filigranları ekleyin; HTML/CSS kullanarak tam kontrol kazanın.
- PDF Damgalama: IronPDF kullanarak PDF belgelerinize resim ve metin damgaları basın.
IronPDF'un sunabileceği geniş özellik seti hakkında daha fazla bilgi için IronPDF özellikleri sayfasını ziyaret edin.
iText
-
PDF Oluşturma: Başlangıçtan PDF belgeleri oluşturmayı destekler.
-
Formlar: PDF formları oluşturma ve düzenleme.
-
Dijital İmzalar: PDF belgelerini imzalama.
-
Sıkıştırma: PDF dosya boyutlarını optimize etme.
-
İçerik Çıkartma: PDF'lerden metin ve resim çıkarma.
-
Açık Kaynak: AGPL lisansı altında mevcuttur.
- Özelleştirebilirlik: İleri düzey kullanım senaryoları için yüksek seviyede özelleştirme.
IronPDF ile iText Arasındaki PDF İşlevselliği Özellikleri Karşılaştırması
HTML'den PDF'ye Dönüşüm
IronPDF kullanarak HTML içeriğini PDF'ye dönüştürme işlemi birçok farklı ofiste ve çalışma alanında yapılır. Aşağıda, IronPDF ve iText'in bu işlemi nasıl yaklaştığını karşılaştıran kod örnekleri bulunmaktadır.
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")
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
HTML'yi PDF'ye dönüştürürken, IronPDF bu görev için kısa ve kullanışlı bir araç sunar. ChromePdfRenderer'i kullanarak HTML içeriğini PDF'lere dönüştürme konusunda IronPDF, kullanıcılara pikselle mükemmel PDF belgeleri sunma konusunda üstünlüğe sahiptir. Kullanıcılar HTML dizelerinden doğrudan PDF oluşturabilir veya gelişmiş örnekte gösterildiği gibi görüntüler gibi harici varlıkları isteğe bağlı bir temel yol ile dahil edebilirler. iText ise, HTML dosyasından PDF belgelerini oluşturmak için HtmlConverter sınıfını kullanarak temel bir yaklaşım benimser.
PDF Dosyalarını Şifreleme
IronPDF ile PDF Dosyalarını Şifreleme ve şifre çözme, birçok iş yerinde hayati öneme sahiptir. Aşağıda, iText ve IronPDF'in PDF şifreleme üzerine nasıl çalıştıklarını göreceğiz.
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")
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
IronPDF, PDF dosyalarını şifrelemek için kullanıcılara doğrudan bir yol sunarken, kullanıcıların meta verileri düzenleme ve belgeyi yalnızca okunur hale getirme veya kopyalama ve yapıştırma gibi kullanıcı eylemlerini kısıtlama gibi güvenlik ayarlarını ayarlama gibi büyük bir kontrol sunar. iText ise, belge oluşturma sırasında uygulanan PDF şifreleme için daha düşük seviyede ve daha uzun bir yöntem kullanır ve AES-128 gibi şifreleme standartları kullanarak sahip ve kullanıcı şifrelerini belirtir.
PDF İçeriğini Karartma
Gizli veya özel bilgileri işlerken, IronPDF ile PDF'deki metni karartmak gerekebilir. Aşağıdaki kod örnekleri, IronPDF kullanılarak metnin nasıl karartılacağını iText ile karşılaştırarak gösterecektir.
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")
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
IronPDF'ün karartma aracı, yalnızca birkaç satır kod gerektiren kısa ve kullanımı kolay bir araçtır ve karartma sürecini daha verimli hale getirir. Bu, PDF karartma görevlerini daha verimli hale getirir ve kullanıcıların hassas ve özel verilerini kolayca güvende tutmalarına olanak tanır. iText ise, IronPDF ile aynı anlamda dahili bir karartma aracı sunmaz. Ancak, yukarıdaki yöntemi kullanarak kullanıcıların kapatmak istediği içeriği çizerek hassas verileri yine de örtmesi mümkündür. Bu, potansiyel sorunlara yol açabilir, çünkü bu dikdörtgenler metni gerçekten kaldırmaz veya düzgün bir şekilde karartmaz, bu da başkalarının karartılan verileri kopyalayıp yapıştırma olasılığını doğurur.
PDF Belgelerini İmzalama
PDF belgelerini IronPDF ile dijital olarak imzalayabilmek zaman tasarrufu sağlayabilir, özellikle de otomatik bir süreç haline getirilmesi durumunda. Belgelerin dijital imzalanması açısından IronPDF'in iText'e göre nasıl farklılaştığını karşılaştıran bazı kod parçaları şunlar:
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")
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
Dijital imzaları PDF dosyalarına uygularken, IronPDF bu süreci tamamlamak için kısa ama güçlü bir araç sunar. Sadelik, sürecin hızlı bir şekilde gerçekleştirilmesine olanak tanır ve imza ihtiyaçları için bunu uygulayan her bir geliştiricinin zamanından tasarruf sağlar. iText ise, PDF dosyalarına dijital imzalar eklemek için daha uzun ve daha karmaşık bir süreç gerektirir. Farklı arayüz seçenekleri ve anahtarlar kullanabilme yetenekleri kullanıcıya daha fazla kontrol sunarken, bu aracın bu görevi gerçekleştirme şeklinin karmaşıklığı kullanımını engelleyebilir.
PDF Belgelerine Filigran Uygulama
IronPDF ile PDF'lere filigran ekleyebilme yeteneği, gizlilik, telif hakkı koruma, markalaşma veya hassas bilgileri içeren herhangi bir görevde büyük yardım sağlayabilir. Aşağıda IronPDF ve iText'in PDF dosyalarına filigran uygulamasının karşılaştırması bulunmaktadır.
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")
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
IronPDF'ün kolay ve sezgisel API'si, kullanıcılara PDF dosyalarına özel filigranlar hızla eklemelerini sağlar ve süreç üzerinde tam kontrol sağlar. HTML/CSS kullanımı, özelleştirme kontrolünü kaybetmeden süreci daha da basitleştirir. iText'in PDF dosyalarına filigran ekleme yaklaşımı daha fazla manuel çalışma gerektirir, bu da süreci yavaşlatabilir.
PDF Üzerine Resim ve Metin Damgalama
PDF üzerinde metin veya resim damgalamanız gerektiği zamanlar olur, bu da PDF dosyalarına filigran uygulama ihtiyaçı gibi. Şimdi, IronPDF ve iText'in bir PDF belgesine içerik damgalamada nasıl performans gösterdiğini karşılaştıracağız.
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")
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
IronPDF, PDF'lere metin veya resim eklemenize esnek ve özelleştirilebilir bir şekilde yardımcı olabilir ve tam kontrol sunar. API'si, HTML/CSS konusunda bilgili geliştiriciler için özellikle kolay anlaşılır ve çalışılabilir. iText, kullanıcıların PDF dosyalarındaki içerik üzerinde daha fazla kontrol sağlamaları için kendi resim ve metin damgalama araçlarını kullanır, ancak süreç daha manuel olabilir.
DOCX'den PDF'ye Dönüştür
Bazen PDF'leri bir formattan diğerine dönüştürmeniz gerekebilir. Bu durumda, IronPDF ile DOCX'ten PDF'ye Dönüşüm ve IronPDF ile iText'in bu süreci farklı ele alış şekilleri üzerinde duracağız.
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")
iText
iText, kendi başına, DOCX'ten PDF'ye dönüşüm yapamaz; bunun yerine, DocX veya Aspose.Words gibi harici kütüphanelere bağımlıdır.
IronPDF, geliştiricilere DOCX'ten PDF'ye dönüştürme görevlerini yerine getirmek için doğrudan ve kısa bir araç sağlar ve harici kütüphanelere ihtiyaç duymadan DOCX dosyalarını PDF formatına kolayca dönüştürmenizi sağlar. iText ise, bu görevi yerine getirmek için harici kütüphanelere bağımlıdır.
Kod Örneği Karşılaştırmasının Özeti

Daha ayrıntılı örnekler için IronPDF HTML'den PDF Oluşturma Örnekleri sayfasını ziyaret edin.
Bootstrap ve Modern CSS Framework Desteği
Gerçek dünya geliştirmeleri sırasında sıklıkla ortaya çıkan önemli bir konu, her bir kütüphanenin modern CSS framework'lerini nasıl işlediğidir. Bootstrap, Tailwind CSS ve Foundation'ın çoğu çağdaş web uygulamasının temelini oluşturduğu göz önüne alındığında, çerçeve uyumluluğu geliştirme iş akışınızı ve çıktı kalitenizi önemli ölçüde etkileyebilir.
IronPDF: Tam Modern Çerçeve Desteği
IronPDF'ün Chrome işleme motoru, tüm modern CSS framework'leri için tamamıyla, üretim düzeyinde destek sağlar:
- Bootstrap 5: Tüm düzenler için yerel flexbox ve CSS Grid desteği
- Tailwind CSS: Tam olarak yardımcı program-öncelikli çerçeve desteği
- Modern CSS3: Dönüşümler, animasyonlar, özel özellikler ve ileri düzey seçiciler
- Çerçeve doğrulama: Bootstrap ana sayfa ve Bootstrap şablonlarını başarıyla işler
Kod Örneği: Bootstrap İlerleme Göstergeleri
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")
iText7: Sınırlı Çerçeve Desteği
iText7, modern CSS framework'leri için önemli sınırlamalara ketumlaşan özel bir HTML'den PDF'ye dönüştürücü (pdfHTML) kullanır:
- JavaScript çalıştırma yok: Dinamik Bootstrap bileşenlerini işleyemez
- Sınırlı flexbox desteği: Bootstrap 4+ düzenleri çoğunlukla doğru şekilde render edilemez (v7.1.15 kısmi destek sağlar)
- CSS Grid desteklenmez: Modern grid temelli düzenler çalışmayacaktır
- Manuel ön işlem gereklidir: Karmaşık düzenler Selenium veya Puppeteer gibi harici araçlar gerektirir
resmi iText belgesine göre, geliştiricilere şu öneriler verilir:
- Flexbox dahil karmaşık CSS düzenlerinden kaçının
- Modern ızgara sistemleri yerine tablolara dayalı düzenler kullanın
- Bootstrap bileşenlerini basit HTML'ye indirgin
- Çerçeve uyumluluğu sınırlı olduğundan kapsamlı bir şekilde test edin
Gerçek Dünya Etkisi: Uygulamanız kullanıcı arayüzü için Bootstrap kullanıyorsa ve web tasarımınıza uygun PDF çıktıları ihraç etmeniz gerekiyorsa, iText7, PDF oluşturma için hem önemli HTML/CSS yeniden tasarımı ya da harici tarayıcı otomasyon araçlarıyla entegrasyon gerektirir ve bu da karmaşıklığı ve geliştirme süresini önemli ölçüde artırır.
Kapsamlı CSS çerçeve uyumluluğu bilgileri için Bootstrap & Flexbox CSS Rehberi sayfasına bakın.
Fiyatlandırma ve Lisanslama: IronPDF vs. iText Kütüphanesi
IronPDF Fiyatlandırma ve Lisanslama
IronPDF Lisanslama Seçenekleri, lisans satın almak için çeşitli seviyeler ve ek özellikler sunar. Geliştiriciler ayrıca Iron Suite satın alabilir ve Iron Software'in tüm ürünlerine iki ürün fiyatına erişim sağlayabilir. Bir lisans satın almaya hazır değilseniz, IronPDF 30 gün süren bir ücretsiz deneme sürümü sunar.
-
Kalıcı lisanslar: Takım büyüklüğünüz, proje ihtiyaçlarınız ve konum sayısına bağlı olan çeşitli kalıcı lisanslar sunar. Her lisans türü e-posta desteği ile birlikte gelir.
-
Lite Lisansı: Bu lisans bir geliştirici, bir konum ve bir projeyi destekler.
-
Plus Lisansı: Üç geliştiriciyi, üç konumu ve üç projeyi destekleyen bu lisans <a href="$1,199 maliyetindedir. Plus lisansı, sohbet, telefon ve e-posta desteği sunar.
-
Professional Lisansı: Daha büyük ekipler için uygundur, on geliştirici, on konum ve on projeyi <a href="$2,399 için destekler. Önceki katmanlarla aynı iletişim desteği kanallarını sunar ancak ayrıca ekran paylaşımı desteği de sunar.
-
Telif ücretsiz yeniden dağıtım: IronPDF'ın lisanslaması ayrıca bir ek <a href="$2,399 ile telif ücretsiz yeniden dağıtım kapsamı sunar.
-
Kesintisiz ürün desteği: Sürekli ürün güncellemelerine, güvenlik özelliği yükseltmelerine ve mühendislik ekibinden desteğe <a href="$1,199/year veya 5 yıllık kapsam için <a href="$2,399 tek seferlik satın almayla erişin.
- Iron Suite: IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint ve IronWebScraper dahil olmak üzere tüm Iron Software ürünlerine <a href="$1,498 için erişim sağlar.

iText Lisanslama
-
AGPL Lisansı: iText Core kütüphanesi açık kaynak kodlu olup kullanıcılara ücretsiz sunulmaktadır. iText'i bu lisans modeli altında kullanmak için, kullanıcıların şartlarına uymaları gerekmekte olup, bu lisans altında iText'e yapılan tüm değişiklikler de AGPL lisans modeli altında yayınlanmalıdır.
- Ticari Lisans: iText, projeleri AGPL şartlarına uymayan geliştiriciler için ticari bir lisans modeli sunar ve fiyat teklife bağlıdır.
Dokümantasyon ve Destek: IronPDF vs. iText
IronPDF
-
Kapsamlı Belgeler: Tüm özellikler hakkında kapsamlı ve kullanıcı dostu belgeler.
-
24/5 Destek: Aktif mühendis desteği mevcuttur.
-
Video Eğitimleri: YouTube'da adım adım video eğitimleri mevcuttur.
-
Topluluk Forumu: Ek destek için etkileşimli bir topluluk.
- Düzenli Güncellemeler: En son özellikler ve güvenlik yamaları ile aylık ürün güncellemeleri.
iText
-
Dokümantasyon: iText yazılımı özelliklerini kapsayan derinlemesine dokümantasyon.
-
Örnekler ve Eğitimler: Çeşitli özellikler için eğitimler ve kod örnekleri.
-
GitHub: Geliştiriciler, iText GitHub deposuna sorun veya hataları bildirebilir ve iText grubu ile iletişim kurabilir.
- Güncellemeler: iText, düzenli güncellemeler ve iyileştirmeler sunar.
IronPDF belgeleri ve destek hakkında daha fazla bilgi için IronPDF Dokümantasyon ve Iron Software YouTube Kanalı adresine gidin.
Sonuç
.NET için PDF manipülasyon araçları alanında hem IronPDF hem de iText, çeşitli geliştirme ihtiyaçlarına yönelik güçlü yetenekler sunar. IronPDF, .NET Core, Framework ve Standard gibi platformlar arasında kolay entegrasyonu ve HTML'den PDF'ye dönüşüm ve gelişmiş güvenlik seçenekleri gibi kapsamlı özellikleri ile öne çıkmaktadır. Diğer yandan, Java kökeniyle tanınan iText, hem açık kaynak kodlu hem de ticari lisanslar altında güçlü PDF oluşturma ve manipülasyon araçları sunarak çok yönlülüğü ve özelleştirme imkanı vurgular.
Bu araçlar arasında seçim yapmak nihayetinde proje gereksinimlerine, lisans tercihine ve ihtiyaç duyulan teknik destek düzeyine bağlıdır. IronPDF'ün basitlik ve esnekliğini veya açık kaynaklı iText PDF kütüphanesinin kapsamlı özellik setini seçerken, geliştiriciler PDF iş akışlarını etkili bir şekilde basitleştirmek için bol miktarda kaynağa sahiptir.
30 günlük ücretsiz deneme ile mevcut özelliklerini kontrol edebilirsiniz.
Sıkça Sorulan Sorular
HTML'yi C#'de PDF'ye nasıl dönüştürebilirim?
HTML dizgilerini PDF'lere dönüştürmek için IronPDF'nin RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca RenderHtmlFileAsPdf kullanarak HTML dosyalarının PDF'lere dönüştürülmesini de sağlayabilirsiniz.
IronPDF ile iText arasındaki temel farklar nelerdir?
IronPDF, kullanım kolaylığı, kapsamlı dokümantasyonu ve güçlü teknik desteği ile geliştiriciler için kullanıcı dostu bir seçenek olarak övgü alır. iText, güçlü olmakla birlikte, genellikle daha fazla manuel çaba gerektirir ve açık kaynak (AGPL) ve ticari lisanslar altında mevcuttur.
PDF kütüphaneleri için hangi lisanslama seçenekleri mevcut?
IronPDF, çeşitli süresiz lisanslar ve telif ücreti almayan bir seçenek sunarken, iText, AGPL lisansı ile uyumlu olmayan projeler için ticari bir seçenekle ücretsiz AGPL lisansı sağlar.
Hangi PDF kütüphanesi geliştiriciler için daha iyi destek sunuyor?
IronPDF, kapsamlı dokümantasyon, 24/5 mühendis desteği ve etkin bir topluluk forumu sunarak geliştiricilerin güncel kaynaklara ve yardıma erişimini sağlar.
IronPDF, farklı .NET ortamları ile uyumlu mu?
Evet, IronPDF, .NET Core, .NET Standard ve .NET Framework ile uyumludur ve Windows, Linux, Mac, Docker, Azure ve AWS gibi ortamlarda çalışır.
IronPDF PDF şifrelemeyi nasıl ele alır?
IronPDF, PDF'leri şifrelemek için doğrudan bir API sunar, kullanıcılara meta verileri düzenleme ve güvenlik ayarlarını kolayca ayarlama imkanı vererek belge güvenliği ve uyumluluk sağlar.
IronPDF DOCX'ten PDF'ye dönüşümü gerçekleştirebilir mi?
Evet, IronPDF, DOCX'ten PDF'ye dönüşümde başarılıdır, uygulamalar içinde belge dönüşüm görevlerini kolaylaştırmadığında dış kütüphanelere ihtiyaç duymaz.
IronPDF'in HTML'den PDF'ye dönüşüm için öne çıkan özellikleri nelerdir?
IronPDF, HTML, CSS ve JavaScript'in kolay entegrasyonunu sağlayan ChromePdfRenderer kullanır, böylece web içeriğini PDF'ye dönüştürürken kesin bir işlem yapar.
IronPDF ve iText platformlar arası uyumluluk açısından nasıl karşılaştırılır?
Her iki kütüphane de birden fazla işletim sistemi ve ortamı destekler, ancak IronPDF, HTML'den PDF'ye dönüşüm ve PDF şifreleme gibi görevler için daha sorunsuz bir deneyim sunar.
IronPDF tarafından sunulan ana özellikler nelerdir?
IronPDF, HTML'den PDF'ye dönüşüm, PDF dosya manipülasyonu, şifreleme ve şifre çözme, düzenleme yetenekleri, filigran ekleme, PDF damgalama ve dijital imzalar gibi özellikler sunar.



