IronPDF ve Winnovative PDF Kütüphanesi 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şturma ve düzenleme ile ilgili birçok görevi ve süreci kolaylaştırabilir. .NET ekosisteminde, IronPDF ve iText olmak üzere iki popüler kütüphane vardır – her iki kütüphane de herhangi bir Adobe bağımlılığı olmadan PDF oluşturmanıza olanak tanır. Her ikisi de PDF oluşturma, düzenleme, dönüştürme vb. çeşitli özellikler sunar, ancak bu makale, bu kütüphaneleri sundukları özellikler, sağladıkları belgelendirme kalitesi ve ürünleri kullanmak için bu şirketler tarafından benimsenen fiyatlandırma politikaları temelinde karşılaştırmaya odaklanacaktır.
IronPDF ve iText Genel Bakış
IronPDF, programcıların PDF belgelerini kolayca oluşturmasını, değiştirmesini ve onlarla etkileşimde bulunmasını sağlayan öne çıkan bir .NET PDF kütüphanesidir. Core, 8, 7, 6 ve Çerçeve dahil olmak üzere farklı .NET ortamlarında kullanılabilir ve böylece çeşitli geliştirme gereklilikleri için oldukça esnek hale gelir. IronPDF'nin ana özelliği, HTML'den PDF'ye dönüşüm, PDF'leri birleştirme, PDF şifrelemesi ve dijital imzaların uygulanması gibi zengin özellik setine sahip olmasıdır. Belgeler, kullanıcıların zorluk çekmeden anlayabileceği bir şekilde yazılmıştır, kütüphanenin kendisi ise güçlü teknik desteğe sahiptir.
iText, hem Java hem de .NET (C#) için mevcut en popüler PDF kütüphanelerinden biridir. iText Core 8, PDF dosyaları oluşturmak ve manipüle etmek için kurumsal düzeyde programlanabilir bir çözüm sunar. iText, birçok farklı özellik için destek sağlar ve hem açık kaynak (AGPL) lisansları hem de ticari lisanslar altında yayınlanır. Bu, çok yönlülüğü sayesinde dijital dönüşüm projeleri sırasında çok çeşitli kullanım durumlarını kapsamasını sağlar.
Çapraz Platform Uyumlu
IronPDF ve iText, çeşitli platformlarla uyumludur; .NET çerçevesi içinde ve birçok farklı sistemde PDF'leri işleyebilirler. Her ürün için desteklenen çerçeveleri ve platformları aşağıda karşılaştıracağız.
IronPDF:
IronPDF Desteklenen Platformlara Genel Bakış geniş bir platform ve ortam yelpazesini destekler, çeşitli sistemlerde sorunsuz entegrasyon ve dağıtım sağlar:
- .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.
-
ID'ler: Microsoft Visual Studio, JetBrains Rider ve ReSharper gibi IDE'lerle ç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 Çerçevesi (4.6.1+)
-
.NET 5+
-
Uygulama ortamları: iText, Java ve .NET (C#) desteği sayesinde, Windows, Mac, Linux ve Docker gibi bir dizi uygulama ortamını destekler.
- İşletim sistemleri: 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ıyla çalışmak için bir dizi özellik ve araç sunar. Bir sonraki bölümün odak noktası, bu özelliklerin bazılarının daha yakından incelenmesi ve farklı PDF ile ilgili görevleri gerçekleştirme konusunda iki kütüphanenin nasıl karşılaştırıldığının incelenmesi olacaktır.
IronPDF
– HTML'den PDF'ye Dönüşüm: HTML, CSS, JavaScript ve resimleri destekler.
– PDF Dosya Manipülasyonu: Belgeleri böler ve birleştirir, biçimlendirmeyi değiştirir ve mevcut PDF belgelerini düzenler.
– Güvenlik: PDF şifrelemesi ve şifre çözme.
-
Düzenleme: Açıklamalar, yer imleri ve anahatlar ekleyin.
-
Şablonlar: Başlıklar, altbilgiler ve sayfa numaraları uygulayın.
-
Filigran Ekleme: PDF dosyalarına kolayca metin ve görüntü filigranları ekleyin; HTML/CSS kullanarak tam kontrol kazanın.
- PDF Damgalama: IronPDF kullanarak PDF belgelerinize resim ve metin damgası ekleyin.
IronPDF'un sunduğu geniş özellik seti hakkında daha fazla bilgi almak için IronPDF özellik sayfasını ziyaret edin.
iText
-
PDF Oluşturma: Sıfırdan PDF belgeleri oluşturmayı destekler.
-
Formlar: PDF formları oluşturun ve düzenleyin.
-
Dijital İmzalar: PDF belgelerini imzalayın.
-
Sıkıştırma: PDF dosya boyutlarını optimize edin.
-
İçerik Çıkarımı: PDF'lerden metin ve resim çıkarın.
-
Açık Kaynak: AGPL lisansı altında mevcuttur.
- Özelleştirme: Gelişmiş kullanım durumları için yüksek düzeyde özelleştirme.
IronPDF ve iText Arasında PDF İşlevselliği Özelliklerinin Karşılaştırılması
HTML'den PDF'ye Dönüşüm
HTML içeriğini IronPDF kullanarak PDF'ye dönüştürmek birçok farklı ofis ve çalışma alanında gerçekleştirilen bir görevdir. Aşağıda, IronPDF ve iText'in bu sürece 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 özlü ve kullanışlı bir araç sunar. ChromePdfRenderer kullanarak HTML içeriğini PDF'lere dönüştürmek, IronPDF kullanıcılarına piksel mükemmelinde PDF belgeleri sunmada ustadır. Kullanıcılar doğrudan HTML dizelerinden PDF'ler oluşturabilir veya gelişmiş örnekte gösterildiği gibi bir temel yol ile harici varlıklar ekleyebilir. iText ise başka bir yandan, HTML dosyasından PDF belgeleri oluşturmak için HtmlConverter sınıfını kullanarak temel bir yaklaşım izler.
PDF Dosyalarını Şifreleme
IronPDF ile PDF Dosyalarının Şifrelenmesi ve şifre çözme birçok işyerinde hayati öneme sahiptir. Aşağıda, iText ve IronPDF'ün PDF'lerin şifrelenmesi konusundaki yaklaşımları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 basit bir yol sunarken, kullanıcıların metadata düzenleme ve belgeleri salt okunur yapma gibi güvenlik ayarlarını ayarlama gibi kontrol olanakları da sağlar. Diğer yandan, iText, belge oluşturma sırasında PDF şifrelemesi uygulamak için yönlendirilen alt düzey ve daha uzun bir yöntem kullanır, AES-128 gibi şifreleme standartlarını kullanarak yazdırma hakları gibi izinlerin yanı sıra sahip ve kullanıcı şifreleri de belirtir.
PDF İçeriğini Karartma
Bazen gizli veya özel bilgileri işlerken, bir PDF dosyasının IronPDF ile metinleri karartmak gerekli olabilir. Aşağıdaki kod örnekleri, IronPDF'ü kullanarak metinleri nasıl karartabileceğinizi iText ile karşılaştıracak şekilde 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ı özlü ve kullanımı kolaydır, karartma sürecini basitleştirmek için sadece birkaç satır kod gerektirir. Bu, PDF karartma görevleri etrafında verimliliği artırır ve kullanıcıların hassas ve özel verilerini güvende tutmasını sağlar. Diğer taraftan, iText, IronPDF'ün sunduğu gibi bir yerleşik karartma aracı sunmaz. Ancak, kullanıcıların karartmak istedikleri içeriğin üzerine çizim yapmak için yukarıda gösterilen yöntemi kullanarak hassas verileri yine de kapayabilir. Bunlar, bu dikdörtgenlerin metni gerçekten çıkarıp düzgün şekilde karartmadığı için, diğer insanların karartılan verileri kopyalayıp yapıştırabilecekleri potansiyel sorunlara yol açabilir.
PDF Belgelerini İmzalama
IronPDF ile PDF belgelerini dijital olarak imzalamak zaman tasarrufu sağlayabilir, özellikle otomatik bir süreç haline getirdiğinizde. İşte IronPDF'in belgelerin dijital imzalanması açısından iText'ten nasıl farklı olduğunu gösteren bazı kod parçaları.
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
PDF dosyalarına dijital olarak imza uygularken, IronPDF bu süreci tamamlamak için özlü ancak güçlü bir araç sunar. Basitliği, sürecin hızlı bir şekilde gerçekleştirilmesine olanak tanır ve bunu uygulayan her geliştirici için zaman kazandırır. iText, PDF dosyalarına dijital imza uygulamak için daha uzun ve daha karmaşık bir süreç gerektirir. Farklı arayüz seçenekleri ve anahtarlarını kullanma kabiliyetleri kullanıcıya daha fazla kontrol sunarken, bu aracın bu görevi yerine getirirkenki karmaşıklığı kullanımını engelleyebilir.
PDF Belgelerine Filigran Uygulama
The ability to add and personalize watermarks on PDFs with IronPDF can greatly assist with confidentiality, copyright protection, branding, or any task involving sensitive information. Aşağıda, IronPDF'in ve iText'in PDF dosyalarına filigran nasıl uyguladığını karşılaştıran bir çalışma 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'in kolay ve sezgisel API'si, kullanıcıların PDF dosyalarına özel filigranlar uygulayarak sürecin tam kontrolünü hızlı bir şekilde sağlar. HTML/CSS kullanımı, özelleştirme kontrolünü kaybetmeden süreci daha da basitleştirir. iText'in PDF'lere filigran ekleme yaklaşımı daha fazla manuel çalışma gerektirir ve süreci yavaşlatabilir.
PDF'ye Resim ve Metin Damgalama
There are times when PDF pages need to be stamped with text or images on a PDF, similar to how one might need to apply watermarks to their PDF files. Şimdi, IronPDF ve iText'in bir PDF belgesine içerik damgalama performansını 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 eklemenizi sağlarken, çeşitli ve özelleştirilebilir bir yol sunarak tam kontrol sağlar. API'si, özellikle HTML/CSS'ye aşina olan geliştiriciler için anlaşılması ve çalışılması kolaydır. iText, kullanıcıların PDF dosyalarındaki içerik üzerinde daha fazla kontrol sahibi olabilmesi için resim ve metin damgalama araçlarını kullanır, ancak süreçte daha manuel bir hale gelebilir.
DOCX'ten PDF'ye Dönüştürme
Bazen bir formatdan diğerine PDF dönüşümü gerekebilir. Bu durumda, IronPDF ile DOCX'ten PDF'ye dönüşümü ve IronPDF ve iText'in bu süreci nasıl farklı şekilde yönettiğine bakıyoruz.
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 tek başına DOCX'ten PDF'ye dönüşümü gerçekleştiremez; bunun yerine, DocX veya Aspose.Words gibi harici kütüphanelere dayanır.
IronPDF geliştiricilere DOCX'ten PDF'ye dönüşüm görevlerini yönetmek için basit ve öz bir araç sağlar, harici kütüphanelere ihtiyaç duymadan DOCX dosyalarını PDF formatına dönüştürmeyi kolaylaştırır. iText ise bu görevi gerçekleştirmek için harici kütüphanelere dayanır.
Kod Örnekleri Karşılaştırmasının Özeti

Daha ayrıntılı örnekler için HTML'den PDF oluşturma örnekleri sayfasını ziyaret edin.
Bootstrap ve Modern CSS Çerçeve Desteği
Gerçek dünya gelişimi sırasında sıklıkla ortaya çıkan önemli bir husus, her kütüphanenin modern CSS çerçevelerini ne kadar iyi yönettiğidir. Bootstrap, Tailwind CSS, ve Foundation çoğu çağdaş web uygulamasının temelini oluşturduğundan, ç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'un Chrome oluşturma motoru, tüm modern CSS çerçeveleri için tam ve üretime hazır destek sağlar:
- Bootstrap 5: Tüm yerleşimler için yerel flexbox ve CSS Grid desteği
- Tailwind CSS: Tam fayda öncelikli çerçeve desteği
- Modern CSS3: Dönüşümler, animasyonlar, özel özellikler ve gelişmiş seçiciler
- Çerçeve doğrulaması: Bootstrap ana sayfası ve Bootstrap şablonlarını başarıyla oluşturur
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")
iText: Sınırlı Çerçeve Desteği
iText, modern CSS çerçeveleri için önemli sınırlamaları olan özel bir HTML'den PDF'ye dönüştürücü (pdfHTML) kullanır:
- JavaScript yürütümü yok: Dinamik Bootstrap bileşenlerini işleyemez
- Sınırlı flexbox desteği: Bootstrap 4+ yerleşimleri genellikle doğru bir şekilde oluşturulamaz (v7.1.15 kısmen destek sağlar)
- CSS Grid desteklenmiyor: Modern grid tabanlı yerleşimler çalışmayacaktır
- Manuel ön işleme gereklidir: Karmaşık yerleşimler için Selenium veya Puppeteer gibi harici araçlar gerekir
Resmi iText belgelerine göre, geliştiricilere şunları yapmaları önerilir:
- Flexbox dahil karmaşık CSS yerleşimlerinden kaçının
- Modern grid sistemleri yerine tablo tabanlı yerleşim kullanın
- Bootstrap bileşenlerini temel HTML'e indirgeyin
- Çerçeve uyumluluğu sınırlı olduğundan dikkatlice test edin
Gerçek Dünya Etkisi: Uygulamanızın kullanıcı arayüzü için Bootstrap kullanıyor ve web tasarımınıza uyan PDF çıktıları almanız gerekiyorsa, iText, PDF oluşturma için HTML/CSS tasarımının yeniden yapılmasını veya dış tarayıcı otomasyon araçları ile entegrasyonu gerektirir ki 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 ve Flexbox CSS Kılavuzuna bakın.
Fiyatlandırma ve Lisanslama: IronPDF ve 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'i satın alabilir ve iki fiyatına Iron Software'in tüm ürünlerine 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ü sağlar.
-
Süresiz lisanslar: Ekibinizin büyüklüğü, proje ihtiyaçlarınız ve lokasyon sayınıza bağlı olarak çeşitli süresiz lisanslar sunar. Her lisans türü email desteği ile birlikte gelir.
-
Lite License: Bu lisans bir geliştirici, bir lokasyon ve bir projeyi destekler.
-
Plus Lisansı: Üç geliştirici, üç konum ve üç projeyi destekleyen ve maliyeti $1,499 olan bu lisans. Plus lisansı, sohbet, telefon ve e-posta desteği sunar.
-
Professional Lisansı: Daha büyük ekipler için uygun, on geliştirici, on konum ve on projeyi $2,999 için destekler. Önceki seviyelerdeki aynı kontak destek kanallarını sunar, ancak ayrıca ekran paylaşımı desteği de sunar.
-
Telif ücretsiz yeniden dağıtım: IronPDF'in lisanslama aynı zamanda ekstra $2,999 için telif ücretsiz yeniden dağıtım kapsamı da sunar.
-
Kesintisiz ürün desteği: Sürekli ürün güncellemelerine, güvenlik özelliği yükseltmelerine ve mühendislik ekibinden desteğe, $1,499/yıl veya 5 yıllık kapsam için $2,999 tek seferlik ödeme ile erişin.
- Iron Suite: $2,998 için IronPDF, IronOCR, IronWord, IronXL, IronBarcode, IronQR, IronZIP, IronPrint ve IronWebScraper dahil tüm Iron Software ürünlerine erişim elde edersiniz.

iText Lisanslama
-
AGPL Lisansı: iText Çekirdek kütüphanesi açık kaynaklıdır ve kullanıcılara ücretsiz olarak sunulur. Bu lisans modeli altında iText'i kullanmak için kullanıcıların şartlarına uyması gerekir ve bu lisans altında yapılan herhangi bir değişiklik de AGPL lisans modeli altında yayınlanmalıdır.
- Ticari Lisans: Projeleri AGPL şartlarıyla uyumlu olmayan geliştiriciler için iText ticari bir lisanslama modeli sunar ve fiyat teklif bazlıdır.
Dokümantasyon ve Destek: IronPDF vs. iText
IronPDF
-
Kapsamlı Dokümantasyon: Tüm özellikleri ele alan kapsamlı ve kullanıcı dostu dokümantasyon.
-
24/5 Destek: Aktif mühendis desteği mevcuttur.
-
Video Eğitimler: Adım adım video rehberleri YouTube'da mevcut.
-
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ının özelliklerini kapsayan derinlemesine dokümantasyon.
-
Örnekler ve Eğitimler: Çeşitli özellikler için eğitimler ve kod örnekleri.
-
GitHub: Geliştiriciler herhangi bir sorun veya hatayı iText GitHub deposuna bildirebilir ve iText grubuyla iletişim kurabilir.
- Güncellemeler: iText düzenli güncellemeler ve iyileştirmeler sunar.
IronPDF dokümantasyonu ve destek hakkında daha fazla ayrıntı için IronPDF Dokümantasyonu ve Iron Software YouTube Kanalını ziyaret edin.
Sonuç
.NET için PDF manipülasyon araçları dünyasında, hem IronPDF hem de iText çeşitli geliştirme ihtiyaçlarına yönelik sağlam yetenekler sunar. IronPDF, HTML'den PDF'ye dönüşüm ve gelişmiş güvenlik seçenekleri gibi kapsamlı özellikleriyle .NET Core, Framework ve Standard gibi platformlar arasında kolay entegrasyon ile öne çıkar. Diğer yandan, iText, Java kökeniyle tanınan, güçlü PDF oluşturma ve manipülasyon araçlarını hem açık kaynak hem de ticari lisanslar altında sunar ve esneklik ve özelleştirme vurgular.
Bu araçlar arasında seçim yapmak nihayetinde proje gereksinimlerine, lisans tercihine ve gereken teknik destek seviyesine bağlıdır. IronPDF'ün basitliği ve esnekliği ile open-source PDF kütüphanesi olan iText'in geniş özellik seti arasında seçim yaparken, geliştiriciler uygulamalarında PDF iş akışlarını etkili bir şekilde hızlandırmak için yeterli kaynağa sahip.
30 günlük ücretsiz deneme ile mevcut özellikleri keşfedebilirsiniz.
Sıkça Sorulan Sorular
HTML'yi C# içerisinde PDF'ye nasıl dönüştürebilirim?
HTML dizgilerini PDF'lere dönüştürmek için IronPDF'ün RenderHtmlAsPdf yöntemini kullanabilirsiniz. Ayrıca, HTML dosyalarını RenderHtmlFileAsPdf kullanarak PDF'lere dönüştürebilirsiniz.
IronPDF ve iText arasındaki ana farklar nelerdir?
IronPDF, kullanım kolaylığı, kapsamlı dokümantasyonu ve güçlü teknik desteği ile övgü alır ve geliştiriciler için kullanıcı dostu bir seçenek sunar. iText, güçlü olmasına karşın, genellikle daha fazla manuel uğraş gerektirir ve açık kaynak (AGPL) ve ticari lisanslar altında mevcuttur.
PDF kütüphaneleri için hangi lisans seçenekleri mevcuttur?
IronPDF çeşitli süresiz lisanslar ve telif ücretsiz seçeneği sunarken, iText AGPL lisansı ile ücretsiz ve AGPL'yi uyarlamayan projeler için ticari bir seçenek sunar.
Hangi PDF kütüphanesi geliştiriciler için daha iyi destek sunar?
IronPDF, kapsamlı dokümantasyon, 24/5 mühendis desteği ve aktif bir topluluk forumu sunarak geliştiricilerin güncel kaynaklara ve yardıma erişimini sağlar.
IronPDF farklı .NET ortamları ile uyumlu mudur?
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 kullanıcıların meta verileri düzenlemelerine ve güvenlik ayarlarını kolayca ayarlamalarına olanak sağlayan basit bir API sunar, böylece belge güvenliği ve uyumluluğu sağlanır.
IronPDF, DOCX'ten PDF'e dönüştürme yapabilir mi?
Evet, IronPDF, DOCX'ten PDF'e dönüştürme işleminde mükemmeldir ve belgelerin uygulamalar içinde dönüştürülmesi görevlerini basitleştirerek, dış kütüphanelere ihtiyaç duymadan doğrudan ve etkili bir süreç sunar.
IronPDF'yi HTML'den PDF'e dönüştürme için öne çıkaran özellikler nelerdir?
IronPDF, HTML'den PDF'e dönüştürme için ChromePdfRenderer kullanır, HTML, CSS ve JavaScript'in kolay entegrasyonuna olanak tanır ve web içeriklerinin PDF'lere doğru şekilde işlemesini sağlar.
IronPDF ve iText, çapraz platform uyumluluğu 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'e dönüştürme ve PDF şifreleme gibi görevler için daha pürüzsüz bir deneyim sunar.
IronPDF tarafından sunulan anahtar özellikler nelerdir?
IronPDF; HTML'den PDF'e dönüştürme, PDF dosyalarını işleme, şifreleme ve şifre çözme, düzenleme yetenekleri, filigran ekleme, PDF damgalama ve dijital imzalama gibi özellikler sunar.



