C# ile IronPDF Kullanarak Formu PDF'ye Yazdirma
C#'de bir Windows Form'unu PDF'ye yazdırmak, IronPDF ile basittir: formun HTML temsilini ChromePdfRenderer kullanarak oluşturun, diske veya belleğe kaydedin ve sadece birkaç satır kodla kusursuz bir PDF teslim edin.
Windows Formları uygulamasını PDF'ye aktarmak iş yazılımlarında yaygın bir gerekliliktir. İster veri giriş ekranlarını arşivlemek, ister bir formun durumundaki müşteri odaklı raporlar oluşturmak veya yazıcıya dokunmadan yazdırma önizlemelerini yakalamak için olsun, bir C# formunu PDF'ye dönüştürmek günlük iş akışlarının sürtünmesini giderir. IronPDF, kırılgan GDI+ yazdırma hilelerini atlamanızı sağlayarak HTML işleme boru hattından son PDF çıktısına kadar dönüştürme işlemini ele alan .NET'e özgü bir API sunar.
IronPDF Nasıl Kurulur?
IronPDF'i projenize NuGet aracılığıyla ekleyin. Paket Yöneticisi Konsolunu açın ve çalıştırın:
Install-Package IronPdf
Install-Package IronPdf
Ya da .NET CLI kullanın:
dotnet add package IronPdf
dotnet add package IronPdf
Kurulumdan sonra, API'yi çağıran herhangi bir dosyanın üstüne using IronPdf; ekleyin. Paket ayrıca doğrudan NuGet.org/packages/IronPdf adresinde de bulunmaktadır. Filigransız çıktı kilidini açmak için ironpdf.com/licensing/ adresinde ücretsiz bir deneme lisans anahtarı mevcuttur.
HTML Kullanarak Bir Windows Formunu PDF'ye Nasıl Dönüştürürsünüz?
Bir C# formunu PDF'ye dönüştürmenin en güvenilir yöntemi, formun verilerinin bir HTML anlık görüntüsünü oluşturmak ve bu anlık görüntüyü ChromePdfRenderer ile oluşturmaktır. Bu yaklaşım, görsel işlemi WinForms'un GDI+ yüzeyinden ayırarak, her PDF görüntüleyicisinde aynı görünen keskin, taşınabilir bir çıktı sağlar.
using IronPdf;
// Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY";
// Compose an HTML representation of your form data
string formHtml = $"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body {{ font-family: Arial, sans-serif; margin: 40px; color: #222; }}
h1 {{ color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px; }}
label {{ font-weight: bold; display: inline-block; width: 160px; }}
.row {{ margin: 12px 0; }}
.box {{ border: 1px solid #bbb; padding: 20px; border-radius: 4px; }}
</style>
</head>
<body>
<h1>Customer Registration Form</h1>
<div class="box">
<div class="row"><label>Full Name:</label> Jane Smith</div>
<div class="row"><label>Email:</label> jane@example.com</div>
<div class="row"><label>Phone:</label> +1 555-0100</div>
<div class="row"><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
</div>
</body>
</html>
""";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("CustomerForm.pdf");
Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).");
using IronPdf;
// Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY";
// Compose an HTML representation of your form data
string formHtml = $"""
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body {{ font-family: Arial, sans-serif; margin: 40px; color: #222; }}
h1 {{ color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px; }}
label {{ font-weight: bold; display: inline-block; width: 160px; }}
.row {{ margin: 12px 0; }}
.box {{ border: 1px solid #bbb; padding: 20px; border-radius: 4px; }}
</style>
</head>
<body>
<h1>Customer Registration Form</h1>
<div class="box">
<div class="row"><label>Full Name:</label> Jane Smith</div>
<div class="row"><label>Email:</label> jane@example.com</div>
<div class="row"><label>Phone:</label> +1 555-0100</div>
<div class="row"><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
</div>
</body>
</html>
""";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
pdf.SaveAs("CustomerForm.pdf");
Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).");
Imports IronPdf
' Set your license key once at application startup
License.LicenseKey = "YOUR-LICENSE-KEY"
' Compose an HTML representation of your form data
Dim formHtml As String = $"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<style>
body {{ font-family: Arial, sans-serif; margin: 40px; color: #222; }}
h1 {{ color: #1a4a8a; border-bottom: 2px solid #1a4a8a; padding-bottom: 8px; }}
label {{ font-weight: bold; display: inline-block; width: 160px; }}
.row {{ margin: 12px 0; }}
.box {{ border: 1px solid #bbb; padding: 20px; border-radius: 4px; }}
</style>
</head>
<body>
<h1>Customer Registration Form</h1>
<div class='box'>
<div class='row'><label>Full Name:</label> Jane Smith</div>
<div class='row'><label>Email:</label> jane@example.com</div>
<div class='row'><label>Phone:</label> +1 555-0100</div>
<div class='row'><label>Date:</label> {DateTime.Now:yyyy-MM-dd}</div>
</div>
</body>
</html>
"
' Render HTML to PDF
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 25
renderer.RenderingOptions.MarginRight = 25
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
renderer.RenderingOptions.PrintHtmlBackgrounds = True
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
pdf.SaveAs("CustomerForm.pdf")
Console.WriteLine($"PDF saved -- {pdf.PageCount} page(s).")
ChromePdfRenderer, başsız bir Chromium motorunu çalıştırır, böylece CSS düzenleri, gömülü yazı tipleri ve hatta baskı-medya sorguları aslına sadık bir şekilde oluşturulabilir. Sabit kodlanmış alan değerlerini, çalışma zamanında formunuzun kontrollerinden gelen veri ile bağlayarak tamamen dinamik bir yaklaşım için değiştirin. HTML için PDF'ye nasıl yapılır kılavuzu mevcut işleme seçeneklerinin tümünü detaylı bir şekilde ele alır.
Formun Kontrollerinden Canlı Veri Nasıl Çekilir?
HTML'yi elle kodlamak yerine, değerleri doğrudan WinForms kontrollerinizden okuyun ve bunları şablona ekleyin:
using IronPdf;
// Called from a button click handler in your WinForms application
void ExportFormToPdf()
{
// Read control values at the moment of export
string name = txtName.Text;
string email = txtEmail.Text;
string phone = txtPhone.Text;
string notes = rtbNotes.Text.Replace("\n", "<br>");
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; margin: 30px; }}
table {{ width: 100%; border-collapse: collapse; }}
th, td {{ border: 1px solid #ccc; padding: 10px; text-align: left; }}
th {{ background-color: #f0f4ff; }}
h2 {{ color: #1a4a8a; }}
</style>
</head>
<body>
<h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Full Name</td><td>{name}</td></tr>
<tr><td>Email</td><td>{email}</td></tr>
<tr><td>Phone</td><td>{phone}</td></tr>
<tr><td>Notes</td><td>{notes}</td></tr>
</table>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// Prompt the user for a save location
using var dialog = new SaveFileDialog();
dialog.Filter = "PDF Files|*.pdf";
dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";
if (dialog.ShowDialog() == DialogResult.OK)
{
pdf.SaveAs(dialog.FileName);
MessageBox.Show("PDF exported successfully.", "Export Complete");
}
}
using IronPdf;
// Called from a button click handler in your WinForms application
void ExportFormToPdf()
{
// Read control values at the moment of export
string name = txtName.Text;
string email = txtEmail.Text;
string phone = txtPhone.Text;
string notes = rtbNotes.Text.Replace("\n", "<br>");
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; margin: 30px; }}
table {{ width: 100%; border-collapse: collapse; }}
th, td {{ border: 1px solid #ccc; padding: 10px; text-align: left; }}
th {{ background-color: #f0f4ff; }}
h2 {{ color: #1a4a8a; }}
</style>
</head>
<body>
<h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Full Name</td><td>{name}</td></tr>
<tr><td>Email</td><td>{email}</td></tr>
<tr><td>Phone</td><td>{phone}</td></tr>
<tr><td>Notes</td><td>{notes}</td></tr>
</table>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
// Prompt the user for a save location
using var dialog = new SaveFileDialog();
dialog.Filter = "PDF Files|*.pdf";
dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf";
if (dialog.ShowDialog() == DialogResult.OK)
{
pdf.SaveAs(dialog.FileName);
MessageBox.Show("PDF exported successfully.", "Export Complete");
}
}
Imports IronPdf
' Called from a button click handler in your WinForms application
Sub ExportFormToPdf()
' Read control values at the moment of export
Dim name As String = txtName.Text
Dim email As String = txtEmail.Text
Dim phone As String = txtPhone.Text
Dim notes As String = rtbNotes.Text.Replace(vbLf, "<br>")
Dim html As String = $"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; margin: 30px; }}
table {{ width: 100%; border-collapse: collapse; }}
th, td {{ border: 1px solid #ccc; padding: 10px; text-align: left; }}
th {{ background-color: #f0f4ff; }}
h2 {{ color: #1a4a8a; }}
</style>
</head>
<body>
<h2>Form Export -- {DateTime.Now:dd MMM yyyy HH:mm}</h2>
<table>
<tr><th>Field</th><th>Value</th></tr>
<tr><td>Full Name</td><td>{name}</td></tr>
<tr><td>Email</td><td>{email}</td></tr>
<tr><td>Phone</td><td>{phone}</td></tr>
<tr><td>Notes</td><td>{notes}</td></tr>
</table>
</body>
</html>
"
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
' Prompt the user for a save location
Using dialog As New SaveFileDialog()
dialog.Filter = "PDF Files|*.pdf"
dialog.FileName = $"FormExport_{DateTime.Now:yyyyMMdd_HHmmss}.pdf"
If dialog.ShowDialog() = DialogResult.OK Then
pdf.SaveAs(dialog.FileName)
MessageBox.Show("PDF exported successfully.", "Export Complete")
End If
End Using
End Sub
Bu snippet, form dışa aktarmasını mini bir raporlama işi gibi ele alır: alan değerlerini toplayın, bunları bir HTML şablonuna gömün, işlemleyin ve ardından kullanıcının seçtiği yere kaydedin. HTML tablosunu formun içerdiği kadar çok alanla genişletebilirsiniz. Çok sekmeli formlar için, her sekmeye ayrı <section> blokları oluşturun ve IronPDF'nin sayfalaması işini doğal olarak yapmasına izin verin.
Başlık ve Altbilgiler Nasıl Eklenir?
Başlıklar ve alt bilgi, profesyonel kullanım için bir form dışa aktarmasını cilalar. IronPDF'nin TextHeaderFooter sınıfı, gövde HTML'sini değiştirmeden her sayfanın üstüne ve altına metin damgalar:
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Stamp header and footer on every page
pdf.AddTextHeaders(new TextHeaderFooter
{
CenterText = "Confidential -- Internal Use Only",
LeftText = "{date}",
RightText = "Page {page} of {total-pages}",
FontSize = 9,
DrawDividerLine = true
});
pdf.AddTextFooters(new TextHeaderFooter
{
CenterText = "Generated by MyApp v2.0",
FontSize = 8
});
pdf.SaveAs("FormWithHeader.pdf");
using IronPdf;
using IronPdf.Rendering;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Stamp header and footer on every page
pdf.AddTextHeaders(new TextHeaderFooter
{
CenterText = "Confidential -- Internal Use Only",
LeftText = "{date}",
RightText = "Page {page} of {total-pages}",
FontSize = 9,
DrawDividerLine = true
});
pdf.AddTextFooters(new TextHeaderFooter
{
CenterText = "Generated by MyApp v2.0",
FontSize = 8
});
pdf.SaveAs("FormWithHeader.pdf");
Imports IronPdf
Imports IronPdf.Rendering
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
' Stamp header and footer on every page
pdf.AddTextHeaders(New TextHeaderFooter With {
.CenterText = "Confidential -- Internal Use Only",
.LeftText = "{date}",
.RightText = "Page {page} of {total-pages}",
.FontSize = 9,
.DrawDividerLine = True
})
pdf.AddTextFooters(New TextHeaderFooter With {
.CenterText = "Generated by MyApp v2.0",
.FontSize = 8
})
pdf.SaveAs("FormWithHeader.pdf")
{page}, {total-pages} ve {date} gibi dinamik belirteçler oluşturma zamanında otomatik olarak çözümlenir. Markalı çıktı için, TextHeaderFooter örneğini HtmlHeaderFooter ile değiştirin ve şirket logolarını içeren tam HTML işaretlemesi sağlayın. Başlıklar ve altbilgiler nasıl yapılır kılavuzu mevcut tüm belirteçleri ve düzen seçeneklerini gösterir.
Bir Dosya Yerine Bayt Dizisi Olarak Form Nasıl Dönüştürülür?
Doğrudan diske kaydetmek kullanışlıdır, ancak birçok uygulama, PDF'yi HTTP üzerinden iletmek, bir veritabanında saklamak veya bir sonraki hizmete aktarmak zorundadır. Bu durumlarda dosyayı atlayın ve ham baytlarla çalışın:
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Get raw bytes -- no file required
byte[] pdfBytes = pdf.BinaryData;
// Alternatively, get a MemoryStream for APIs that accept streams
using System.IO.MemoryStream stream = pdf.Stream;
byte[] fromStream = stream.ToArray();
Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes");
// Example: return as HTTP response in ASP.NET Core
// return File(pdfBytes, "application/pdf", "form-export.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Get raw bytes -- no file required
byte[] pdfBytes = pdf.BinaryData;
// Alternatively, get a MemoryStream for APIs that accept streams
using System.IO.MemoryStream stream = pdf.Stream;
byte[] fromStream = stream.ToArray();
Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes");
// Example: return as HTTP response in ASP.NET Core
// return File(pdfBytes, "application/pdf", "form-export.pdf");
Imports IronPdf
Imports System.IO
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
' Get raw bytes -- no file required
Dim pdfBytes As Byte() = pdf.BinaryData
' Alternatively, get a MemoryStream for APIs that accept streams
Using stream As MemoryStream = pdf.Stream
Dim fromStream As Byte() = stream.ToArray()
End Using
Console.WriteLine($"PDF size in memory: {pdfBytes.Length:N0} bytes")
' Example: return as HTTP response in ASP.NET Core
' Return File(pdfBytes, "application/pdf", "form-export.pdf")
BinaryData özelliği, önceden hesaplanmış bayt dizisinin O(1) kopyasını gerçekleştirir. Stream özelliği, akış girişleri bekleyen kütüphaneler için aramaya uygun erişimi destekleyen yeni bir MemoryStream döndürür. Bu, son baytları teslim etmeden önce sıkıştırma veya şifreleme zincirlerken faydalıdır. Bellek içi PDF işlemi hakkında daha fazla ayrıntı PDF bellek akışı kılavuzunda mevcuttur.
Kaydetmeden Önce Güvenlik Ayarları Nasıl Uygulanır?
Form dışa aktarma genellikle hassas veriler içerir. IronPDF'in güvenlik API'si PDF'yi şifreler ve alıcıların ne yapabileceğini sınırlar:
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Restrict access
pdf.SecuritySettings.OwnerPassword = "adminSecretKey";
pdf.SecuritySettings.UserPassword = "viewerPass";
pdf.SecuritySettings.AllowUserPrinting = true; // allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = false; // block copy
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SaveAs("SecureForm.pdf");
Console.WriteLine("Password-protected PDF created.");
using IronPdf;
var renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf(formHtml);
// Restrict access
pdf.SecuritySettings.OwnerPassword = "adminSecretKey";
pdf.SecuritySettings.UserPassword = "viewerPass";
pdf.SecuritySettings.AllowUserPrinting = true; // allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = false; // block copy
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SaveAs("SecureForm.pdf");
Console.WriteLine("Password-protected PDF created.");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(formHtml)
' Restrict access
pdf.SecuritySettings.OwnerPassword = "adminSecretKey"
pdf.SecuritySettings.UserPassword = "viewerPass"
pdf.SecuritySettings.AllowUserPrinting = True ' allow printing
pdf.SecuritySettings.AllowUserCopyPasteContent = False ' block copy
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SaveAs("SecureForm.pdf")
Console.WriteLine("Password-protected PDF created.")
Yönetici izin bayraklarını kontrol edebilmesi için sahibin parolasını ayarlamak, kullanıcı parolası ise belge erişimini tamamen kapar. AllowUserPrinting bayrağı burada özellikle önemlidir -- alıcının ihraç edilen formu yeniden yazdırmasına izin verin, ancak onlara düzenleme hakları vermeyin. Tam detaylar PDF izinleri ve parolalar kılavuzunda yer almaktadır.
C# Formları için Yazdırma Yaklaşımlarını Nasıl Karşılaştırırsınız?
WinForms'un yerel PrintDocument, GDI+ bitmap yakalama ve IronPDF'nin HTML işleme arasında seçim yapmak, sadakat, karmaşıklık ve taşınabilirlikteki dengeye bağlıdır:
| Yaklaşım | Çıktı Sadakati | Kod Karmaşıklığı | Çapraz Platform | CSS Desteği | En İyi Kullanım Amacı |
|---|---|---|---|---|---|
| PrintDocument + PDF yazıcı sürücüsü | Medium | Medium | Sadece Windows | None | Mevcut yazdırma mantığı ile eski WinForms |
| GDI+ Bitmap yakalama (Control.DrawToBitmap) | Yüksek (raster) | Low | Sadece Windows | None | Hızlı ekran-kamera tarzı yakalamalar |
| IronPDF HTML işleme | Yüksek (vektör) | Low | Windows, Linux, macOS, Docker | Tam CSS3 | Profesyonel, taşınabilir, veri odaklı dışa aktarmalar |
| ReportViewer (RDLC) | High | High | Sadece Windows | Sınırlı | Grup bağlantılı karmaşık sayfa bazında raporlar |
IronPDF'in HTML tabanlı yaklaşımı, herhangi bir yakınlaştırma seviyesinde temiz ölçeklendiren ve herhangi bir aygıtta keskin şekilde yazdırılan vektör PDF çıktısı üretir. Motor Chromium olduğundan CSS medya sorguları, flexbox düzenleri ve Google Yazı Tipleri beklenildiği gibi çalışır -- GDI+ bitmap yakalama ise bunu tekrarlayamaz. Kütüphane ayrıca Linux ortamlarında ve Docker konteynerleri içinde çalışır ve bu tabloya göre sadece Windows dışında çalışan seçenek olur.
Formun Çok Sayfalı Tabları Olsa Ne Olur?
İş yazılımlarında çok tablı WinForms yaygındır. PDF, canlı GDI+ yüzeyinden ziyade HTML'den üretildiğinden, tam olarak hangi sekme içeriğinin görüneceğini kontrol etmek sizin elinizdedir. Sekme başına bir HTML bölümü oluşturun ve işlemeden önce birleştirin. İşlem hattı, sekme HTML dizelerinden ChromePdfRenderer yoluyla tek bir sürekli çok sayfalı PDF'ye akar -- her bir sekme için bir mantıksal bölüm. Alternatif olarak, her sekmeyi bağımsız olarak işleyin ve elde edilen PdfDocument nesnelerini IronPDF'nin birleştirme API'si ile birleştirin.
Form Doğrulaması Dışa Aktarım Öncesinde Nasıl Yapılır?
Yalnızca geçerli form verilerini dışa aktarın. Basit bir koruma deseni, eksik gönderimlerden PDF'lerin üretilmesini önler: Alanları önce doğrulayın ve yalnızca tüm gerekli alanlar geçtiğinde HTML oluşturma ve işleme devam edin. Herhangi bir alan başarısız olursa, UI'da hatayı vurgulayın ve dışa aktarmayı durdurun. Bu, dışa aktarılan PDF'leri tutarlı tutar ve eksik verilerden kaynaklanan karışıklığı önler. Microsoft'un Windows Forms doğrulama ile ilgili belgelerine göre, ErrorProvider herhangi bir eylemden önce alan düzeyindeki doğrulama geri bildirimi için standart mekanizmadır.
ASP.NET Core'dan PDF Dışa Aktarımı Nasıl Sunulur?
ASP.NET Core ile oluşturulan web formları, aynı ChromePdfRenderer API kullanılarak PDF olarak dışa aktarılabilir. İşlenmiş baytlar doğrudan bir dosya sonucu olarak geri döndürülür:
using IronPdf;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/forms")]
public class FormExportController : ControllerBase
{
[HttpPost("export")]
public IActionResult ExportFormAsPdf([FromBody] FormDataModel formData)
{
// Build HTML from submitted form data
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 30px; }}
h1 {{ color: #1a4a8a; }}
dl {{ display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px; }}
dt {{ font-weight: bold; }}
</style>
</head>
<body>
<h1>{formData.FormTitle}</h1>
<dl>
<dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
<dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
<dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
</dl>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
string fileName = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf";
return File(pdfBytes, "application/pdf", fileName);
}
}
public record FormDataModel(string FormTitle, string ApplicantName, string ReferenceId);
using IronPdf;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/forms")]
public class FormExportController : ControllerBase
{
[HttpPost("export")]
public IActionResult ExportFormAsPdf([FromBody] FormDataModel formData)
{
// Build HTML from submitted form data
string html = $"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 30px; }}
h1 {{ color: #1a4a8a; }}
dl {{ display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px; }}
dt {{ font-weight: bold; }}
</style>
</head>
<body>
<h1>{formData.FormTitle}</h1>
<dl>
<dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
<dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
<dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
</dl>
</body>
</html>
""";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
byte[] pdfBytes = pdf.BinaryData;
string fileName = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf";
return File(pdfBytes, "application/pdf", fileName);
}
}
public record FormDataModel(string FormTitle, string ApplicantName, string ReferenceId);
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/forms")>
Public Class FormExportController
Inherits ControllerBase
<HttpPost("export")>
Public Function ExportFormAsPdf(<FromBody> formData As FormDataModel) As IActionResult
' Build HTML from submitted form data
Dim html As String = $"
<!DOCTYPE html>
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 30px; }}
h1 {{ color: #1a4a8a; }}
dl {{ display: grid; grid-template-columns: 200px 1fr; gap: 8px 16px; }}
dt {{ font-weight: bold; }}
</style>
</head>
<body>
<h1>{formData.FormTitle}</h1>
<dl>
<dt>Applicant Name</dt><dd>{formData.ApplicantName}</dd>
<dt>Submission Date</dt><dd>{DateTime.UtcNow:dd MMM yyyy}</dd>
<dt>Reference ID</dt><dd>{formData.ReferenceId}</dd>
</dl>
</body>
</html>
"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
Dim pdfBytes As Byte() = pdf.BinaryData
Dim fileName As String = $"form-{formData.ReferenceId}-{DateTime.UtcNow:yyyyMMdd}.pdf"
Return File(pdfBytes, "application/pdf", fileName)
End Function
End Class
Public Class FormDataModel
Public Property FormTitle As String
Public Property ApplicantName As String
Public Property ReferenceId As String
Public Sub New(formTitle As String, applicantName As String, referenceId As String)
Me.FormTitle = formTitle
Me.ApplicantName = applicantName
Me.ReferenceId = referenceId
End Sub
End Class
Bu denetleyici, form verilerini JSON olarak alır, bellekte PDF'yi üretir ve dosya indirme olarak geri iletir. Sunucuda geçici dosyalar oluşturulmaz. Blazor uygulamaları için yaklaşım benzerdir -- aynı işleme kodunu bir hizmetten çağırın ve byte'ları IJSRuntime üzerinden tarayıcıya iletin. Tam ASP.NET entegrasyon desenleri ASP.NET PDF kılavuzunda belgelenmiştir.
Hangi MIME Türü ve İçerik Dağıtımı Kullanmalısınız?
Her zaman içerik türü olarak application/pdf döndürün. PDF'yi tarayıcıda görüntülemek için Content-Disposition: inline kullanın veya indirmeyi zorlamak için Content-Disposition: attachment kullanın. Dosya adı, attachment kullanıldığında tarayıcının kaydet diyalog kutusunda görünür, bu nedenle bir referans ID veya tarih içeren anlamlı bir ad seçin.
Oluşturulan PDF'leri Nasıl Cache'lersiniz?
Ayni form eksportu tekrar tekrar talep ediliyorsa, byte array'ini cache'leyin ve yeniden renderlamaktan kacin. IMemoryCache, tek sunucu dağıtımları için çalışır; coklu instance kurulumlari icin Redis gibi bir dağıtilmis cache kullanin. Temel form verilerinin degisme sikligi ile uyumlu bir sona erme suresi ayarlayin.
Form'dan PDF'ye Eksenler icin En Iyi Uygulamalar Nelerdir?
Tutarlilik, yuksek kaliteli form eksportlari, tekrar edilebilen bazi kaliplardan gelir:
- HTML'yi basit tutun. Çok fazla JavaScript olan saplonlardan kacin -- saf HTML ve CSS daha hizli renderlanir ve daha küçük PDF'ler uretir. Form hesaplamaları buna bağlı olduğunda sadece
RenderingOptions.EnableJavaScriptetkinleştirin. - Baskı CSS'lerini kullanın.
CssMediaType = PdfCssMediaType.Printayarlayın ve stil sayfanızda@media printkurallarını tanımlayın. Bu, gonderilen PDF'den navigasyon cubuklari ve yan cubuklar gibi sadece ekran icin olan cchrome'u ortadan kaldirir. - Kullanıcı girdisini temizleyin. HTML entity'lerini, sablonunuza enjekte ettiginiz herhangi bir alandaki degerde esgecin, boylece bozuk isaretlemi onleyin veya kenar durumlarda PDF'ye sveript enjeksiyonu yapin.
- PdfDocument nesnelerini bosaltin. Yonetsiz kaynaklar bosaltilmadan tutulur.
usingbeyannamelerini kullanın veya kaydettikten sonraDispose()doğrudan çağırın. - Uretim verileri ile test yapin. Uzun metin, ozel karakterler veya gomulu görüntüler iceren formlar sasiirtici dizilimler uretir. Gerçek veri örnekleri karsisinda geliştirme suresince eksportlari calistirin.
Rendering ayarlari referansi, ozel kagit boyutlarindan ozel marginlere ve sayfa yonelimine kadar her mevcut ayari belgelendirir.
Buyuk veya Çok Sayfali Formlari Nasıl Yonetirsiniz?
IronPDF, içerik yüksekliğine ve seçilen kağıt boyutuna göre otomatik olarak sayfalar. Yeni bir form bölümünün her zaman yeni bir sayfada başlaması gerektiğinde, CSS'de bölüm konteynerlerine page-break-before: always yerleştirin. Yüzlerce alan içeren formlar için, tahmini bir kapasiteye sahip bir MemoryStream önceden ayırmak, bayt dizisi kopyası sırasında GC basıncını azaltır.
Dijital Imza Nasıl Eklenir?
Imzalanmis form eksportlari bircok yetki bolgesinde hukuki agirlik tasir. IronPDF, PFX dosyalarda veya Windows sertifika depolarinda depolanan dijital sertifikalari destekler:
// Load the certificate and sign in one step
var signature = new IronPdf.Signing.PdfSignature("certificate.pfx", "certPassword");
pdf.Sign(signature);
pdf.SaveAs("SignedForm.pdf");
// Load the certificate and sign in one step
var signature = new IronPdf.Signing.PdfSignature("certificate.pfx", "certPassword");
pdf.Sign(signature);
pdf.SaveAs("SignedForm.pdf");
Imports IronPdf.Signing
' Load the certificate and sign in one step
Dim signature As New PdfSignature("certificate.pfx", "certPassword")
pdf.Sign(signature)
pdf.SaveAs("SignedForm.pdf")
Adobe PDF dijital imza genel bakisina gore, dijital bir imza, belgenin kaynagini sertifikalandirir ve imzadan sonra yapilan herhangi bir değişikligi algilar. PDF dijital imza rehberi, sertifika konfigrasyonunu ve gorunur imza alanlarini detayli bir sekilde kapsar.
Hangi Temel Noktalari Akilda Tutmalisiniz?
IronPDF kullanarak bir C# Windows Form'unu PDF'ye dönüştürmek üç adıma indirgenir: form verilerinin bir HTML temsilini oluşturun, bunu ChromePdfRenderer'ye geçirin ve sonucu kaydedin veya iletin. Bu yöntem, keskin baski yapabilen, platformlar arasi calisabilen ve tam CSS3 dizilim modelini destekleyen vektor PDF'ler uretir -- GDI+ bitmap yakalama ve eski baski surucu yöntemleriyle eslesen avantajlar saglayamazlar.
Bu kılavuzda ele alınan ana yetenekler:
- WinForms ve ASP.NET Core için
ChromePdfRendererile HTML'den PDF'ye işleme - WinForms kontrollerinden HTML saplonlarina canli veri baglama
TextHeaderFooterile üst bilgiler, alt bilgiler ve sayfa numaralandırmaları- HTTP yanıtları ve veritabanı depolaması için
BinaryDataaracılığıyla bellek içi bayt dizisi çıktısı - PDF guvenlik ayarlari: sahibi/kullanıcı sifreleri ve izin bayraklari
- Hukuksal baglayiciligi olan eksportlar icin dijital imza ekleme
IronPDF özellik takimında aciklama araclarini, form alanı düzenlemesini, PDF/A uyumunu ve daha fazlasini gorebilirsiniz. IronPDF'i 30 günlük deneme lisansi ile ücretsiz deneyin ve bugun kendi form-eksport is akışınıza uygulayin.
Sıkça Sorulan Sorular
IronPDF kullanarak bir C# formunu PDF'ye nasıl dönüştürebilirim?
IronPDF'un sezgisel API'sini kullanarak bir C# formunu PDF'ye dönüştürebilirsiniz, bu da karmaşık kod gerekmeden PDF dönüşümlerini verimli bir şekilde yönetmenizi sağlar.
Modern .NET uygulamalarında PDF belgelerini bayt dizilerine dönüştürmek neden önemlidir?
PDF belgelerini bayt dizilerine dönüştürmek, PDF'lerin veritabanlarında depolanmasını, API'lar aracılığıyla iletilmesini ve bellek içeriğinin yönetilmesini kolaylaştırdığı için önemlidir ve bunlar modern .NET uygulamalarında kritik operasyonlardır.
IronPDF, bayt dizisi dönüşümü için nasıl faydalar sağlar?
IronPDF, kullanımı kolay bir API sunarak bayt dizisi dönüşümünü basitleştirir, karmaşık kod ihtiyaçını azaltır ve geliştirme verimliliğini artırır.
IronPDF bellek içi PDF dönüşümünü gerçekleştirebilir mi?
Evet, IronPDF bellek içi PDF dönüşümü gerçekleştirebilir, bu da geliştiricilerin belge içeriğini diske kaydetme gereksinimi olmadan yönetmelerine olanak tanır.
IronPDF kullanarak PDF'leri bir veritabanında depolamak mümkün mü?
Evet, IronPDF'u kullanarak PDF'leri bayt dizilerine dönüştürerek bir veritabanında depolayabilirsiniz, bu da veritabanı sistemleri ile sorunsuz bir entegrasyonu kolaylaştırır.
IronPDF, PDF dosyalarını API'lar üzerinden iletmede nasıl yardımcı olur?
IronPDF, PDF dosyalarının bayt dizilerine dönüştürülmesini sağlayarak, belge verilerinin ağ protokolleri üzerinden daha kolay gönderilip alınmasına yardımcı olur.
IronPDF'un API'si geliştiriciler için nasıl sezgisel hale gelmiş?
IronPDF'un API'si geliştiriciler için, karmaşık PDF işlemlerini basitleştiren net ve anlaşılır yöntemler sunarak tasarlanmıştır, bu da verimliliği artırır ve öğrenme eğrisini azaltır.




