IRONSOFTWAREHOME
IRONPDF KULLANARAK

Selenium WebDriver C#'ta PDF Dosyalarini Alisilagelmis Karışıklik Olmadan Okuyun

Curtis Chau
Curtis Chau
Updated: 23 Nisan 2026

Blazor web uygulamaları için PDF belgelerini yeni bir tarayıcı sekmesinde açmak yaygın bir gerekliliktir. Bu eğitim, PDF'leri IronPDF kullanarak nasıl oluşturacağınızı ve kullanıcı deneyimini kesintisiz hale getirmek için JavaScript interopu kullanarak yeni sekmelerde nasıl görüntüleyeceğinizi gösterir. Bu örnek, Blazor Server sürümüne odaklanmaktadır.

Ön Koşullar ve Kurulum

Visual Studio 2022'de yeni bir Blazor Server projesi oluşturarak başlayın. IronPDF'yi NuGet Paket Yöneticisi Konsolu aracılığıyla yükleyin:

PM > Install-Package IronPdf

Tam işlevselliği etkinleştirmek için IronPDF lisansınızı Program.cs dosyasında yapılandırın:

License.LicenseKey = "YOUR-LICENSE-KEY";

Zorluğu Anlamak

Blazor Server uygulamaları sunucu tarafındaki C# kodundan doğrudan tarayıcı sekmelerini düzenleyemez. Blazor'da yeni pencerede PDF açma görevi, sunucu tarafı PDF oluşturma ile istemci tarafı pencere yönetimini birleştirmek için JavaScript InterOp (JS interop) gerektirir.

IronPDF, geliştiricilerin sunucuda yüksek kalitede PDF belgeleri oluşturmasını sağlıyor, bu belgeler ardından JavaScript'in window.open() işlevi kullanılarak görüntülenebilir. Bu yaklaşım, bir net uygulamasında yaygın çözüm isteyen bir istemci-sunucu sorununu çözmek anlamına gelir.

Blazor Web Uygulamanızda JavaScript İşlevlerini Uygulamak

PDF görüntülemesini yeni tarayıcı sekmelerinde yönetmek için bu JavaScript kodunu _Host.cshtml dosyanıza ekleyin. Bu, istemci tarafı pencere yönetimi için sorumlu modüldür:

<script>
    window.openPdfInNewTab = function (pdfData, fileName) {
        // Convert base64 to blob
        const byteCharacters = atob(pdfData);
        const byteNumbers = new Array(byteCharacters.length);
        for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }
        const byteArray = new Uint8Array(byteNumbers);
        // The type is 'application/pdf', not 'image/png' or 'image/jpg'
        const blob = new Blob([byteArray], { type: 'application/pdf' });
        // Create URL and open in new tab
        const blobUrl = URL.createObjectURL(blob);
        const newWindow = window.open(blobUrl, '_blank');
        if (newWindow) {
            newWindow.document.title = fileName || 'PDF Document';
        }
        // Clean up
        setTimeout(() => URL.revokeObjectURL(blobUrl), 100);
        return newWindow !== null;
    };
</script>

window.openPdfInNewTab JavaScript işlevi, sunucudan yeni bir sekme açma sorununu çözmek için önemlidir. Blazor sunucusundan bir Base64 dizesi olarak PDF verilerini kabul eder ve istemci tarafı kod, bunu bir ikili Blob nesnesine dönüştürür.

Bu blob daha sonra geçici bir URL oluşturmak için kullanılır ve bu URL son olarak window.open(blobUrl, '_blank') ile tarayıcıyı yeni bir sekmede PDF açmaya zorlar.

Blazor Bileşeni Oluşturma

PDF'ler oluşturan ve yeni sekmelerde açan yeni bir Razor bileşeni oluşturun. Bu, çözüm için ana şablon görevi görür:

@page "/pdf-viewer"
@using IronPDF @inject IJSRuntime JS
<h3>Open PDF in New Tab</h3>
<div class="mb-3">
    <label>Enter URL:</label>
</div>
<button class="btn btn-primary" @onclick="GenerateAndOpenPdf"
        disabled="@isProcessing">
    @if (isProcessing)
    {
        <span>Generating PDF...</span>
    }
    else
    {
        <span>Generate and Open PDF</span>
    }
</button>
@if (!string.IsNullOrEmpty(errorMessage))
{
    <div class="alert alert-danger mt-3">@errorMessage</div>
}
@code {
    private string targetUrl = "https://ironpdf.com";
    private bool isProcessing = false;
    private string errorMessage = "";
    private async Task GenerateAndOpenPdf()
    {
        isProcessing = true;
        errorMessage = "";
        try
        {
            // Configure Chrome PDF renderer. Note the rendering details
            var renderer = new ChromePdfRenderer
            {
                RenderingOptions = new ChromePdfRenderOptions
                {
                    MarginTop = 10,
                    MarginBottom = 10,
                    MarginLeft = 10,
                    MarginRight = 10,
                    EnableJavaScript = true,
                    RenderDelay = 500
                }
            };
            // Generate PDF from URL
            var pdfDocument = await Task.Run(() =>
                renderer.RenderUrlAsPdf(targetUrl));
            // Convert to base64
            byte[] pdfBytes = pdfDocument.BinaryData;
            string base64Pdf = Convert.ToBase64String(pdfBytes);
            // Open in new tab via JS interop. We run this call to open the PDF
            bool success = await JS.InvokeAsync<bool>("openPdfInNewTab",
                base64Pdf, $"Document_{DateTime.Now:yyyyMMdd_HHmmss}.pdf");
            if (!success)
            {
                // Giving the user an understandable error is key
                errorMessage = "Pop-up blocked. Please allow pop-ups for this site.";
            }
        }
        catch (Exception ex)
        {
            errorMessage = $"Error: {ex.Message}";
        }
        finally
        {
            isProcessing = false;
        }
    }
}

Bu kod bloğu ana etkileşimli sayfayı tanımlar. Razor işaretlemesi, bir URL giriş alanı ve bir düğme ile basit bir kullanıcı arayüzü oluşturur. C# @code bloğu mantığı yönetir: düğmeye tıklandığında, kullanıcının sağladığı URL'den PDF oluşturmak için bir ChromePdfRenderer örneği kullanır.

Daha sonra, ortaya çıkan PDF bayt dizisini bir Base64 dizesine dönüştürür ve belgeyi kullanıcıya açmak için JavaScript işlevini çağırmak üzere @inject IJSRuntime JS kullanır.

Kullanıcı Arayüzü Çıkışı

IronPDF ile yeni sekmede PDF açma: Bir Geliştırici Eğitimi: Görüntü 1 - Temel UI örneği

Yeni Sekmede PDF Açılmış Çıktı

IronPDF ile yeni sekmede PDF açma: Bir Geliştirici Eğitimi: Görüntü 2 - Yeni sekmede ilk açılan PDF

Dinamik HTML İçeriğiyle Çalışma

URL yerine dinamik içerikten PDF oluşturmak için yaklaşımınızı RenderHtmlAsPdf kullanacak şekilde değiştirin:

private async Task GenerateFromHtml()
{
    // Define CSS styles inside the HTML string for structure and appearance.
    string htmlContent = $@"
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{font-family: Arial; padding: 20px;}}
                h1 {{color: #2c3e50;}}
            </style>
        </head>
        <body>
            <h1>{documentTitle}</h1>
            <p>{documentContent}</p>
            <div>Generated: {DateTime.Now}</div>
        </body>
        </html>";
    var renderer = new ChromePdfRenderer();
    var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
    byte[] pdfBytes = pdfDocument.BinaryData;
    await JS.InvokeVoidAsync("openPdfInNewTab",
        Convert.ToBase64String(pdfBytes), "dynamic.pdf");
}
C#

GenerateFromHtml yöntemi, IronPDF'in mevcut bir URL yerine dinamik olarak oluşturulmuş HTML işaretlemesinden bir PDF nasıl oluşturabileceğini gösterir. Bir başlık, içerik ve dinamik veri içeren tam bir HTML dizesi oluşturur. Dinamik içerik oluşturmanın cevabı RenderHtmlAsPdf yöntemidir.

Güncellenmiş Blazor Server Kullanıcı Arayüzü

IronPDF ile yeni sekmede PDF açma: Bir Geliştirici Eğitimi: Görüntü 3 - Sunucu projeniz için güncellenmiş örnek UI

Yeni Tarayıcı Sekmesinde Açılmış PDF

IronPDF ile yeni sekmede PDF açma: Bir Geliştirici Eğitimi: Görüntü 4 - Oluşturulan ve ardından yeni bir sekmede açılan dinamik PDF örneği

Yaygın Sorunlarla Baş Etmek

Tarayıcılar Arası Uyumluluk

Farklı tarayıcılar blob URL'lerini farklı şekilde işler. Tutarlı bir davranış sağlamak için uygulamanızı Chrome, Firefox, Edge ve Safari üzerinde test edin.

Büyük Dosyalar

Büyük PDF belgeleri için performansı artırmak amacıyla sunucu tarafında önbellekleme olanağı düşünün:

services.AddMemoryCache();
// Cache generated PDFs to avoid regeneration

Gezinme Alternatifleri

JavaScript interop dışında, statik dosya ara yazılımı aracılığıyla PDF'leri sunabilir ve alternatif bir gezintite kapısı olarak standart HTML köprü etiketlerini kullanabilirsiniz:

<a href="/pdfs/document.pdf" target="_blank">Open PDF</a>

Bu yaklaşım önceden oluşturulmuş PDF'lerde iyi çalışır, ancak JS InterOp yönteminin dinamik oluşturma yeteneklerinden yoksundur.

En İyi Uygulamalar

  1. Hata Yönetimi: PDF oluşturmayı her zaman try-catch bloklarına sarın ve bir sorun olduğunda kullanıcılara anlamlı hata mesajları verin.
  2. Performans: PDF oluşturulması sırasında UI'nizi engellememek için async/await modellerini kullanın.
  3. Kullanıcı Deneyimi: Oluşum sırasında yükleme göstergelerini gösterin ve açılır pencere engelleyici senaryolarını zarif bir şekilde ele alın.
  4. DOM Manipülasyonu: Sunucudaki C#'ın, istemcinin DOM'unu doğrudan manipüle edemeyeceğini unutmayın; bu nedenle JS InterOp şarttır. Tarayıcının PDF görüntüleyicisini yönettiği için yeni pencerenin yüksekliğini veya genişliğini manuel olarak ayarlamanıza gerek yok.
  5. Güvenlik: PDF oluşturmadan önce kullanıcı girdisini doğrulayın ve temizleyin

Sonuç

IronPDF'nin güçlü PDF oluşturma yeteneklerini Blazor'un JavaScript InterOp ile birleştirmek, yeni tarayıcı sekmelerinde PDF açmak için sağlam bir çözüm sunar. Bu yaklaşım, Microsoft tarafından .NET teknolojisi üzerine kurulan modern Blazor uygulamalarıyla sorunsuz bir şekilde entegre olan dinamik, profesyonel PDF belgeleri oluşturmayı geliştiricilere olanak tanır.

Blazor projenizde PDF işlevselliğini uygulamaya hazır mısınız? Ücretsiz IronPDF denemenize bugün başlayın. Deneme, başarıya ulaşmanızı sağlamak için eksiksiz işlevsellik, filigranlar olmadan ve kapsamlı destek içerir.

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