IRONSOFTWAREHOME
PDF ARAÇLARI

PDF ve PDF/A (Karşılaştırma ve Nasıl Kullanılır)

Curtis Chau
Curtis Chau
Updated: 20 Haziran 2026

iText "belgenin sayfası yok" hatası XMLWorker'ın HTML içeriğini işleyememesi durumunda ortaya çıkar, ancak IronPDF'in Chrome tabanlı işleyicisi bu sorunu ortadan kaldırarak, tarayıcılar gibi HTML işleyerek parse hatalarına yol açmadan güvenilir PDF oluşturması sağlar.

.NET uygulamalarında HTML'i PDF'e dönüştürmek yaygın bir gerekliliktir, ancak iText kullanan geliştiriciler sıklıkla "belgenin sayfası yok" hatasıyla karşılaşır. Bu hata, PDF belge oluşturma süreci başarısız olduğunda ortaya çıkar ve geliştiricileri çözüm arayışına yönlendirir. Bu analiz, bunun neden olduğunu ve .NET'nin HTML'den PDF'ye dönüştürme yetenekleri ile nasıl etkili bir şekilde çözülebileceğini keşfeder.

"Belge Sayfa İçermiyor" Hatasına Ne Sebep Olur?

"belgenin sayfası yok" istisnası, iText'in ayrıştırıcısının HTML içeriğini geçerli bir PDF belgesine dönüştürememesi durumunda ortaya çıkar. Bu hata genellikle belge kapatma işlemi sırasında, bu sorunla ilgili birçok Stack Overflow başlığında açıklandığı gibi ortaya çıkar. Kökteki nedeni anlamak, geliştiricilerin ihtiyaçları için doğru PDF kütüphanesini seçmelerine yardımcı olur.

Hata, XMLWorker -- iText'in HTML ayrıştırma bileşeni -- işleyemediği HTML yapıları ile karşılaştığında sessizce başarısız olması nedeniyle ortaya çıkar. Ayrıştırma sırasında bir istisna yükseltmek yerine, boş bir belge üretir. Belge kapandığında, iText hiçbir içerik yazılmadığını tespit eder ve "belgenin sayfası yok" istisnası fırlatır. Bu sessiz hata modu, yığın izlemesinin gerçek ayrıştırma hatası yerine kapanış işlemini işaret etmesi nedeniyle hata ayıklamayı özellikle sinir bozucu hale getirir.

static void Main(string[] args)
{
    Document pdfDoc = new Document(PageSize.A4);
    FileStream stream = new FileStream("output.pdf", FileMode.Create);
    PdfWriter writer = PdfWriter.GetInstance(pdfDoc, stream);
    pdfDoc.Open();
    // HTML parsing fails silently -- no exception here
    var sr = new StringReader("<div>Complex HTML</div>");
    XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
    pdfDoc.Close(); // Exception: The document has no pages
    Console.WriteLine("Error: Document has no pages");
}

Bu Hata Meydana Geldiğinde Konsol Çıktısı Ne Gösterir?

Windows Visual Studio Hata Ayıklama Konsolu 'Belgenin sayfası yok' hata mesajını koyu zemin üzerinde pembe başlık altında gösteriyor, yığın izleme detaylarını ve PDF oluşturulurken HTML ayrıştırması başarısız olduğunda ortaya çıkan iText XMLWorker istisnasını içeriyor

Bu kod, HTML'den bir PDF dosyası oluşturmayı deniyor ancak XMLWorker, HTML içeriğini başarıyla ayrıştıramadığı için bir istisna ile karşılaşılıyor. Yazma işlemi tamamlanır, ancak belgeye herhangi bir içerik eklenmez ve sonuçta boş bir dosya oluşur. Bu ayrıştırma hatası, geliştiricilerin ASP.NET uygulamalarında HTML'den PDF'ye dönüşüm yaparken karşılaştığı en yaygın sorunlardan biridir. Özelleştirilmiş CSS stilleri veya JavaScript ile oluşturulan içerikle uğraşırken sorun daha karmaşık hale gelir.

Yerine Geçen Kütüphane Neden Aynı Sorunu Yaşıyor?

Her ne kadar XMLWorker, kullanım dışı bırakılan HTMLWorker'ın yerini almış olsa da, hala belirli HTML yapılarıyla aynı sorunla karşılaşmaktadır. XMLWorker'ın katı ayrıştırma gereksinimleri olduğu için sorun devam ediyor, bu durum iText'in resmi forumlarında belgelenmiştir. Bu sınırlama, modern web uygulamalarında piksel mükemmeliyetinde HTML'den PDF'e dönüştürme yapmaya çalışan veya duyarlı CSS düzenleriyle çalışan geliştiricileri etkiler.

Yaygın bir çözüm, HTML ayrıştırmadan önce belgeyi boş bir paragrafla önceden doldurmaktır. Bu, belge kapandığında en az bir içerik öğesi bulunduğundan emin olarak "sayfa yok" istisnasını önler:

public static void CreatePDF(string html, string path)
{
    using (var fs = new FileStream(path, FileMode.Create))
    {
        var document = new Document();
        var writer = PdfWriter.GetInstance(document, fs);
        document.Open();
        document.Add(new Paragraph("")); // Workaround to avoid error
        var phrase = new Phrase("Draft version", FontFactory.GetFont("Arial", 8));
        document.Add(phrase);
        using (var sr = new StringReader(html))
        {
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, sr);
        }
        document.Close();
    }
}

Bu Geçici Çözümle PDF Çıktısı Nasıl Görünür?

Başarıyla 'Merhaba, Dünya!' başlığını ve 'Taslak versiyonu' üst bilgisini ve test içeriğini gösteren PDF oluşturuldu, XMLWorker'ın boş paragraf çözümünü uygulayarak 'Belge sayfası yok' hatasını önledikten sonra başarılı HTML renderini gösteriyor

Neden Karmaşık HTML Öğeleri Hâlâ İşlenemiyor?

Boş bir paragraf eklemek anında hatayı önler, ancak tablo elemanları, resimler veya özel yazı tipleri içeren karmaşık HTML genellikle doğru şekilde işlenemez. İçerik, ortaya çıkan PDF belgesinde eksik veya hatalı olabilir. Geliştiriciler, gömülü stiller, köprü elementleri veya belirli genişlik özellikleri içeren HTML'yi işlerken aynı sorunla karşılaşır. Boş referanslar ve eksik eleman oluşturma, ek çözümler gerektiren ilave sorunlar yaratır.

XMLWorker, HTML 4 ve temel CSS 2'nin bir alt kümesini ele alacak şekilde tasarlanmıştır. Modern web sayfaları bu kapsamın çok ötesinde özellikler kullanır: CSS Grid, Flexbox, CSS değişkenleri, calc() ifadeleri, SVG grafikleri ve JavaScript destekli işleme. Bunlardan herhangi biri "sayfa yok" hatasını tetikleyebilir veya sessizce bozuk çıktı üretebilir -- ve düzeltmeye yönelik açıklayıcı bir hata mesajı olmadan.

// Common XMLWorker limitations that require manual handling
public void ProcessComplexHTML(string htmlContent)
{
    // CSS flexbox -- not supported by XMLWorker
    if (htmlContent.Contains("display: flex"))
        throw new NotSupportedException("Flexbox layout not supported");

    // JavaScript content -- silently ignored
    if (htmlContent.Contains("<script>"))
        Console.WriteLine("Warning: JavaScript will be ignored");

    // Özel yazı tipleri -- require manual embedding
    if (htmlContent.Contains("@font-face"))
        Console.WriteLine("Warning: Web fonts need manual setup");
}
C#

Aynı Hata Olmadan Modern HTML Nasıl Dönüştürülür?

Bu gerçek dünya senaryosu, biçimlendirilmiş bir faturanın HTML'den PDF'e dönüştürülmesini gösterir. Bu örnek, CSS satır içi, medya sorguları, tablo düzenleri ve köprüler gibi genellikle sorun yaratan ortak unsurları içerir. Bunlar, XMLWorker'da 'hiçbir sayfa yok' hatasını tetikleyen türdeki yapılardır:

<!-- Invoice HTML with modern styling -->
<!DOCTYPE html>
<html>
<head>
    <title>Invoice Sample</title>
    <style>
        .invoice-header {
            background-color: #f0f0f0;
            padding: 20px;
        }
        .invoice-table {
            margin-top: 20px;
        }
        @media print {
            .no-print { display: none; }
        }
    </style>
</head>
<body>
    <div style="font-family: Arial; width: 100%;">
        <div class="invoice-header">
            <h1 style="color: #2e6c80;">Invoice #12345</h1>
            <p>Date: <span id="date">2025-01-15</span></p>
        </div>
        <table class="invoice-table" style="width: 100%; border-collapse: collapse;">
            <thead>
                <tr>
                    <th style="border: 1px solid #ddd; padding: 8px;">Item</th>
                    <th style="border: 1px solid #ddd; padding: 8px;">Price</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td style="border: 1px solid #ddd; padding: 8px;">Service</td>
                    <td style="border: 1px solid #ddd; padding: 8px;">$100.00</td>
                </tr>
            </tbody>
        </table>
        <a href="https://example.com/terms" class="no-print">View Terms</a>
    </div>
</body>
</html>
HTML

iText Bu Faturayı İşlediğinde Ne Olur?

Temel invoice PDF displaying Invoice #12345 with simple table formatting containing one service item for $100, demonstrating iText's limited CSS styling capabilities and basic table rendering when XMLWorker successfully processes simple HTML structures

iText bu fatura taslağını işlediğinde, çıktı genellikle CSS stilinden yoksun, arka plan renkleri eksik ve tablo kenarları kaybolmuş olur. @media print sorgusu görmezden gelinir ve herhangi bir web fontu referansı sessiz ayrıştırma hatalarına neden olur. HTML'de XMLWorker'ın tanımadığı bir CSS özelliği varsa, tüm blok işlenemeyebilir - ve bu, hiçbir hata atmadan eksik içerikle sonuçlanabilir.

IronPDF Aynı Faturayı Nasıl İşliyor?

Professional invoice PDF #12345 rendered with IronPDF showing preserved CSS styling, properly formatted table with service item for $100, and functioning 'View Terms' hyperlink, demonstrating the Chrome rendering engine's superior HTML/CSS support compared to XMLWorker

Bu HTML Elemanları iText'te Neden Sorunlara Neden Olur?

iText'in XMLWorker'ı ile bu fatura, tablo stilleri, genişlik özellikleri veya yazı tipi spesifikasyonları nedeniyle başarısız olabilir. 'Belgede sayfa yok' hatası genellikle bu öğeler desteklenmediğinde görünür. Köprüler ve medya sorgusu referansları da doğru şekilde işlenmeyebilir. Bu sınırlamalar, dijital imzalar veya iş uygulamalarında sayfa numaraları gibi ileri düzey PDF özellikleri uygularken kritik hale gelir.

Mozilla Geliştirici Ağı'nın CSS üzerindeki belgelerine göre, modern CSS tarayıcılar tarafından doğal olarak desteklenen yüzlerce özelliğe ve değere sahiptir. XMLWorker bunların yalnızca küçük bir kısmını kapsar, bu yüzden gerçek dünya web içeriği sürekli olarak çözümleme hatalarını tetikler.

Çözümleme Hatası Olmadan HTML'yi PDF'e Nasıl Dönüştürürsünüz?

IronPDF, HTML'yi web tarayıcısında göründüğü haliyle işleyen bir Chrome tabanlı motor kullanır. Bu yaklaşım, çözümleme hatalarını ortadan kaldırır ve tüm modern HTML ve CSS özelliklerini destekler. Konfigürasyon seçeneklerinin tam listesini görmek için ChromePdfRenderer API referansına göz atabilirsiniz. Chrome motoru, XMLWorker'ın işleyemediği JavaScript çalıştırmayı, web yazı tiplerini ve duyarlı düzenleri destekler.

IronPDF'i NuGet Üzerinden Nasıl Yüklerim?

Kod yazmadan önce .NET NuGet paketini yükleyin. .NET CLI üzerinden bunu yapabilirsiniz:

dotnet add package IronPdf

Veya Visual Studio'daki NuGet Paket Yöneticisi Konsolu'ndan:

PM > Install-Package IronPdf

Yüklendikten sonra, iText + XMLWorker hattını eksiksiz ve güvenilir bir çağrı ile değiştiren ChromePdfRenderer erişiminiz olur.

IronPDF ile HTML'yi PDF'e Nasıl İşlersiniz?

Aşağıdaki örnek, iText'te hatalara neden olan aynı fatura HTML'ini işler. Dikkat edin, hiçbir çözüm yolu, eklemeniz gereken boş paragraflar ya da yönetilecek sessiz hatalar yoktur:

using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Configure rendering options for production use
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;

string html = @"<div style='font-family: Arial; width: 100%;'>
    <h1 style='color: #2e6c80;'>Invoice #12345</h1>
    <table style='width: 100%; border-collapse: collapse;'>
        <tr>
            <th style='border: 1px solid #ddd; padding: 8px;'>Item</th>
            <th style='border: 1px solid #ddd; padding: 8px;'>Price</th>
        </tr>
        <tr>
            <td style='border: 1px solid #ddd; padding: 8px;'>Service</td>
            <td style='border: 1px solid #ddd; padding: 8px;'>$100.00</td>
        </tr>
    </table>
</div>";

PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");

IronPDF Çıkışı Nasıl Görünür?

İki kolonlu tablo içeren ve öğe ile fiyat başlıkları olan düzgün biçimlendirilmiş Fatura #12345'i gösteren temiz profesyonel fatura PDF'si, IronPDF'in çözümleme hatası veya biçimlendirme sorunları olmadan güvenilir HTML tablo işleme yeteneğini gösteriyor

Bu Yaklaşım Çözümleme Hatalarını Neden Ortadan Kaldırır?

Bu kod herhangi bir istisna olmadan PDF dosyasını başarıyla oluşturur. Yöntem karmaşık HTML ve CSS'yi otomatik olarak ele alır, dolayısıyla geçici çözümlere gerek kalmaz. İçerik piksel mükemmelliğiyle, tarayıcı önizlemesiyle uyumlu olarak işlenir. IronPDF ayrıca asenkron işleme desteği, özel marjinler ve PDF sıkıştırma özellikleri sunarak optimize edilmiş dosya boyutları sağlar.

JavaScript ağırlıklı içerik veya tek sayfalı uygulamalar içeren senaryolar için, IronPDF'in RenderDelay seçeneği, PDF yakalanmadan önce JavaScript'in çalışmasına izin verir -- XMLWorker'ın bunu yapması mümkün değildir. Aşağıdaki örnek, üretime hazır asenkron bir modelde üstbilgiler, altbilgiler ve güvenlik ayarlarını ekler:

using IronPdf;
using Microsoft.Extensions.Logging;

// Production-ready PDF generation with IronPDF
public class PdfGenerator
{
    private readonly ChromePdfRenderer _renderer;
    private readonly ILogger<PdfGenerator> _logger;

    public PdfGenerator(ILogger<PdfGenerator> logger)
    {
        _logger = logger;
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.Timeout = 60;
        _renderer.RenderingOptions.EnableJavaScript = true;
        _renderer.RenderingOptions.RenderDelay = 2000;
        _renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
        {
            Height = 25,
            HtmlFragment = "<div style='text-align: center;'>{page} of {total-pages}</div>"
        };
    }

    public async Task<PdfDocument> GenerateWithRetry(string html, int maxRetries = 3)
    {
        for (int i = 0; i < maxRetries; i++)
        {
            try
            {
                _logger.LogInformation("Generating PDF, attempt {Attempt}", i + 1);
                return await _renderer.RenderHtmlAsPdfAsync(html);
            }
            catch (Exception ex)
            {
                _logger.LogWarning("PDF generation failed: {Message}", ex.Message);
                if (i == maxRetries - 1) throw;
                await Task.Delay(1000 * (i + 1));
            }
        }
        throw new InvalidOperationException("PDF generation failed after retries");
    }
}

Güvenilir PDF Oluşturma İçin En İyi Çözüm Nedir?

HTML'yi PDF'e dönüştürmek için kullanılan iki kütüphaneyi karşılaştırırken, yetenek farklılıkları doğrudan PDF kalitesini ve dağıtım güvenilirliğini etkiler:

Özellik karşılaştırması: XMLWorker ile iText vs. IronPDF
ÖzellikiText + XMLWorkerIronPDF
Modern HTML/CSS desteğiSınırlı (HTML 4, CSS 2)Tam (Chrome işleme motoru)
JavaScript yürütmeHayırEvet
Hata işlemeÇözümleme hataları yaygınGüvenilir işleme
Karmaşık tablolarGenellikle başarısızTam destek
Özel yazı tipleriElle gömülmesi gerekliOtomatik işleme
SVG desteğiHayırEvet
Asenkron işlemeHayırEvet
Docker/Linux desteğiSınırlıTam doğal destek
CSS medya türleriTemelEkran ve Baskı
Hata ayıklama araçlarıSınırlıChrome DevTools entegrasyonu

iText'ten IronPDF'e Nasıl Geçiş Yaparsınız?

'Belgede sayfa yok' hatası yaşayan geliştiriciler için IronPDF'e geçiş, anında bir çözüm sunar. Dönüşüm süreci basittir ve IronPDF tam belgeleme ve kod örnekleri sunar. Aşağıdaki öncesi ve sonrası karşılaştırması, karmaşıklıkta azalmayı gösterir:

// Before (iTextSharp) -- error-prone approach requiring workarounds
public byte[] CreatePdfWithIText(string htmlContent)
{
    using var ms = new MemoryStream();
    var document = new Document();
    var writer = PdfWriter.GetInstance(document, ms);
    document.Open();

    // Must add empty paragraph to avoid "no pages" error
    document.Add(new Paragraph(""));

    try
    {
        using var sr = new StringReader(htmlContent);
        XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, sr);
    }
    catch (Exception ex)
    {
        document.Add(new Paragraph("Error: " + ex.Message));
    }

    document.Close();
    return ms.ToArray();
}

// After (IronPDF) -- reliable, no workarounds needed
public byte[] CreatePdfWithIron(string htmlContent)
{
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.RenderDelay = 500;

    PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
    return pdf.BinaryData;
}

IronPDF'in API'sini Daha Geliştirici Dostu Yapan Nedir?

Basitleştirilmiş API, daha az kod bakımı ve çözümleme hatası ayıklaması gerektirmediği anlamına gelir. IronPDF ayrıca üstbilgiler ve altbilgiler ekleme , PDF'leri birleştirme, ve dijital imza uygulama gibi özellikler sunar ve karmaşık geçici çözümler gerektirmez. Docker ortamlarında çalışan veya Linux sunucularına dağıtım yapan ekipler için, IronPDF platformlar arasında tutarlı davranış sergiler.

NuGetNuGet ile yükleyin

PM > Install-Package IronPdf

Install IronPDF by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

Ücretsiz denemenizi başlatın ve hatasız HTML'den PDF'e dönüşüm tecrübesi yaşayın.

Sonraki Adımlarınız Neler?

"belgenin sayfası yok" hatası, iText'in XMLWorker'ına yapılandırılmış temel parsing sınırlamalarından kaynaklanır. Çözüm yolları var olsa da - belgelere boş bir paragrafla önceden dolum yapmak gibi - karmaşık HTML işleme ile altta yatan sorunu çözmezler. IronPDF'in Chrome tabanlı işleme motoru, modern web içeriğini çözümleme hataları olmadan ele alan güvenilir bir çözüm sunar.

HTML'den tutarlı şekilde PDF oluşturması gerektiren üretim uygulamaları için, IronPDF çözümleyici hatalarını ayıklama sıkıntısını ortadan kaldırır ve profesyonel sonuçlar sunar. Motor, tüm HTML öğeleri, CSS stillerini ve JavaScript'i işler ve belgelerin her seferinde doğru şekilde işlenmesini sağlar. İster faturalar, raporlar veya metin, tablolar ve görüntüler içeren herhangi bir belge oluşturuyor olun, IronPDF ihtiyaç duyduğunuz çözümü sunar.

İleri hareket etmek için önerilen bir sonraki adımlar şunlardır:

Lütfen dikkate alın: iText ve XMLWorker, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site, iText veya XMLWorker tarafından desteklenmemekte veya onaylanmamaktadır. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez