Altbilgi içeriğine atla
IRONPDF KULLANARAK

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
SHELL

Ya da .NET CLI kullanın:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

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).")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

{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")
$vbLabelText   $csharpLabel

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.")
$vbLabelText   $csharpLabel

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:

C# formdan PDF'ye dönüştürme yaklaşımlarının karşılaştırması
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
$vbLabelText   $csharpLabel

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.EnableJavaScript etkinleştirin.
  • Baskı CSS'lerini kullanın. CssMediaType = PdfCssMediaType.Print ayarlayın ve stil sayfanızda @media print kuralları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. using beyannamelerini kullanın veya kaydettikten sonra Dispose() 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")
$vbLabelText   $csharpLabel

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 ChromePdfRenderer ile HTML'den PDF'ye işleme
  • WinForms kontrollerinden HTML saplonlarina canli veri baglama
  • TextHeaderFooter ile üst bilgiler, alt bilgiler ve sayfa numaralandırmaları
  • HTTP yanıtları ve veritabanı depolaması için BinaryData aracı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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında lisans derecesine sahiptir (Carleton Üniversitesi) ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirme üzerine uzmanlaşmıştır. Kullanıcı dostu ve estetik açıdan hoş arayüzler tasarlamaya tutkuyla bağlı olan Curtis, modern çerç...

Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara