Altbilgi içeriğine atla
ÜRüN KARşıLAşTıRMALARı

PDF Başlık ve Altbilgi: IronPDF ve iTextSharp Karşılaştırması

Full Comparison

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

View Full Comparison

IronPDF, HTML desteği ile yerel ve özelliklere dayalı konfigürasyon ile PDF başlık ve altbilgi oluşturmayı basitleştirirken, iTextSharp, hassas konumlandırma için PdfPageEventHelper uygulaması ve manuel koordinat hesaplamaları gerektirir.

Profesyonel PDF belgeleri - iş raporları, faturalar, teknik dokümantasyon - üretilirken, tutarlı başlıklar ve altbilgiler kaliteyi işaret eder ve marka bilincini güçlendirir. iTextSharp ile çalışmış geliştiriciler zorlukları bilir: başlık ve altbilgiler eklemek sayfa olay işleyicileri yazmayı, koordinatları hesaplamayı ve düşük seviyede yazı tiplerini yönetmeyi gerektirir. IronPDF temelde farklı bir yaklaşım benimseyerek her pikseli belirtmek yerine ne istediğinizi tanımlamanıza olanak tanır. Bu kılavuz her iki kütüphaneyi yan yana inceleyerek bir sonraki projeniz için bilinçli bir karar vermenizi sağlar.

IronPDF Nasıl Kurulur?

Karşılaştırmalara dalmadan önce, IronPDF'i bir .NET 10 projesine nasıl ekleyeceğiniz burada. .NET CLI veya Visual Studio'daki NuGet Paket Yöneticisi Konsolunu kullanın:

dotnet add package IronPdf
# Or in the NuGet Package Manager Console:
# Install-Package IronPdf
dotnet add package IronPdf
# Or in the NuGet Package Manager Console:
# Install-Package IronPdf
SHELL

Kurulumdan sonra, uygulama başlatıldığında bir kereye mahsus lisans anahtarı çağrısı ekleyin:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
$vbLabelText   $csharpLabel

IronPDF NuGet paketi .NET 8+ hedefler ve ek bir çalışma zamanı bağımlılığı gerektirmeyen bir Chromium motoru ile birlikte gelir. IronPDF'i ortamınızda değerlendirebilmeniz için bir ücretsiz deneme lisansı mevcuttur.

iTextSharp Başlık ve Altbilgi Uygulaması ile İlgili Zorluklar Nelerdir?

iTextSharp ile çalışırken, başlık ve altbilgi eklemek için PdfPageEventHelper sınıfını uygulamak ve OnEndPage yöntemini geçersiz kılmak gerekir. Bu yaklaşım, PdfContentByte nesnesinin doğrudan manipülasyonunu ve hassas koordinat hesaplamalarını içerir. Modern HTML'den PDF'e çözümlerinin aksine, iTextSharp'un olay odaklı mimarisi PDF yapısını ve koordinat sistemlerini derinlemesine anlamayı gerektirir.

Koordinat sistemi sayfanın sol alt köşesinden başlar, bu da çoğu geliştiricinin düzenler hakkında düşündüğüle çelişir. Bu, PDF spesifikasyonunun sayfa koordinat alanını nasıl tanımladığına doğrudan bir sonuçtur. Sayfa boyutu her değiştiğinde - örneğin, A4'ten Letter'a geçiş yaparken - her koordinat değeri yeniden hesaplanmalıdır. Başlık altına bir alt çizgi eklemek, metni ortalamak veya bir alt bilgiyi sağ kenar boşluğuna hizalamak hepsi açık sayısal ofsetler gerektirir.

public class HeaderFooterEvent : PdfPageEventHelper
{
    private readonly Font headerFont = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
    private readonly Font footerFont = new Font(Font.FontFamily.HELVETICA, 10);

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        PdfContentByte cb = writer.DirectContent;

        // Add header text -- requires precise Y coordinate calculation
        float headerY = document.PageSize.Height - 30;
        ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER,
            new Phrase("Company Report", headerFont),
            document.PageSize.Width / 2, headerY, 0);

        // Draw underline manually
        cb.MoveTo(40, headerY - 5);
        cb.LineTo(document.PageSize.Width - 40, headerY - 5);
        cb.Stroke();

        // Add footer with page number
        string footerText = $"Page {writer.PageNumber}";
        ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT,
            new Phrase(footerText, footerFont),
            document.PageSize.Width - 40, 30, 0);

        // Add date on left side
        ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT,
            new Phrase(DateTime.Now.ToString("MM/dd/yyyy"), footerFont),
            40, 30, 0);
    }
}

// Usage
PdfWriter writer = PdfWriter.GetInstance(document, stream);
writer.PageEvent = new HeaderFooterEvent();
public class HeaderFooterEvent : PdfPageEventHelper
{
    private readonly Font headerFont = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
    private readonly Font footerFont = new Font(Font.FontFamily.HELVETICA, 10);

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        PdfContentByte cb = writer.DirectContent;

        // Add header text -- requires precise Y coordinate calculation
        float headerY = document.PageSize.Height - 30;
        ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER,
            new Phrase("Company Report", headerFont),
            document.PageSize.Width / 2, headerY, 0);

        // Draw underline manually
        cb.MoveTo(40, headerY - 5);
        cb.LineTo(document.PageSize.Width - 40, headerY - 5);
        cb.Stroke();

        // Add footer with page number
        string footerText = $"Page {writer.PageNumber}";
        ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT,
            new Phrase(footerText, footerFont),
            document.PageSize.Width - 40, 30, 0);

        // Add date on left side
        ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT,
            new Phrase(DateTime.Now.ToString("MM/dd/yyyy"), footerFont),
            40, 30, 0);
    }
}

// Usage
PdfWriter writer = PdfWriter.GetInstance(document, stream);
writer.PageEvent = new HeaderFooterEvent();
Imports iTextSharp.text
Imports iTextSharp.text.pdf

Public Class HeaderFooterEvent
    Inherits PdfPageEventHelper

    Private ReadOnly headerFont As Font = New Font(Font.FontFamily.HELVETICA, 12, Font.BOLD)
    Private ReadOnly footerFont As Font = New Font(Font.FontFamily.HELVETICA, 10)

    Public Overrides Sub OnEndPage(writer As PdfWriter, document As Document)
        Dim cb As PdfContentByte = writer.DirectContent

        ' Add header text -- requires precise Y coordinate calculation
        Dim headerY As Single = document.PageSize.Height - 30
        ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER, 
            New Phrase("Company Report", headerFont), 
            document.PageSize.Width / 2, headerY, 0)

        ' Draw underline manually
        cb.MoveTo(40, headerY - 5)
        cb.LineTo(document.PageSize.Width - 40, headerY - 5)
        cb.Stroke()

        ' Add footer with page number
        Dim footerText As String = $"Page {writer.PageNumber}"
        ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT, 
            New Phrase(footerText, footerFont), 
            document.PageSize.Width - 40, 30, 0)

        ' Add date on left side
        ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT, 
            New Phrase(DateTime.Now.ToString("MM/dd/yyyy"), footerFont), 
            40, 30, 0)
    End Sub
End Class

' Usage
Dim writer As PdfWriter = PdfWriter.GetInstance(document, stream)
writer.PageEvent = New HeaderFooterEvent()
$vbLabelText   $csharpLabel

Bu manuel konumlandırma yaklaşımı, farklı sayfa yönleriyle, özel kağıt boyutları veya değişen margin gereksinimleri ele alınırken daha karmaşık hale gelir. Üretim sistemleri için PDF/A uyumluluğu veya dijital imzalar gerektiren durumlarda, manuel yaklaşım önemli ölçüde bakım yükü ekler.

Temel Başlıklarla Çıktı Nasıl Görünür?

PDF belge, başlık metni içeren bir üst bilgi ve sayfa numaralandırması gösteren alt bilgi ile şirket raporunu görüntüleyerek PDF oluşturma işleminde temel üst bilgi ve alt bilgi uygulamasını göstermektedir

Yukarıdaki kod, gereken manuel çalışmayı gösterir -- tam koordinatları hesaplar, yazı tiplerini ayrı ayrı yönetir ve işleme işlemini DirectContent ile halledersiniz. Her tasarım değişikliği, olay işleyicisi boyunca dağılmış sayısal sabitlerin düzenlenmesi anlamına gelir.

Neden Koordinat Tabanlı Düzen Bakım Problemleri Yaratır?

Bir tasarım değişikliği geldiğinde -- logoyu taşı, yazı tipi boyutunu ayarla, tarihi merkeze kaydır -- bir geliştirici, neyi değiştireceğini anlamak için piksel kaymalarını takip etmelidir. Görsel katman yok; Kodun kendisi düzenin tek belirtimidir. Bu, geliştiriciler arasında devretmelerin hata yapma olasılığını artırır ve küçük görsel revizyonlar yapmak için gereken zamanı uzatır.

IronPDF Başlık ve Alt Bilgi Oluşturmayı Nasıl Kolaylaştırır?

IronPDF, başlık ve alt bilgi oluşturma sürecini sezgisel bir API ile dönüştürür. Olay işleyicilerini uygulamak yerine, başlık ve alt bilgileri ChromePdfRenderer üzerindeki basit özellik ayarlarıyla yapılandırırsınız. Bu yaklaşım, modern .NET geliştirme uygulamaları ile uyumlu olup öğrenme eğrisini önemli ölçüde azaltır.

using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure text header with multiple properties
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Company Report",
    LeftText = "CONFIDENTIAL",
    RightText = DateTime.Now.ToString("MMMM yyyy"),
    DrawDividerLine = true,
    FontSize = 12,
    FontFamily = "Arial",
    Spacing = 5
};

// Configure text footer with dynamic placeholders
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    LeftText = "{date} {time}",
    CenterText = "© 2024 Company Name",
    RightText = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    FontSize = 10,
    Spacing = 10
};

// Set margins to ensure proper spacing
renderer.RenderingOptions.MarginTop = 30;
renderer.RenderingOptions.MarginBottom = 25;

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Configure text header with multiple properties
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Company Report",
    LeftText = "CONFIDENTIAL",
    RightText = DateTime.Now.ToString("MMMM yyyy"),
    DrawDividerLine = true,
    FontSize = 12,
    FontFamily = "Arial",
    Spacing = 5
};

// Configure text footer with dynamic placeholders
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    LeftText = "{date} {time}",
    CenterText = "© 2024 Company Name",
    RightText = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    FontSize = 10,
    Spacing = 10
};

// Set margins to ensure proper spacing
renderer.RenderingOptions.MarginTop = 30;
renderer.RenderingOptions.MarginBottom = 25;

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Configure text header with multiple properties
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Company Report",
    .LeftText = "CONFIDENTIAL",
    .RightText = DateTime.Now.ToString("MMMM yyyy"),
    .DrawDividerLine = True,
    .FontSize = 12,
    .FontFamily = "Arial",
    .Spacing = 5
}

' Configure text footer with dynamic placeholders
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .LeftText = "{date} {time}",
    .CenterText = "© 2024 Company Name",
    .RightText = "Page {page} of {total-pages}",
    .DrawDividerLine = True,
    .FontSize = 10,
    .Spacing = 10
}

' Set margins to ensure proper spacing
renderer.RenderingOptions.MarginTop = 30
renderer.RenderingOptions.MarginBottom = 25

Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

Rendisyon seçenekleri, IronPDF'de kodu okunabilir tutarken PDF oluşturma üzerinde ayrıntılı kontrol sağlar. Bu özellik tabanlı yaklaşım, düşük seviyeli PDF manipülasyonuna dalmadan başlıkları ve alt bilgileri korumayı ve değiştirmeyi kolaylaştırır.

IronPDF, Profesyonel Biçimlendirmeyi Nasıl Ele Alır?

IronPDF'ın şirket markalaması, sayfa numaraları ve tutarlı formatlama ile birden fazla sayfada zaman damgaları içeren başlık ve alt bilgi yeteneklerini gösteren iki sayfalık PDF dökümanı

Fark hemen belirgin olur -- IronPDF, konumlama, kenar boşlukları ve işlemeyi otomatik olarak yaparken dinamik içerik için yerleşik yer tutucular sağlar. Kutuphane'nin Chrome işleme motoru, HTML onizlemenize uygun piksel-mükemmel cikti saglar.

Üretim Sistemleri İçin Hangi Özellikler En Önemlidir?

Özellik Karşılaştırması: Başlıklar ve Alt Bilgiler için iTextSharp vs IronPDF
Özellik iTextSharp IronPDF
Gerçekleştirme Yöntemi PdfPageEventHelper sinifi RenderingOptions özellikleri
Kod Karmaşıklığı Manuel koordinat hesaplamaları Basit özellik ataması
Sayfa Numaraları Manuel izleme writer.PageNumber ile Yerleşik {page} yer tutucu
HTML Desteği Sınırlı, XMLWorker gerektirir Yerel HTML başlık desteği
Margin Yonetimi Manuel hesaplama Otomatik ayarlama
Dinamik İçerik Özel uygulama gerekli Önceden tanımlanmış yer tutucular
İlk Sayfa Farklı Karmaşık koşullu mantık FirstPageNumber özelliği
Öğrenme Eğrisi Dik Kademeli

Sayfa Numaraları ile Başlık ve Alt Bilgileri Nasıl Ekleyebilirsiniz?

Sayfa numaralandırma PDF dökümanları için standart bir gerekliliktir. iTextSharp ile, geçerli sayfa numarasını ve toplam sayfa sayısını manuel olarak takip etmeniz gerekir, genellikle doğru toplam sayfa sayılarına ulaşmak için iki geçişli bir yaklaşım gerektirir:

// iTextSharp approach with complete page numbering
public class CompleteHeaderFooterEvent : PdfPageEventHelper
{
    private readonly PdfTemplate totalPageCount;
    private readonly Font normalFont = new Font(Font.FontFamily.HELVETICA, 10);

    public CompleteHeaderFooterEvent(PdfWriter writer)
    {
        // Create placeholder for total page count
        totalPageCount = writer.DirectContent.CreateTemplate(30, 16);
    }

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        PdfPTable footerTable = new PdfPTable(3);
        footerTable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
        footerTable.SetWidths(new float[] { 1, 1, 1 });

        PdfPCell leftCell = new PdfPCell(new Phrase(DateTime.Now.ToString("dd/MM/yyyy"), normalFont));
        leftCell.Border = Rectangle.NO_BORDER;
        leftCell.HorizontalAlignment = Element.ALIGN_LEFT;

        PdfPCell centerCell = new PdfPCell(new Phrase("Confidential", normalFont));
        centerCell.Border = Rectangle.NO_BORDER;
        centerCell.HorizontalAlignment = Element.ALIGN_CENTER;

        PdfPCell rightCell = new PdfPCell();
        rightCell.Border = Rectangle.NO_BORDER;
        rightCell.HorizontalAlignment = Element.ALIGN_RIGHT;

        Chunk pageNum = new Chunk($"Page {writer.PageNumber} of ", normalFont);
        rightCell.AddElement(pageNum);
        rightCell.AddElement(Image.GetInstance(totalPageCount));

        footerTable.AddCell(leftCell);
        footerTable.AddCell(centerCell);
        footerTable.AddCell(rightCell);

        footerTable.WriteSelectedRows(0, -1, document.LeftMargin,
            document.PageSize.GetBottom(document.BottomMargin), writer.DirectContent);
    }

    public override void OnCloseDocument(PdfWriter writer, Document document)
    {
        ColumnText.ShowTextAligned(totalPageCount, Element.ALIGN_LEFT,
            new Phrase(writer.PageNumber.ToString(), normalFont), 0, 0, 0);
    }
}
// iTextSharp approach with complete page numbering
public class CompleteHeaderFooterEvent : PdfPageEventHelper
{
    private readonly PdfTemplate totalPageCount;
    private readonly Font normalFont = new Font(Font.FontFamily.HELVETICA, 10);

    public CompleteHeaderFooterEvent(PdfWriter writer)
    {
        // Create placeholder for total page count
        totalPageCount = writer.DirectContent.CreateTemplate(30, 16);
    }

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        PdfPTable footerTable = new PdfPTable(3);
        footerTable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin;
        footerTable.SetWidths(new float[] { 1, 1, 1 });

        PdfPCell leftCell = new PdfPCell(new Phrase(DateTime.Now.ToString("dd/MM/yyyy"), normalFont));
        leftCell.Border = Rectangle.NO_BORDER;
        leftCell.HorizontalAlignment = Element.ALIGN_LEFT;

        PdfPCell centerCell = new PdfPCell(new Phrase("Confidential", normalFont));
        centerCell.Border = Rectangle.NO_BORDER;
        centerCell.HorizontalAlignment = Element.ALIGN_CENTER;

        PdfPCell rightCell = new PdfPCell();
        rightCell.Border = Rectangle.NO_BORDER;
        rightCell.HorizontalAlignment = Element.ALIGN_RIGHT;

        Chunk pageNum = new Chunk($"Page {writer.PageNumber} of ", normalFont);
        rightCell.AddElement(pageNum);
        rightCell.AddElement(Image.GetInstance(totalPageCount));

        footerTable.AddCell(leftCell);
        footerTable.AddCell(centerCell);
        footerTable.AddCell(rightCell);

        footerTable.WriteSelectedRows(0, -1, document.LeftMargin,
            document.PageSize.GetBottom(document.BottomMargin), writer.DirectContent);
    }

    public override void OnCloseDocument(PdfWriter writer, Document document)
    {
        ColumnText.ShowTextAligned(totalPageCount, Element.ALIGN_LEFT,
            new Phrase(writer.PageNumber.ToString(), normalFont), 0, 0, 0);
    }
}
Imports System
Imports iTextSharp.text
Imports iTextSharp.text.pdf

' iTextSharp approach with complete page numbering
Public Class CompleteHeaderFooterEvent
    Inherits PdfPageEventHelper

    Private ReadOnly totalPageCount As PdfTemplate
    Private ReadOnly normalFont As Font = New Font(Font.FontFamily.HELVETICA, 10)

    Public Sub New(writer As PdfWriter)
        ' Create placeholder for total page count
        totalPageCount = writer.DirectContent.CreateTemplate(30, 16)
    End Sub

    Public Overrides Sub OnEndPage(writer As PdfWriter, document As Document)
        Dim footerTable As New PdfPTable(3)
        footerTable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin
        footerTable.SetWidths(New Single() {1, 1, 1})

        Dim leftCell As New PdfPCell(New Phrase(DateTime.Now.ToString("dd/MM/yyyy"), normalFont))
        leftCell.Border = Rectangle.NO_BORDER
        leftCell.HorizontalAlignment = Element.ALIGN_LEFT

        Dim centerCell As New PdfPCell(New Phrase("Confidential", normalFont))
        centerCell.Border = Rectangle.NO_BORDER
        centerCell.HorizontalAlignment = Element.ALIGN_CENTER

        Dim rightCell As New PdfPCell()
        rightCell.Border = Rectangle.NO_BORDER
        rightCell.HorizontalAlignment = Element.ALIGN_RIGHT

        Dim pageNum As New Chunk($"Page {writer.PageNumber} of ", normalFont)
        rightCell.AddElement(pageNum)
        rightCell.AddElement(Image.GetInstance(totalPageCount))

        footerTable.AddCell(leftCell)
        footerTable.AddCell(centerCell)
        footerTable.AddCell(rightCell)

        footerTable.WriteSelectedRows(0, -1, document.LeftMargin, document.PageSize.GetBottom(document.BottomMargin), writer.DirectContent)
    End Sub

    Public Overrides Sub OnCloseDocument(writer As PdfWriter, document As Document)
        ColumnText.ShowTextAligned(totalPageCount, Element.ALIGN_LEFT, New Phrase(writer.PageNumber.ToString(), normalFont), 0, 0, 0)
    End Sub
End Class
$vbLabelText   $csharpLabel

Bu model, bir PDF şablon nesnesi oluşturmayı gerektirir ve ardından belge kapandıktan sonra toplam sayfa sayısını geri doldurur. ITextSharp'ın iç işleyişini bilmeyenler için işlemin iki geçişli doğası belirgin değildir ve yanlış yapılması, nihai PDF'de hatalı sayfa sayımları üretir.

IronPDF'nin Yaklaşımı Neden Daha Sürdürülebilir?

IronPDF, yerleşik yer tutucular ve otomatik sayfa numarası yönetimi ile sayfa numaralandırmasını halleder:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    LeftText = "{date} {time}",
    CenterText = "Confidential -- Internal Use Only",
    RightText = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    FontSize = 10,
    FontFamily = "Calibri",
    Spacing = 8
};

// Skip numbering on cover page
renderer.RenderingOptions.FirstPageNumber = 0;

renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginTop = 30;

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    LeftText = "{date} {time}",
    CenterText = "Confidential -- Internal Use Only",
    RightText = "Page {page} of {total-pages}",
    DrawDividerLine = true,
    FontSize = 10,
    FontFamily = "Calibri",
    Spacing = 8
};

// Skip numbering on cover page
renderer.RenderingOptions.FirstPageNumber = 0;

renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginTop = 30;

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .LeftText = "{date} {time}",
    .CenterText = "Confidential -- Internal Use Only",
    .RightText = "Page {page} of {total-pages}",
    .DrawDividerLine = True,
    .FontSize = 10,
    .FontFamily = "Calibri",
    .Spacing = 8
}

' Skip numbering on cover page
renderer.RenderingOptions.FirstPageNumber = 0

renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginTop = 30

Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

Yerleşik yer tutucular {page}, {total-pages}, {date}, {time}, {html-title}, {pdf-title} ve {url}'ı destekler. Karmaşık son işleme veya iki geçişli renderlama gerek yoktur. Kütüphane, toplam sayfa sayısını dahili olarak çözümler ve bunu her yer tutucu alanında otomatik olarak ekler.

Dinamik Içerikle HTML Basliklari Oluşturabilir misiniz?

Şirket logolarini, stillendirilmis tipografiyi veya yapılandırilmis tabloları iceren düzenler icin, HTML basliklari metin tabanli basliklardan çok daha fazla esneklik saglar. IronPDF, yerel HTML başlık ve altbilgi desteği ile burada mükemmeldir:

using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 10px 0;'>
            <img src='logo.png' style='height: 40px;'>
            <div style='text-align: center;'>
                <h2 style='margin: 0; color: #2c3e50;'>Annual Report 2024</h2>
                <p style='margin: 0; font-size: 12px; color: #7f8c8d;'>Financial Performance &amp; Strategic Overview</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #95a5a6;'>
                Document ID: AR-2024-001<br>
                Classification: Public
            </div>
        </div>",
    MaxHeight = 80,
    DrawDividerLine = true,
    BaseUrl = new Uri(System.IO.Path.GetFullPath("assets/")).AbsoluteUri
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <table style='width: 100%; font-size: 10px; color: #34495e;'>
            <tr>
                <td style='width: 33%; text-align: left;'>Generated: {date} at {time}</td>
                <td style='width: 34%; text-align: center;'>Page {page} of {total-pages}</td>
                <td style='width: 33%; text-align: right;'>Annual Report 2024</td>
            </tr>
        </table>",
    MaxHeight = 30,
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("annual-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 10px 0;'>
            <img src='logo.png' style='height: 40px;'>
            <div style='text-align: center;'>
                <h2 style='margin: 0; color: #2c3e50;'>Annual Report 2024</h2>
                <p style='margin: 0; font-size: 12px; color: #7f8c8d;'>Financial Performance &amp; Strategic Overview</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #95a5a6;'>
                Document ID: AR-2024-001<br>
                Classification: Public
            </div>
        </div>",
    MaxHeight = 80,
    DrawDividerLine = true,
    BaseUrl = new Uri(System.IO.Path.GetFullPath("assets/")).AbsoluteUri
};

renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <table style='width: 100%; font-size: 10px; color: #34495e;'>
            <tr>
                <td style='width: 33%; text-align: left;'>Generated: {date} at {time}</td>
                <td style='width: 34%; text-align: center;'>Page {page} of {total-pages}</td>
                <td style='width: 33%; text-align: right;'>Annual Report 2024</td>
            </tr>
        </table>",
    MaxHeight = 30,
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("annual-report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 10px 0;'>
            <img src='logo.png' style='height: 40px;'>
            <div style='text-align: center;'>
                <h2 style='margin: 0; color: #2c3e50;'>Annual Report 2024</h2>
                <p style='margin: 0; font-size: 12px; color: #7f8c8d;'>Financial Performance &amp; Strategic Overview</p>
            </div>
            <div style='text-align: right; font-size: 11px; color: #95a5a6;'>
                Document ID: AR-2024-001<br>
                Classification: Public
            </div>
        </div>",
    .MaxHeight = 80,
    .DrawDividerLine = True,
    .BaseUrl = New Uri(System.IO.Path.GetFullPath("assets/")).AbsoluteUri
}

renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <table style='width: 100%; font-size: 10px; color: #34495e;'>
            <tr>
                <td style='width: 33%; text-align: left;'>Generated: {date} at {time}</td>
                <td style='width: 34%; text-align: center;'>Page {page} of {total-pages}</td>
                <td style='width: 33%; text-align: right;'>Annual Report 2024</td>
            </tr>
        </table>",
    .MaxHeight = 30,
    .DrawDividerLine = True
}

Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("annual-report.pdf")
$vbLabelText   $csharpLabel

Karmaşık Başlıklar Uygulamada Nasıl İşlenir?

Şirket logosu ve yillik rapor markalamasi iceren profesyonel baslikli PDF dokümani, IronPDF'nin gelişmiş HTML baslik oluşturma yeteneklerini ve tutarli çok sayfali formatlama kabiliyetini göstermektedir

iTextSharp ile HTML başlıklarını elde etmek için XMLWorker uzantısını eklemek ve karmaşık ayrıştırma kodu yazmak gereklidir. Kütüphanenin sınırlı CSS desteği, farklı kağıt boyutları üzerinde güvenilir bir şekilde çalışan modern düzenler üretmeyi zorlaştırır. Gorseller, flex düzenleri ve web yazı tipleri, önemli kod karmaşıklığı ekleyen çözümler gerektirir.

İlk Sayfa Başlıklarını Farklı Şekilde Nasıl Ele Alırsınız?

Pek çok profesyonel belge, kapak sayfasında farklı bir üstbilgi gerektirir -- başlık sayfası için büyük bir logo, ardından sonraki sayfalar için kompakt bir üstbilgi. IronPDF, bu deseni koşullu HTML ve CSS aracılığıyla destekler:

using IronPdf;

var renderer = new ChromePdfRenderer();

string firstPageHeader = @"
    <div style='text-align: center; padding: 20px 0;'>
        <img src='logo-large.png' style='height: 80px; margin-bottom: 10px;'>
        <h1 style='margin: 0; color: #2c3e50;'>2024 Annual Report</h1>
        <h3 style='margin: 5px 0; color: #7f8c8d;'>Fiscal Year Ending December 31, 2024</h3>
    </div>";

string subsequentPageHeader = @"
    <div style='display: flex; justify-content: space-between; align-items: center;'>
        <img src='logo-small.png' style='height: 30px;'>
        <span>Annual Report 2024</span>
        <span>Page {page}</span>
    </div>";

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <style>
            .first-page {{ display: none; }}
            .other-pages {{ display: block; }}
            @page:first {{
                .first-page {{ display: block; }}
                .other-pages {{ display: none; }}
            }}
        </style>
        <div class='first-page'>{firstPageHeader}</div>
        <div class='other-pages'>{subsequentPageHeader}</div>",
    MaxHeight = 100
};

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("report-with-cover.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string firstPageHeader = @"
    <div style='text-align: center; padding: 20px 0;'>
        <img src='logo-large.png' style='height: 80px; margin-bottom: 10px;'>
        <h1 style='margin: 0; color: #2c3e50;'>2024 Annual Report</h1>
        <h3 style='margin: 5px 0; color: #7f8c8d;'>Fiscal Year Ending December 31, 2024</h3>
    </div>";

string subsequentPageHeader = @"
    <div style='display: flex; justify-content: space-between; align-items: center;'>
        <img src='logo-small.png' style='height: 30px;'>
        <span>Annual Report 2024</span>
        <span>Page {page}</span>
    </div>";

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = $@"
        <style>
            .first-page {{ display: none; }}
            .other-pages {{ display: block; }}
            @page:first {{
                .first-page {{ display: block; }}
                .other-pages {{ display: none; }}
            }}
        </style>
        <div class='first-page'>{firstPageHeader}</div>
        <div class='other-pages'>{subsequentPageHeader}</div>",
    MaxHeight = 100
};

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("report-with-cover.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim firstPageHeader As String = "
    <div style='text-align: center; padding: 20px 0;'>
        <img src='logo-large.png' style='height: 80px; margin-bottom: 10px;'>
        <h1 style='margin: 0; color: #2c3e50;'>2024 Annual Report</h1>
        <h3 style='margin: 5px 0; color: #7f8c8d;'>Fiscal Year Ending December 31, 2024</h3>
    </div>"

Dim subsequentPageHeader As String = "
    <div style='display: flex; justify-content: space-between; align-items: center;'>
        <img src='logo-small.png' style='height: 30px;'>
        <span>Annual Report 2024</span>
        <span>Page {page}</span>
    </div>"

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = $"
        <style>
            .first-page {{ display: none; }}
            .other-pages {{ display: block; }}
            @page:first {{
                .first-page {{ display: block; }}
                .other-pages {{ display: none; }}
            }}
        </style>
        <div class='first-page'>{firstPageHeader}</div>
        <div class='other-pages'>{subsequentPageHeader}</div>",
    .MaxHeight = 100
}

Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("report-with-cover.pdf")
$vbLabelText   $csharpLabel

Bu yaklaşım, başlık tanımını tek bir yerde tutarak hem kapak hem de iç başlığı aynı anda güncellemeyi kolaylaştırır. Yüksek verimlilik gerektiren senaryolar için async PDF render etmeyi de keşfedebilirsiniz.

Hangi Yaklaşım Daha İyi Performans ve Esneklik Sunar?

Buyuk dokümanlar oluştururken veya bircok PDF dosyasini es zamanli islerken performans kritik hale gelir. IronPDF'in Chrome rendering engine üretim iş yükleri için çeşitli avantajlar sağlar:

  1. Rende kapasitesi: IronPDF, birden fazla sayfaya sahip belgeler için verimliliği artırarak oluşturulan başlıkları ve alt bilgileri önbelleğe alır.
  2. Bellek Verimliliği: Kütüphane, bellek yönetimini otomatik olarak gerçekleştirir ve manuel PdfContentByte manipülasyonu ile oluşabilecek sızıntılardan kaçınır.
  3. Paralel İşleme: Asenkron işlemler için destek, Task.WhenAll desenlerini kullanarak verimli yığın üretimini mümkün kılar
using IronPdf;

public async Task GenerateReportsAsync(List<ReportData> reports)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Monthly Report",
        DrawDividerLine = true
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true
    };

    // Disable JavaScript if not required for faster rendering
    renderer.RenderingOptions.EnableJavaScript = false;
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

    var tasks = reports.Select(async report =>
    {
        string html = await GenerateHtmlAsync(report);
        return await renderer.RenderHtmlAsPdfAsync(html);
    });

    PdfDocument[] pdfs = await Task.WhenAll(tasks);
}
using IronPdf;

public async Task GenerateReportsAsync(List<ReportData> reports)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Monthly Report",
        DrawDividerLine = true
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        RightText = "Page {page} of {total-pages}",
        DrawDividerLine = true
    };

    // Disable JavaScript if not required for faster rendering
    renderer.RenderingOptions.EnableJavaScript = false;
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

    var tasks = reports.Select(async report =>
    {
        string html = await GenerateHtmlAsync(report);
        return await renderer.RenderHtmlAsPdfAsync(html);
    });

    PdfDocument[] pdfs = await Task.WhenAll(tasks);
}
Imports IronPdf

Public Async Function GenerateReportsAsync(reports As List(Of ReportData)) As Task
    Dim renderer As New ChromePdfRenderer()

    renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
        .CenterText = "Monthly Report",
        .DrawDividerLine = True
    }

    renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
        .RightText = "Page {page} of {total-pages}",
        .DrawDividerLine = True
    }

    ' Disable JavaScript if not required for faster rendering
    renderer.RenderingOptions.EnableJavaScript = False
    renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print

    Dim tasks = reports.Select(Async Function(report)
                                   Dim html As String = Await GenerateHtmlAsync(report)
                                   Return Await renderer.RenderHtmlAsPdfAsync(html)
                               End Function)

    Dim pdfs As PdfDocument() = Await Task.WhenAll(tasks)
End Function
$vbLabelText   $csharpLabel

Üretim Kullanımı için Lisanslama Düşünceleri Nelerdir?

IronPDF'nin lisans modeli, iTextSharp'ın AGPL lisansına kıyasla ticari dostu terimler sunar; AGPL lisansı, uygulama kodlarınızı açmanız gerektiğini şart koşar, aksi takdirde ayrı bir ticari iText lisansı satın almalısınız. Üretim sistemleri için, IronPDF şunları sağlar:

Süresiz lisanslar, tekrarlayan ucretler olmadan

Ekibiniz İçin Öğrenme Eğrisi Ne Kadar Dik?

iTextSharp'ın sayfa olay sistemiyle tanışık olan geliştiriciler için bir uyum süreci vardır, ancak IronPDF'in belgeleri ve örnekleri bunu yönetilebilir kılar. iTextSharp'da kapsamlı özel kod gerektirecek olan stil için CSS kullanma ve düzen için HTML kullanma yeteneği, yeni olanaklar açar. dokümantasyonunda şunlar bulunur:

Kenar Boşluğu ve Aralık Hesaplamaları Nasıl Farklılık Gösterir?

Profesyonel belge düzenleri kesin kenar boşluğu kontrolü gerektirir. IronPDF, bunu milimetre cinsinden ölçümlerle basitleştirir -- baskı düzenleri için doğal bir birim:

using IronPdf;

var renderer = new ChromePdfRenderer();

// Set margins in millimeters
renderer.RenderingOptions.MarginTop = 25.4;    // 1 inch
renderer.RenderingOptions.MarginBottom = 25.4;
renderer.RenderingOptions.MarginLeft = 19.05;  // 0.75 inch
renderer.RenderingOptions.MarginRight = 19.05;

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Internal Report",
    DrawDividerLine = true,
    Spacing = 5
};

// Use print CSS media type for accurate page layout
// See MDN reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/print
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("margin-report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// Set margins in millimeters
renderer.RenderingOptions.MarginTop = 25.4;    // 1 inch
renderer.RenderingOptions.MarginBottom = 25.4;
renderer.RenderingOptions.MarginLeft = 19.05;  // 0.75 inch
renderer.RenderingOptions.MarginRight = 19.05;

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "Internal Report",
    DrawDividerLine = true,
    Spacing = 5
};

// Use print CSS media type for accurate page layout
// See MDN reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/print
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;

var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("margin-report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Set margins in millimeters
renderer.RenderingOptions.MarginTop = 25.4 ' 1 inch
renderer.RenderingOptions.MarginBottom = 25.4
renderer.RenderingOptions.MarginLeft = 19.05 ' 0.75 inch
renderer.RenderingOptions.MarginRight = 19.05

renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Internal Report",
    .DrawDividerLine = True,
    .Spacing = 5
}

' Use print CSS media type for accurate page layout
' See MDN reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/print
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print

Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("margin-report.pdf")
$vbLabelText   $csharpLabel

Bunu, sayfa sınırlarına göre pozisyonları hesaplamanız ve içeriğin başlık veya altbilgilerle çakışmadığını manuel olarak doğrulamanız gereken iTextSharp'ın koordinat tabanlı yaklaşımıyla karşılaştırın.

Sıradaki Adımlarınız Neler?

PDF belgelerine üst bilgiler ve altbilgiler eklemek, karmaşık olay işleme ve koordinat hesaplamalarını içermek zorunda değildir. iTextSharp'ın yaklaşımı sayfa olayları ve doğrudan içerik manipülasyonu ile ayrıntılı kontrol sunarken, IronPDF özellik tabanlı yapılandırma ve yerel HTML desteği ile daha sezgisel bir çözüm sağlar.

Geliştirme hızı, bakımı ve profesyonel görünümlü belgeler üretmenin kolaylığını düşündüğünüzde seçim netleşir. IronPDF'ın başlık ve alt bilgi yaklaşımı, modern PDF üretimini örnekler -- güçlü ancak erişilebilir. Takımlar temiz mimari ve sürdürülebilir kodu öncelikli olarak kabul ettiginde, IronPDF'in API'si .NET geliştirme uygulamaları ile iyi bir uyum içindedir.

Uretim sistemleri icin temel avantajlar sunlardir:

Azaltılmış Geliştirme Süresi: Mülkiyet tabanlı yapılandırma vs. karmaşık olay işleyiciler

  • Daha İyi Bakım Kolaylığı: Koordinat hesaplamaları yerine düzenler için HTML/CSS
  • Gelişmiş Esneklik: duyarlı tasarımlar ve web yazı tipleri için yerel destek
  • Üstün Performans: Önbelleğe alma ve paralel işleme desteği ile optimize edilmiş render
  • Profesyonel Sonuçlar: Modern web standartlarına uygun piksel mükemmelliğinde çıktı

NuGet ile IronPDF kurarak başlayın, ardından ilk üstbilgi ve altbilginizi birkaç dakika içinde oluşturmak için hızlı başlangıç kılavuzu ile devam edin. Üretime geçmeye hazır olduğunuzda, dağıtım gereksinimlerinize uyan planı bulmak için lisanslama seçeneklerini inceleyin. Entegrasyon sırasında herhangi bir şeyle karşılaşırsanız, destek ekibi yardıma hazırdır.

Lütfen dikkate aliniTextSharp, ilgili sahibine ait tescilli bir marka. Bu site, iTextSharp ile ilişkili, onaylanmış veya desteklenmiş değildir. Tüm ürün adları, logolar ve markalar ilgili sahiplerine aittir. Karşılaştırmalar yalnızca bilgilendirme amaçlıdır ve yazım sırasında kamuya açık bilgileri yansıtır.

Sıkça Sorulan Sorular

IronPDF ve iTextSharp'un başlık ve altbilgiler eklemek için temel farklılıkları nelerdir?

IronPDF, yerel HTML desteğine sahip özelliğe dayalı bir API kullanırken, iTextSharp manuel koordinat hesaplamalarıyla PdfPageEventHelper uygulanmasını gerektirir. IronPDF ayrıca sayfa numaraları, tarihler ve URL'ler için yerleşik yer tutucular sağlar.

IronPDF sayfa başlığı eklemeyi nasıl basitleştirir?

IronPDF, ChromePdfRenderer.RenderingOptions üzerindeki TextHeaderFooter veya HtmlHeaderFooter özellikleri aracılığıyla başlık yapılandırmanıza olanak tanır, böylece sayfa olaylarını ele almanıza veya piksel pozisyonları hesaplamanıza gerek kalmaz.

IronPDF'da başlıkları özelleştirme için HTML kullanmak mümkün mü?

Evet, IronPDF, HtmlHeaderFooter sınıfı aracılığıyla HTML tabanlı başlıklar ve altbilgiler destekler, tam CSS stilizasyonu, resimler ve {page} ve {total-pages} gibi dinamik yer tutucular sağlar.

IronPDF'un iş raporları için kullanılmasının yararları nelerdir?

IronPDF, özelliğe dayalı yapılandırma ile uygulanma süresini kısaltır, sayfa numaraları ve tarihler için dinamik yer tutucuları destekler ve bir Chromium motoru kullanarak başlıkları piksel hassasiyeti ile render eder.

IronPDF, başlık ve altbilgilerde sayfa numaralandırmayı halledebilir mi?

Evet, IronPDF, {page} ve {total-pages} gibi yerleşik yer tutucular üzerinden sayfa numaralandırmayı otomatik olarak halleder ve iki geçişli render gerektirmez.

IronPDF, kullanım kolaylığı bakımından iTextSharp'a kıyasla nasıl bir fark oluşturur?

IronPDF genellikle daha kolay kullanılabilir çünkü düşük düzeyli koordinat tabanlı olay işleyicilerini beyanlaştırıcı bir özelliğe dayalı API ile değiştirir ve düzen için HTML/CSS destekler.

IronPDF başlıklarda dinamik içerik destekler mi?

Evet, IronPDF metin ve HTML başlıklarda yerleşik yer tutucular ({page}, {total-pages}, {date}, {time}, {html-title}, {url}) ile dinamik içerik destekler.

IronPDF'u dokümantasyon projeleri için daha uygun yapan nedir?

IronPDF'un HTML başlık desteği, tutarlı stil, şirket markalaması ve kolay güncellemelerin önemli olduğu dokümantasyonlar için onu ideal kılar. Değişiklikler, sayısal koordinat sabitleri yerine HTML düzenlemeleri gerektirir.

IronPDF'u özel başlıklı faturalar için kullanabilir miyim?

Evet, IronPDF, logolar, stilize metin ve dinamik alanlarla özelleştirilmiş HTML başlıkları destekler ve faturalar için iyi bir uyum sağlar.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara