C#'ta Dinamik Olarak PDF'ler Nasıl Uretilir
ASP.NET panel kontrollerinde PDF belgelerini görüntülemek, belge yönetim sistemleri, rapor görüntüleyiciler ve fatura gösterimleri için yaygın bir gerekliliktir. IronPDF bunu, istemci tarafı bağımlılıklarını ortadan kaldıran ve tüm tarayıcılar ve platformlar arasında tutarlı çalışan sunucu tarafı render işlemi ile çözmektedir.
ASP.NET Core web uygulamanıza PDF yerleştirmeniz gerektiğinde, tarayıcı eklentilerine veya istemci tarafı kütüphanelerine dayanmanın standart yaklaşımı kırılgandır. Kurumsal ortamlarındaki eklenti kısıtlamaları, tutarsız tarayıcı davranışı ve kötü mobil destek, kullanıcı deneyimini zedeler. Sunucu tarafı bir yaklaşım bu can sıkıcı noktaların her birini ortadan kaldırır.
IronPDF PDF oluşturma ve teslimatını tamamen sunucu tarafında ele alır, böylece tarayıcı doğru MIME türü ile standart bir PDF byte akışı alır -- eklenti gerekmez, tarayıcıya özgü geçici çözümler gerekli değildir.

Sunucu Tarafında PDF Render İşlemi ASP.NET'te Nasıl Çalışır?
IronPDF, PDF işleme işlemini tamamen Headless Chrome motorunu kullanarak sunucuya kaydırır. Kontrolcünüz bir PDF belgesi oluşturur veya alır, bunu bir byte dizisine dönüştürür ve bir inline Content-Disposition başlığı ile tarayıcıya iletir. Tarayıcının yerleşik PDF görüntüleyicisi daha sonra belgenin panelinizdeki bir <iframe> içinde gösterilmesini sağlar.
Bu temel değişiklik geleneksel can sıkıcı noktaları ortadan kaldırır:
- İstemci makinesinde Adobe Reader veya tarayıcı uzantısına gerek yok
- Kullanıcının işletim sistemi veya tarayıcı sürümüne bakılmaksızın tutarlı render işlemi
- Belge içeriği, düzeni ve stili üzerinde tam programatik kontrol
- IT politikalarının eklenti kurulumlarını engellediği kurumsal ortamlarında çalışır
Kütüphanenin Chrome render motoru, HTML, URL ve ham içerik kaynaklarından piksel mükemmel çıktı üretir. Çıktının her yönünü kontrol edersiniz -- kağıt boyutu, kenar boşlukları, başlıklar, altbilgiler ve CSS medya türü -- PDF istemciye ulaşmadan önce.
IronPDF ayrıca Windows, Linux ve macOS sunucularda çapraz platform dağıtımı destekler, bu da onu Azure veya AWS üzerinde çalışan bulut barındırılan ASP.NET uygulamaları ve Docker kullanan konteynerize edilmiş ortamlar için uygun hale getirir.

NuGet Paketi Nasıl Kurulur?
Visual Studio'yu açın, Çözüm Gezgini'nde projenize sağ tıklayın ve NuGet Paketlerini Yönet seçeneğini seçin. IronPdf arayın ve yükleyin. Alternatif olarak Paket Yöneticisi Konsolunda bu komutu çalıştırın:
Install-Package IronPdf
.NET CLI'yi dotnet add package IronPdf ile de kullanabilirsiniz. Kütüphanenin ad alanına erişmek için kontrolör veya hizmet sınıfınızın üstüne using IronPdf; ekleyin.
Optimal PDF teslimatı için statik dosyalar sunacak ve yönlendirmeyi ayarlayacak şekilde Program.cs yapılandırmanızı:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.Extensions.DependencyInjection
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
builder.Services.AddRazorPages()
Dim app = builder.Build()
app.UseStaticFiles()
app.UseRouting()
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}")
app.Run()
AddControllersWithViews() kaydı, hem API uç noktalarını hem de görünüm işlemesini etkinleştirir -- bunlar PDF içeriğini özel kontrol eylemleri aracılığıyla sunmak ve Razor görünüm panellerinde göstermek istiyorsanız gereklidir. Tam konfigürasyon detayları için IronPDF API dökümantasyonunu danışabilirsiniz.
PDF Dosyası Nasıl Doğrudan Panel İçinde Görüntülenir?
Ana model basittir: bir kontrolör eylemi bir PDF oluşturur, bunu baytlara dönüştürür, Content-Disposition başlığını inline olarak ayarlar ve bir File sonucu döndürür. Razor görünümünde bir <iframe> bu uç noktaya işaret eder.
Tam denetleyici uygulaması burada verilmiştir:
[ApiController]
[Route("api/[controller]")]
public class PdfPanelController : ControllerBase
{
[HttpGet("display/{documentId}")]
public IActionResult DisplayPdfInPanel(string documentId)
{
var renderer = new ChromePdfRenderer();
string filename = $"document_{documentId}.pdf";
var htmlContent = $@"
<html>
<head>
<style>
body {{font-family: Arial, sans-serif; margin: 40px;}}
h1 {{color: #333;}}
.content {{line-height: 1.6;}}
</style>
</head>
<body>
<h1>Document #{documentId}</h1>
<div class='content'>
<p>This PDF is generated dynamically and displayed inline in your panel.</p>
<p>Generated at: {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>
</div>
</body>
</html>";
using var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
byte[] pdfBytes = pdfDocument.BinaryData;
Response.Headers.Append("Content-Disposition", $"inline; filename={filename}");
return File(pdfBytes, "application/pdf");
}
}
[ApiController]
[Route("api/[controller]")]
public class PdfPanelController : ControllerBase
{
[HttpGet("display/{documentId}")]
public IActionResult DisplayPdfInPanel(string documentId)
{
var renderer = new ChromePdfRenderer();
string filename = $"document_{documentId}.pdf";
var htmlContent = $@"
<html>
<head>
<style>
body {{font-family: Arial, sans-serif; margin: 40px;}}
h1 {{color: #333;}}
.content {{line-height: 1.6;}}
</style>
</head>
<body>
<h1>Document #{documentId}</h1>
<div class='content'>
<p>This PDF is generated dynamically and displayed inline in your panel.</p>
<p>Generated at: {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>
</div>
</body>
</html>";
using var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
byte[] pdfBytes = pdfDocument.BinaryData;
Response.Headers.Append("Content-Disposition", $"inline; filename={filename}");
return File(pdfBytes, "application/pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
Imports System
<ApiController>
<Route("api/[controller]")>
Public Class PdfPanelController
Inherits ControllerBase
<HttpGet("display/{documentId}")>
Public Function DisplayPdfInPanel(documentId As String) As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim filename As String = $"document_{documentId}.pdf"
Dim htmlContent As String = $"
<html>
<head>
<style>
body {{font-family: Arial, sans-serif; margin: 40px;}}
h1 {{color: #333;}}
.content {{line-height: 1.6;}}
</style>
</head>
<body>
<h1>Document #{documentId}</h1>
<div class='content'>
<p>This PDF is generated dynamically and displayed inline in your panel.</p>
<p>Generated at: {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>
</div>
</body>
</html>"
Using pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
Dim pdfBytes As Byte() = pdfDocument.BinaryData
Response.Headers.Append("Content-Disposition", $"inline; filename={filename}")
Return File(pdfBytes, "application/pdf")
End Using
End Function
End Class
ChromePdfRenderer sınıfı sunucu tarafı görüntüleme için birincil giriş noktasıdır. HTML içeriğini kabul eder, bunu Headless Chrome tarayıcısını kullanarak dönüştürür ve bir PdfDocument nesnesi döndürür. BinaryData özelliği, yayın akışı için ham byte'ları sunar.
Content-Disposition'yi inline olarak ayarlamak panel görüntüleme için kritik adımdır. Olmadan, tarayıcı indirime yönlendirme yapar ve bunu <iframe> içinde görüntülemek yerine. Tüm sayfalara başlıklar ve alt bilgiler ekleyebilir veya RenderingOptions ile sayfa yönlendirmesi ve özel kenar boşluklarını kontrol edebilirsiniz.
Bu uç noktayı bir Razor paneline yerleştirmek için kontrolör yoluna işaret eden bir <iframe> oluşturun:
@page
@model IndexModel
<div class="container mt-4">
<div class="card">
<div class="card-header">
<h3>PDF Display Panel</h3>
</div>
<div class="card-body">
<div class="pdf-panel" style="height: 600px;">
<iframe src="/api/PdfPanel/display/12345"
width="100%"
height="100%"
frameborder="0">
</iframe>
</div>
</div>
</div>
</div>
@page
@model IndexModel
<div class="container mt-4">
<div class="card">
<div class="card-header">
<h3>PDF Display Panel</h3>
</div>
<div class="card-body">
<div class="pdf-panel" style="height: 600px;">
<iframe src="/api/PdfPanel/display/12345"
width="100%"
height="100%"
frameborder="0">
</iframe>
</div>
</div>
</div>
</div>
The provided code is a Razor page markup, which is not directly translatable to VB.NET as it is not C# code. Razor pages are used in ASP.NET Core for creating dynamic web pages and are written in a combination of HTML and C#.
If you need to convert the C# logic within a Razor page to VB.NET, you would typically focus on the code-behind file or any C# code embedded within the Razor markup. However, the provided snippet contains only HTML and Razor directives without any C# logic to convert.
If you have a specific C# code-behind logic or embedded C# code within a Razor page that you need to convert to VB.NET, please provide that portion, and I can assist with the conversion.
<iframe> kontrolör uç noktasından PDF talep eder. Tarayıcının yerleşik PDF görüntüleyicisi, istemci tarafı kütüphane veya eklenti gerektirmeden belgeyi tam panel genişliğinde ve yüksekliğinde gösterir.
Oluşturulan PDF Nasıl Görünür?

PDF'leri AJAX ile Dinamik Olarak Nasıl Yüklenir?
Statik <iframe> kaynakları sabit içerik için iyi çalışır, ancak birçok uygulama kullanıcı eylemlerine göre PDF yüklemesi gerektirir -- bir veri ızgarasındaki bir kaydı tıklatmak, bir form göndermek veya bir rapor türü seçmek. AJAX yönlendirmeli bir yaklaşım, bu senaryoları tam sayfa yeniden yüklemeden işler.
Denetleyici işlemi bir istek gövdesini kabul eder ve PDF'yi bir base64 dizesi olarak döner:
[HttpPost("generate")]
public async Task<IActionResult> GenerateDynamicPdf([FromBody] PdfRequestModel request)
{
try
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var htmlBuilder = new StringBuilder();
htmlBuilder.Append("<html><body>");
htmlBuilder.Append($"<h2>{request.Title}</h2>");
htmlBuilder.Append($"<div>{request.Content}</div>");
if (request.IncludeData)
{
htmlBuilder.Append("<table border='1' style='width:100%;'>");
foreach (var item in request.DataItems)
{
htmlBuilder.Append($"<tr><td>{item.Key}</td><td>{item.Value}</td></tr>");
}
htmlBuilder.Append("</table>");
}
htmlBuilder.Append("</body></html>");
var pdfDocument = await Task.Run(() =>
renderer.RenderHtmlAsPdf(htmlBuilder.ToString()));
var base64Pdf = Convert.ToBase64String(pdfDocument.BinaryData);
return Ok(new { success = true, pdfData = base64Pdf });
}
catch (Exception ex)
{
return BadRequest(new { success = false, error = ex.Message });
}
}
[HttpPost("generate")]
public async Task<IActionResult> GenerateDynamicPdf([FromBody] PdfRequestModel request)
{
try
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var htmlBuilder = new StringBuilder();
htmlBuilder.Append("<html><body>");
htmlBuilder.Append($"<h2>{request.Title}</h2>");
htmlBuilder.Append($"<div>{request.Content}</div>");
if (request.IncludeData)
{
htmlBuilder.Append("<table border='1' style='width:100%;'>");
foreach (var item in request.DataItems)
{
htmlBuilder.Append($"<tr><td>{item.Key}</td><td>{item.Value}</td></tr>");
}
htmlBuilder.Append("</table>");
}
htmlBuilder.Append("</body></html>");
var pdfDocument = await Task.Run(() =>
renderer.RenderHtmlAsPdf(htmlBuilder.ToString()));
var base64Pdf = Convert.ToBase64String(pdfDocument.BinaryData);
return Ok(new { success = true, pdfData = base64Pdf });
}
catch (Exception ex)
{
return BadRequest(new { success = false, error = ex.Message });
}
}
Imports System.Text
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
<HttpPost("generate")>
Public Async Function GenerateDynamicPdf(<FromBody> request As PdfRequestModel) As Task(Of IActionResult)
Try
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim htmlBuilder = New StringBuilder()
htmlBuilder.Append("<html><body>")
htmlBuilder.Append($"<h2>{request.Title}</h2>")
htmlBuilder.Append($"<div>{request.Content}</div>")
If request.IncludeData Then
htmlBuilder.Append("<table border='1' style='width:100%;'>")
For Each item In request.DataItems
htmlBuilder.Append($"<tr><td>{item.Key}</td><td>{item.Value}</td></tr>")
Next
htmlBuilder.Append("</table>")
End If
htmlBuilder.Append("</body></html>")
Dim pdfDocument = Await Task.Run(Function() renderer.RenderHtmlAsPdf(htmlBuilder.ToString()))
Dim base64Pdf = Convert.ToBase64String(pdfDocument.BinaryData)
Return Ok(New With {Key .success = True, Key .pdfData = base64Pdf})
Catch ex As Exception
Return BadRequest(New With {Key .success = False, Key .error = ex.Message})
End Try
End Function
RenderingOptions bloğu, kağıt boyutunu, kenar boşluklarını ve CSS medya türünü işleme öncesinde yapılandırmanıza olanak tanır. Microsoft'un ASP.NET Core belgelerine göre, asenkron desenler yük altında duyarlı arayüzleri sürdürmek için esastır. Task.Run içindeki senkron işlemi sarmak, Chrome motoru HTML'yi işlerken istek iş parçacığını serbest tutar.
Base64 yanıtı, JavaScript istemcisine sayfayı yeniden yüklemeden <iframe> kaynağını doğrudan güncelleme olanağı sağlar:
fetch('/api/PdfPanel/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(requestData)
})
.then(response => response.json())
.then(result => {
if (result.success) {
const iframe = document.getElementById('pdf-frame');
iframe.src = 'data:application/pdf;base64,' + result.pdfData;
}
});
fetch('/api/PdfPanel/generate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(requestData)
})
.then(response => response.json())
.then(result => {
if (result.success) {
const iframe = document.getElementById('pdf-frame');
iframe.src = 'data:application/pdf;base64,' + result.pdfData;
}
});
Bu model Razor Sayfaları ve MVC görünümleri için iyi çalışır. İleri düzey kullanım durumları için, IronPDF ayrıca asenkron işleme'yi doğal olarak destekler, böylece RenderHtmlAsPdfAsync'yı doğrudan Task.Run yerine kullanabilirsiniz.
Farklı PDF Kaynak Türleri Nasıl Yönetilir?
IronPDF üç birincil kaynaktan PDF oluşturabilir: HTML dizeleri, yerel HTML dosyaları ve dış URL'ler. Her biri farklı senaryolara uygundur.
HTML Şablonlarını PDF'lere Nasıl Dönüştürürsünüz?
Şablon bazlı oluşturma, kurumsal ASP.NET uygulamalarında en yaygın desendir. Placeholder değişkenleri ile HTML şablonlarını saklarsınız, çalıştırma zamanında veriyi eklersiniz ve sonucu renderlersiniz:
[HttpGet("from-html")]
public IActionResult GenerateFromHtmlString(string reportType)
{
var renderer = new ChromePdfRenderer();
var htmlTemplate = GetHtmlTemplate(reportType);
var userName = User?.Identity?.Name ?? "Unknown";
var processedHtml = htmlTemplate
.Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd"))
.Replace("{{USER}}", userName)
.Replace("{{REPORT_TYPE}}", reportType);
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
using var pdf = renderer.RenderHtmlAsPdf(processedHtml);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", $"{reportType}.pdf"));
return File(pdf.BinaryData, "application/pdf");
}
private string GetHtmlTemplate(string reportType)
{
return @"
<html>
<head><title>{{REPORT_TYPE}} Report</title></head>
<body>
<h1>{{REPORT_TYPE}} Report</h1>
<p>Date: {{DATE}}</p>
<p>User: {{USER}}</p>
<div>Report content goes here.</div>
</body>
</html>";
}
[HttpGet("from-html")]
public IActionResult GenerateFromHtmlString(string reportType)
{
var renderer = new ChromePdfRenderer();
var htmlTemplate = GetHtmlTemplate(reportType);
var userName = User?.Identity?.Name ?? "Unknown";
var processedHtml = htmlTemplate
.Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd"))
.Replace("{{USER}}", userName)
.Replace("{{REPORT_TYPE}}", reportType);
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
using var pdf = renderer.RenderHtmlAsPdf(processedHtml);
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", $"{reportType}.pdf"));
return File(pdf.BinaryData, "application/pdf");
}
private string GetHtmlTemplate(string reportType)
{
return @"
<html>
<head><title>{{REPORT_TYPE}} Report</title></head>
<body>
<h1>{{REPORT_TYPE}} Report</h1>
<p>Date: {{DATE}}</p>
<p>User: {{USER}}</p>
<div>Report content goes here.</div>
</body>
</html>";
}
Imports System
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf
Imports System.IO
<HttpGet("from-html")>
Public Function GenerateFromHtmlString(reportType As String) As IActionResult
Dim renderer As New ChromePdfRenderer()
Dim htmlTemplate As String = GetHtmlTemplate(reportType)
Dim userName As String = If(User?.Identity?.Name, "Unknown")
Dim processedHtml As String = htmlTemplate _
.Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd")) _
.Replace("{{USER}}", userName) _
.Replace("{{REPORT_TYPE}}", reportType)
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Using pdf = renderer.RenderHtmlAsPdf(processedHtml)
pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", $"{reportType}.pdf"))
Return File(pdf.BinaryData, "application/pdf")
End Using
End Function
Private Function GetHtmlTemplate(reportType As String) As String
Return "
<html>
<head><title>{{REPORT_TYPE}} Report</title></head>
<body>
<h1>{{REPORT_TYPE}} Report</h1>
<p>Date: {{DATE}}</p>
<p>User: {{USER}}</p>
<div>Report content goes here.</div>
</body>
</html>"
End Function
CssMediaType.Print, PDF'in genellikle gezinme çubuklarını, kenar çubuklarını ve diğer sadece ekran öğelerini kaldıran baskıya özel CSS kurallarını kullanmasını sağlar. Bu, HTML şablonlarınız web görünümleri ve PDF oluşturma arasında paylaşıldığında daha temiz çıktı üretir. Ayrıca, marka oluşturmak için özel filigranlar veya arka plan görüntüleri uygulayabilirsiniz. Karmaşık düzenler için, sayfa kırma kontrolü, yeni sayfaların tam olarak nerede başlayacağını belirtmenizi sağlar.
HTML Şablon PDF Çıkışı Ne Görüntü İçerebilir?

Dış URL'lerden Nasıl PDF Üretilir?
Dış web sayfalarının -- rakip analizi, yönetmelik dosyaları veya üçüncü taraf hizmetlerden içerik -- yakalanması için, IronPDF herhangi bir genel erişimli URL'yi render edebilir:
[HttpGet("from-url")]
public async Task<IActionResult> GenerateFromUrl(string encodedUrl)
{
var url = HttpUtility.UrlDecode(encodedUrl);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ViewPortWidth = 1920;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
using var pdf = await renderer.RenderUrlAsPdfAsync(url);
Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf");
return File(pdf.BinaryData, "application/pdf");
}
[HttpGet("from-url")]
public async Task<IActionResult> GenerateFromUrl(string encodedUrl)
{
var url = HttpUtility.UrlDecode(encodedUrl);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ViewPortWidth = 1920;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
using var pdf = await renderer.RenderUrlAsPdfAsync(url);
Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf");
return File(pdf.BinaryData, "application/pdf");
}
Imports System.Web
Imports Microsoft.AspNetCore.Mvc
<HttpGet("from-url")>
Public Async Function GenerateFromUrl(encodedUrl As String) As Task(Of IActionResult)
Dim url = HttpUtility.UrlDecode(encodedUrl)
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.ViewPortWidth = 1920
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(2000)
Using pdf = Await renderer.RenderUrlAsPdfAsync(url)
Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf")
Return File(pdf.BinaryData, "application/pdf")
End Using
End Function
ViewPortWidth ayarı, PDF'ye dönüştürmeden önce üst düzey tarayıcının sayfayı ne kadar geniş bir şekilde işlediğini belirler. 1920 piksel genişliğinde bir görüntüleme alanı, modern esnek düzenleri masaüstü çözünürlüğünde yakalar. render gecikmesi, JavaScript ağırlıkta tek sayfalı uygulamaların başlatılması için süre tanır, ardından ekran görüntüsü alınır.
Daha ileri yakalama senaryoları için, IronPDF JavaScript yürütme kontrolü, kimliği doğrulanmış sayfalar için çerez iletme ve görüntüleme alanı yakınlaştırma ayarlamaları destekler.
Bellek ve Performans Nasıl Yönetilir?
PDF oluşturma kaynak yoğun bir işlemdir. Her ChromePdfRenderer çağrısı bir Headless Chrome süreci başlatır ve her PdfDocument nesnesi işlenen baytları bellekte tutar. Uygun bertaraf, kaynak sızıntılarını önler ve yük altında bellek tüketimini öngörebilir tutar.
Her zaman using ifadelerini PdfDocument ile kullanın:
public IActionResult OptimizedPdfGeneration()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = false;
var processedHtml = GetHtmlTemplate("report")
.Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd"))
.Replace("{{USER}}", "Test")
.Replace("{{REPORT_TYPE}}", "Report");
using var pdf = renderer.RenderHtmlAsPdf(processedHtml);
byte[] pdfBytes = pdf.BinaryData;
pdf.SaveAs("output.pdf");
return File(pdfBytes, "application/pdf");
}
public IActionResult OptimizedPdfGeneration()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = false;
var processedHtml = GetHtmlTemplate("report")
.Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd"))
.Replace("{{USER}}", "Test")
.Replace("{{REPORT_TYPE}}", "Report");
using var pdf = renderer.RenderHtmlAsPdf(processedHtml);
byte[] pdfBytes = pdf.BinaryData;
pdf.SaveAs("output.pdf");
return File(pdfBytes, "application/pdf");
}
Imports System
Imports Microsoft.AspNetCore.Mvc
Public Class PdfController
Inherits Controller
Public Function OptimizedPdfGeneration() As IActionResult
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.CreatePdfFormsFromHtml = False
Dim processedHtml = GetHtmlTemplate("report") _
.Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd")) _
.Replace("{{USER}}", "Test") _
.Replace("{{REPORT_TYPE}}", "Report")
Using pdf = renderer.RenderHtmlAsPdf(processedHtml)
Dim pdfBytes As Byte() = pdf.BinaryData
pdf.SaveAs("output.pdf")
Return File(pdfBytes, "application/pdf")
End Using
End Function
Private Function GetHtmlTemplate(templateName As String) As String
' Placeholder for the actual implementation
Return String.Empty
End Function
End Class
using ifadesi, PdfDocument nesnesinin bayt dizisini çıkardıktan hemen sonra, bir hata aşağı akışta oluşsa bile derhal yok edilmesini sağlar. Sık sık PDF üreten uygulamalar için bu ek stratejileri düşünün:
- Önbellekleme: Sık istenen PDF'leri bellek önbelleğinde veya disk üzerinde saklayın.
IMemoryCachekullanarak bayt dizisini, bir belge tanımlayıcısı ve zaman damgası ile önbelleğe alın. - Yayınlama: Çok büyük belgeler için, büyük bitişik bellek bloklarını tahsis etmekten kaçınmak için bayt dizileri yerine PDF bellek akışlarını kullanın.
- Linearizasyon: Tarayıcıların tam dosya indirilmeden önce işlemi başlatabilmesi için linearize edilmiş (hızlı web görüntüsü) çıktı etkinleştirin.
- Sıkıştırma: Belgeyi kısıtlı ağ bağlantıları üzerinden hizmet verirken dosya boyutunu küçültmek için PDF sıkıştırma uygulayın.
IronPDF performans rehberi, yüksek verim senaryoları için ek optimizasyon stratejilerini kapsar.
Optimize edilmiş PDF çıktısı ne üretir?

Güvenliği ve Çapraz Tarayıcı Uyumluluğu Nasıl Sağlarsınız?
PDF panel görüntüsünü üretime dağıtmadan önce güvenlik ve güvenilirlik dikkat ister.
Girdi doğrulama: Dinamik içeriği HTML şablonlarına eklemeden önce daima temizleyin. Chrome motoru üzerinden gösterilen temizlenmemiş kullanıcı girişi, sunucunuzu SSRF ve XSS saldırılarına maruz bırakabilir. Yerleşik HTML kodlama kütüphanelerini kullanın veya kabul edilen karakterleri güvenli bir izin listesine kısıtlayın.
Erişim kontrolü: PDF uç noktalarınızı kimlik doğrulama ve yetkilendirme ara yazılımı ile koruyun. /api/PdfPanel/display/12345 gibi bir belgeye arayan kişinin kimliğini kontrol etmeden belge döndüren bir URL veri açığa çıkma riski taşır. [Authorize] özniteliklerini uygulayın ve kimliği doğrulanmış kullanıcının talep edilen belge kimliğine erişme iznine sahip olduğunu doğrulayın.
MIME türü yapılandırması: Her zaman içerik türü olarak application/pdf döndürün. Yanlış bir MIME türü alan tarayıcılar bir indirme diyalogu başlatabilir veya satır içi işlemeyi reddedebilir. Uygulamanızın MIME türü eşlemelerinin, wwwroot'den statik PDF dosyaları da sunuyorsanız PDF'i içermesini doğrulayın.
Tarayıcılar arası satır içi ekran gösterimi: Modern tarayıcılar -- Chrome, Firefox, Edge, ve Safari -- hepsi Content-Disposition: inline başlığı üzerinden satır içi PDF ekranını destekler. W3C İçerik Güvenlik Politikası spesifikasyonu, panelleriniz farklı kökenlerden PDF embed ediyorsa çerçeve-atası direktifleri hakkında rehberlik sağlar. IronPDF'in sunucu tarafı işleme, PDF oluşturmanın istemciden bağımsız olması nedeniyle tarayıcı işleme tutarsızlıklarının çoğunu ortadan kaldırır.
Hata işleme: PDF oluşturmayı try-catch blokları içine alın ve anlamlı HTTP durum kodları döndürün. Bodysiz bi 500 yanıtını teşhis etmek zordur. İstemci tarafı kodu kırık bir <iframe> yerine kullanıcı dostu bir mesaj gösterebilmesi için yapısal bir hata nesnesi döndürün.
Belge güvenliği için IronPDF, arşiv gereksinimleri için şifre koruma ve izinler, dijital imzalar ve PDF/A uyumluluğu destekler.

Sonraki Adımlarınız Neler?
Şimdi ASP.NET panellerinde PDF görüntüleme için çalışan bir modeliniz var: IronPDF'i yükleyin, bir PDF üreten ve onu Content-Disposition: inline ile döndüren bir kontrolör eylemi oluşturun ve uç noktayı bir <iframe> içinde Razor panelinize yerleştirin. Buradan AJAX deseni, kullanıcı eylemlerine yanıt olarak belgeleri sayfa yeniden yüklemeleri olmadan dinamik olarak yüklemenizi sağlar.
Kendi projenizde bu desenleri test etmek için IronPDF'in ücretsiz deneme sürümünü başlatın -- kredi kartı gerekmez. Deneme, HTML'den PDF'e dönüştürme, URL yakalama ve gelişmiş PDF manipülasyonu dahil tüm özelliklere tam erişim içerir.
Temel ekran çalışmasını sağladıktan sonra, bu doğal uzantıları düşünün:
- Belge montaj iş akışları için PDF dosyalarını birleştirin veya ayırın
- HTML formlarından Doldurulabilir PDF formları oluşturun
- Belge kimlik doğrulaması için dijital imzalar ekleyin
- İçeriği damgalamak, açıklamak veya redakte etmek için mevcut PDF'leri düzenleyin
- Karmaşık rapor düzenleri için tam CSS ve JavaScript desteğiyle HTML'yi PDF'e dönüştürün
IronPDF dokümantasyonu bu yeteneklerin her birini detaylıca kapsar, tam kod örnekleri ve yapılandırma referansıyla.
Sıkça Sorulan Sorular
ASP.NET panellerinde PDF'leri görüntülemenin amacı nedir?
ASP.NET panellerinde PDF'leri görüntülemek, geliştiricilere PDF belgelerini direkt olarak web uygulamalarına entegre etme imkanı sunarak, belge yönetimi, rapor görüntüleme veya fatura gösterimleri için sorunsuz bir kullanıcı deneyimi yaratır.
IronPDF, ASP.NET'te PDF'leri görüntülemede nasıl yardımcı olabilir?
IronPDF, geliştiricilere ASP.NET panelleri içinde PDF belgelerini zahmetsizce render etme ve görüntüleme imkanı sunan araçlar sağlar, bu da sorunsuz bir entegrasyon ve uyumlu bir kullanıcı arayüzü sağlar.
ASP.NET uygulamalarında PDF'leri görüntüleme için IronPDF kullanmanın avantajları nelerdir?
IronPDF kullanmak, kolay PDF entegrasyonu, geliştirme süresini kısaltma ve ASP.NET uygulamalarının işlevselliğini artırma avantajlarıyla UI kontrolleri içinde yüksek kaliteli PDF işleme sağlar.
IronPDF, ASP.NET'te belge yönetim sistemleri oluşturmak için kullanılabilir mi?
Evet, IronPDF, belge yönetim sistemleri oluşturmak için idealdir çünkü ASP.NET panelleri içinde kesintisiz PDF görüntülemeyi destekler, bu da belgeleri doğrudan web üzerinde yönetme ve görüntülemeyi geliştirir.
IronPDF, ASP.NET Core ile PDF görüntüleme için uyumlu mu?
IronPDF, ASP.NET Core ile tam uyumludur, geliştiricilere web uygulamalarında panel kontrolleri ile PDF belgelerini görüntüleme imkanı sunar, bu da modern web entegrasyonu sağlar.

