.NET'te PDF'ten Veri Nasıl Çıkarilir
Blazor'da Yeni Sekmede PDF Nasıl Açılır
Blazor Server uygulamalarından yeni tarayıcı sekmelerinde PDF açmak için, sunucu tarafında PDF oluşturma için IronPDF'yi ve istemci tarafı pencere yönetimini yönetmek için JavaScript interop kullanın, sınır ötesi iletişim sorununu çözün.
Blazor web uygulamaları için PDF belgelerini yeni bir tarayıcı sekmesinde açmak yaygın bir gerekliliktir. Bu öğretici, IronPDF kullanarak PDF'lerin nasıl oluşturulacağını ve yeni sekmelerde JavaScript interop kullanarak nasıl görüntüleneceğini gösterir, kullanıcılara kesintisiz bir belge görüntüleme deneyimi sağlar. Bu örnek, Blazor Server sürümüne odaklanmaktadır.
Blazor Projem İçin Hangi Ön Koşullara İhtiyacım Var?
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:
Install-Package IronPdf
IronPDF lisansınızı Program.cs ile yapılandırarak tam işlevselliği etkinleştirin:
License.LicenseKey = "YOUR-LICENSE-KEY";
License.LicenseKey = "YOUR-LICENSE-KEY";
License.LicenseKey = "YOUR-LICENSE-KEY"
Tüm özellikleri açmak için bir lisans anahtarı uygulamanız gerekecektir. IronPDF, modern web uygulamaları için sağlam Blazor Server uygulamaları ile sorunsuz çalışır. IronPDF konusunda yeniyseniz, başlangıç adımlarına aşina olmanız için hızlı başlangıç kılavuzuna göz atın.
Blazor Neden PDF'leri Doğrudan Yeni Sekmelerde Açamaz?
Blazor Server uygulamaları sunucu tarafındaki C# kodundan doğrudan tarayıcı sekmelerini düzenleyemez. Blazor'dan yeni bir sekmede PDF açmak, 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 kaliteli PDF belgeleri oluşturmasını sağlar, ardından bu belgeler JavaScript'in window.open() işlevselliği ile görüntülenebilir. Bu yaklaşım, .NET uygulamalarındaki yaygın bir istemci-sunucu sınır sorununu çözer. Kütüphanenin Chrome işleme motoru, belgelerinizin görsel bütünlüğünü koruyarak piksel mükemmel HTML'den PDF'ye dönüştürme sağlar.
Blazor ve IronPDF ile çalışırken, JavaScript yürütmenin istemci tarafında gerçekleştiğini, PDF oluşturmanın ise sunucu tarafında olduğunu anlamak önemlidir. Bu ayrım, pencere yönetimi görevleri için JavaScript interop kullanılmasını zorunlu kılar.
Blazor Web Uygulama İçerişinde JavaScript İşlevlerini Nasıl Uygularım?
PDF görüntülemeyi yeni tarayıcı sekmelerinde ele almak için bu JavaScript kodunu _Host.cshtml dosyanıza ekleyin. Bu modül, istemci tarafı pencere işlemlerini yönetir:
<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>
<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 fonksiyonu sunucudan yeni bir sekme açmak için çok önemlidir. Blazor sunucusundan PDF verilerini Base64 dizesi olarak kabul eder ve istemci tarafı kodu bunu ikili Blob nesnesine dönüştürür. Bu yaklaşım, tarayıcının PDF içeriğini görüntülemesine olanak tanıyan PDF'yi Base64'e dönüştürmeye benzer, ancak tersine.
Sonrasında bu blob, geçici bir URL oluşturmak için kullanılır ve sonunda window.open(blobUrl, '_blank')'na iletilir, böylece tarayıcının PDF'yi yeni bir sekmede açması sağlanır. Blob URL tekniği, bellekten PDF yüklerken, sunucu tarafından dosya depolama gerektirmeden yaygın olarak kullanılır.
Gelişmiş güvenlik gerektiren uygulamalar için, belgeyi istemciye iletmeden önce PDF izinleri ve şifreleri uygulamayı düşünün. Belgenizin doğruluğunu sağlamak için dijital imzalar da keşfedebilirsiniz.
Blazor Bileşeni Nasıl Oluşturulur?
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>
<input @bind="targetUrl" class="form-control" />
</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 = "___PROTECTED_URL_69___";
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
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ığı ele alır: butona tıklanıldığında, kullanıcının sağladığı URL'den PDF oluşturmak için bir ChromePdfRenderer örneği kullanılır. İşleme seçenekleri, kenar boşluklarını özelleştirmeye, JavaScript işlemesini etkinleştirmeye ve dinamik içerikler için işleme gecikmeleri oluşturmaya olanak tanır.
Sonrasında, elde edilen PDF bayt dizisi Base64 dizesine dönüştürülür ve belgeyi kullanıcı için açan JavaScript fonksiyonunu çağırmak için @inject IJSRuntime JS kullanılır. Bu desen, web uygulamalarında URL'leri PDF'ye dönüştürmek için özellikle kullanışlıdır. Daha karmaşık senaryolar için, daha iyi performans için async PDF oluşturma uygulamayı düşünebilirsiniz.
PDF oluşturma etkinliklerini izlemek ve sorunları gidermek için özel günlükleme uygulamayı düşünün. PDF'lerinizi geliştirmek için filigranlar veya başlıklar ve altbilgiler ekleyebilirsiniz.
UI Nasıl Görünüyor?

PDF Yeni Bir Sekmede Nasıl Görüntüleniyor?

Dinamik HTML İçeriği İle Nasıl Çalışırım?
URL'ler yerine dinamik içerikten PDF oluşturmak için yaklaşımınızı RenderHtmlAsPdf kullanarak 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;}}
table {{border-collapse: collapse; width: 100%;}}
th, td {{border: 1px solid #ddd; padding: 8px;}}
</style>
</head>
<body>
<h1>{documentTitle}</h1>
<p>{documentContent}</p>
<table>
<tr>
<th>Item</th>
<th>Value</th>
</tr>
<tr>
<td>Generated</td>
<td>{DateTime.Now}</td>
</tr>
</table>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
byte[] pdfBytes = pdfDocument.BinaryData;
await JS.InvokeVoidAsync("openPdfInNewTab",
Convert.ToBase64String(pdfBytes), "dynamic.pdf");
}
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;}}
table {{border-collapse: collapse; width: 100%;}}
th, td {{border: 1px solid #ddd; padding: 8px;}}
</style>
</head>
<body>
<h1>{documentTitle}</h1>
<p>{documentContent}</p>
<table>
<tr>
<th>Item</th>
<th>Value</th>
</tr>
<tr>
<td>Generated</td>
<td>{DateTime.Now}</td>
</tr>
</table>
</body>
</html>";
var renderer = new ChromePdfRenderer();
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
byte[] pdfBytes = pdfDocument.BinaryData;
await JS.InvokeVoidAsync("openPdfInNewTab",
Convert.ToBase64String(pdfBytes), "dynamic.pdf");
}
Private Async Function GenerateFromHtml() As Task
' Define CSS styles inside the HTML string for structure and appearance.
Dim htmlContent As String = $"
<!DOCTYPE html>
<html>
<head>
<style>
body {{font-family: Arial; padding: 20px;}}
h1 {{color: #2c3e50;}}
table {{border-collapse: collapse; width: 100%;}}
th, td {{border: 1px solid #ddd; padding: 8px;}}
</style>
</head>
<body>
<h1>{documentTitle}</h1>
<p>{documentContent}</p>
<table>
<tr>
<th>Item</th>
<th>Value</th>
</tr>
<tr>
<td>Generated</td>
<td>{DateTime.Now}</td>
</tr>
</table>
</body>
</html>"
Dim renderer = New ChromePdfRenderer()
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
Dim pdfBytes As Byte() = pdfDocument.BinaryData
Await JS.InvokeVoidAsync("openPdfInNewTab", Convert.ToBase64String(pdfBytes), "dynamic.pdf")
End Function
GenerateFromHtml yöntemi, mevcut bir URL yerine dinamik olarak oluşturulmuş HTML işaretlemesinden IronPDF'in nasıl PDF oluşturabileceğini gösterir. Bir başlık, içerik ve dinamik veri içeren tam bir HTML dizesi oluşturur. RenderHtmlAsPdf yöntemi, dönüştürmeyi sorunsuz bir şekilde yönetir. Bu yaklaşım, veri tabanlarından veya API'lardan gelen dinamik verilerle PDF raporları oluşturmak için idealdir.
HTML içeriğinizi özel yazı tipleri, duyarlı CSS ve hatta gömülü resimler ile DataURIs'yi kullanarak geliştirebilirsiniz. Karmaşık düzenler için, tutarlı işleme sağlamak için Bootstrap ve Flexbox kullanmayı düşünün.
Uluslararası dillerle çalışırken, IronPDF farklı diller ve yazı sistemleri arasında doğru karakter işleme sağlamak için mükemmel Unicode desteği sağlar. Ayrıca sayfa kırılmalarını kontrol edebilir ve özel belgeler için özel kağıt boyutları uygulayabilirsiniz.
Güncellenmiş UI Nasıl Görünüyor?

Dinamik PDF Nasıl Görüntüleniyor?

Hangi Yaygın Sorunları Ele Almalıyım?
Tarayıcılar Arası Uyumluluk Neden Önemlidir?
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. Bazı tarayıcılar açılır pencere işleme veya güvenlik kısıtlamaları için belirli gereksinimlere sahip olabilir. Varsayılan olarak açılır pencereleri engelleyen tarayıcılar için yedek mekanizmalar uygulamayı düşünün.
Azure dağıtımları ile uğraşırken 502 Bad Gateway hataları veya diğer barındırma özelliğine özgü sorunlarla karşılaşabilirsiniz. PDF oluşturmayı hedef ortamda her zaman test edin ve uygun hata yönetimini uygulayın.
Büyük PDF Dosyaları Nasıl Ele Almalıyım?
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
private readonly IMemoryCache _cache;
public async Task<byte[]> GetCachedPdf(string cacheKey)
{
if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes))
{
// Generate PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___");
pdfBytes = pdf.BinaryData;
// Cache for 10 minutes
_cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10));
}
return pdfBytes;
}
services.AddMemoryCache();
// Cache generated PDFs to avoid regeneration
private readonly IMemoryCache _cache;
public async Task<byte[]> GetCachedPdf(string cacheKey)
{
if (!_cache.TryGetValue(cacheKey, out byte[] pdfBytes))
{
// Generate PDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___");
pdfBytes = pdf.BinaryData;
// Cache for 10 minutes
_cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10));
}
return pdfBytes;
}
Imports System
Imports System.Threading.Tasks
Imports Microsoft.Extensions.Caching.Memory
' Cache generated PDFs to avoid regeneration
Private ReadOnly _cache As IMemoryCache
Public Async Function GetCachedPdf(cacheKey As String) As Task(Of Byte())
Dim pdfBytes As Byte() = Nothing
If Not _cache.TryGetValue(cacheKey, pdfBytes) Then
' Generate PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_70___")
pdfBytes = pdf.BinaryData
' Cache for 10 minutes
_cache.Set(cacheKey, pdfBytes, TimeSpan.FromMinutes(10))
End If
Return pdfBytes
End Function
Büyük dosyalarla optimal performans için, PDF sıkıştırma tekniklerini ve hızlı web görüntüleme için lineerizasyon düşünün. Toplu işleme senaryoları için paralel PDF oluşturmayı da keşfedebilirsiniz.
Hangi Gezinme Alternatiflerini Kullanabilirim?
JavaScript interop dışında, PDF'leri statik dosya ara yazılımı aracılığıyla sunabilir ve alternatif gezinti için standart HTML köprü etiketlerini kullanabilirsiniz:
<a href="/pdfs/document.pdf" target="_blank">Open PDF</a>
<a href="/pdfs/document.pdf" target="_blank">Open PDF</a>
Bu yaklaşım önceden oluşturulmuş PDF'ler için iyi çalışır, ancak JS interop yönteminin dinamik oluşturma yeteneklerinden yoksundur. Daha ileri seviye senaryolar için, PDF'leri diske kaydetmeden sunmak için adanmış bir PDF görüntüleme bileşeni veya MemoryStream kullanmayı düşünün.
PDF'leri bulut depolama alanına kaydetmek gibi Azure Blob Depolama gibi çözümlemeleri keşfedebilirsiniz, ölçeklenebilirliği artırmak için. Çevrimdışı erişim gerektiren uygulamalar için, yeni sekme özelliğiyle birlikte PDF indirme işlevselliği uygulamayı düşünün.
Hangi En İyi Uygulamaları İzlemeliyim?
-
Hata Yönetimi: Anlamlı hata mesajlarıyla PDF oluşturmayı try-catch bloklarında sarmanız gerekmektedir. Özel hata günlüklemesini kullanarak sorunları izleyin.
-
Performans: UI'nizi engellememek için async/await kullanın. JavaScript yüklü sayfalar için işleme gecikmeleri uygulayın. Daha hızlı ilk renderlar için motoru önceden ısıtın.
-
Kullanıcı Deneyimi: Yükleme indikatörlerini görüntüleyin ve açılır engelleyicileri zarif bir şekilde yönetin. Çok sayfalı PDF'ler için ilerlemeyi izleyin. Ağ sorunları için net geri bildirim sağlayın.
-
DOM Manipülasyonu: Sunucu tarafı C#'ın istemci DOM'unu doğrudan manipüle edemeyeceğini unutmayın. Karmaşık etkileşimler için JavaScript mesaj dinleyicilerini kullanın.
-
Güvenlik: PDF oluşturmadan önce tüm kullanıcı girdilerini doğrulayın. Gerektiğinde PDF temizleme, dijital imzalar ve şifreleme uygulayın. Güvenli iletim için HTTPS kullanın.
- Kaynak Yönetimi: PDF belgelerini düzgün bir şekilde bertaraf edin ve bellek sızıntılarını önleyin. Optimizasyonlu paket büyüklüğü için kapsülleme içindeki dağıtımlarda izleyin.
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, modern Blazor uygulamalarıyla sorunsuz bir şekilde bütünleşmiş dinamik, profesyonel PDF belgeleri oluşturmaya geliştiricilere olanak tanır. HTML'i PDF'ye dönüştürmek, formlar oluşturmak veya karmaşık belgeleri düzenlemek olsun, IronPDF işletme düzeyinde PDF işleme için gereken araçları sağlar.
Blazor projenizde PDF işlevselliğini uygulamaya hazır mısınız? Ücretsiz IronPDF denemenizi bugün başlatın. Deneme, başarıya ulaşmanızı sağlamak için eksiksiz işlevsellik, filigranlar olmadan ve kapsamlı destek içerir. Üretim dağıtımları için, çeşitli platformlar için lisanslama seçeneklerimizi ve dağıtım kılavuzlarımızı gözden geçirin, Windows, Linux ve Azure dahil.
Sıkça Sorulan Sorular
Blazor kullanarak bir PDF'yi yeni bir sekmede nasıl açabilirim?
IronPDF kullanarak PDF'yi oluşturup JavaScript interop ile yeni bir tarayıcı sekmesinde görüntüleyerek Blazor'da PDF'yi yeni bir sekmede açabilirsiniz.
Blazor uygulamalarında IronPDF'in rolü nedir?
IronPDF, Blazor uygulamalarında PDF belgeleri oluşturmak için kullanılır ve geliştiricilerin uygulamalarında programlı olarak PDF'ler oluşturmasını ve üzerlerinde işlemler yapmasını sağlar.
Blazor'da PDF açmak için JavaScript interop neden kullanılır?
JavaScript interop, Blazor'da tarayıcı işlevsellikleri ile etkileşimde bulunmak için kullanılır, gibi yeni bir sekme açmadanılan özel işlemleri JavaScript ile yönetmek gerekir.
Blazor Sunucu uygulamasında PDF görüntüleme uygulaması yapabilir miyim?
Evet, IronPDF kullanarak PDF oluşturup, JavaScript interop ile dosyayı yeni bir sekme açmak ve kullanıcılar için sorunsuz bir deneyim sağlamak mümkün.
Blazor uygulamalarında PDF'leri yeni bir sekmede açmanın faydaları nelerdir?
PDF'leri yeni bir sekmede açmak, kullanıcıların mevcut sayfadan çıkmadan belgeleri görüntülemesini sağlayarak kullanıcı deneyimini artırır ve uygulamanın bütünlüğünü korur.
IronPDF kullanarak Blazor'da PDF çıktısını özelleştirmek mümkün mü?
Evet, IronPDF, Blazor uygulamalarında PDF çıktısını özelleştirmenizi sağlar; başlık ve alt bilgi ayarlamalarını yapabilir ve belirli tasarım gereksinimlerini karşılamak için stiller uygulayabilirsiniz.
PDF'lerin açılması için kullanılan eğitimde hangi Blazor sürümü kullanılmaktadır?
Eğitim, IronPDF ve JavaScript interop kullanarak PDF'leri yeni bir sekmede açmayı göstermek için Blazor Sunucu sürümüne odaklanmaktadır.
IronPDF, Blazor'da doküman işleme yeteneklerini nasıl geliştirir?
IronPDF, Blazor'da belge yönetimini geliştirir; profesyonel kalitede PDF'leri doğrudan uygulamanızda oluşturarak sağlam PDF oluşturma ve manipülasyon yetenekleri sunar.

