Altbilgi içeriğine atla
IRONPDF KULLANARAK

C# ile UWP Uygulamalarinda PDF Düzenleyici Nasıl Kurulur

C#'da Windows Form'unu PDF'ye yazdırmak IronPDF ile çok kolaydır: formun HTML temsilini ChromePdfRenderer kullanarak render edin, diske veya belleğe kaydedin ve sadece birkaç satır kodla kusursuz bir PDF sunun.

Bir Windows Forms uygulamasını PDF'ye aktarma, iş yazılımında sıkça görülen bir gerekliliktir. Veri giriş ekranlarını arşivlemek, bir formun durumundan müşteri yönelimli raporlar üretmek ya da yazıcıya dokunmadan baskı önizlemeleri elde etmek isteyip istememenizden bağımsız olarak, bir C# formunu PDF'ye dönüştürmek, günlük iş akışlarındaki sürtüşmeyi kaldırır. IronPDF, HTML render'inden nihai PDF çıktısına kadar dönüşüm hattını ele alan .NET yerel bir API sunar ve böylece kırılgan GDI+ baskı hacklerini atlamanızı sağlar.

IronPDF Nasıl Kurulur?

IronPDF'i projenize NuGet üzerinden ekleyin. Paket Yöneticisi Konsolu'nu açın ve çalıştırın:

Install-Package IronPdf

Veya .NET CLI kullanın:

dotnet add package IronPdf

Kurulumdan sonra, API'yi çağıran herhangi bir dosyanın en üstüne using IronPdf; ekleyin. Paket aynı zamanda doğrudan NuGet.org/packages/IronPdf'ta da mevcuttur. Değerlendirme sırasında filigran içermeyen çıktıların kilidini açmak için ironpdf.com/licensing'te ücretsiz deneme lisans anahtarı mevcuttur.

HTML Kullanarak 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 veri tablosunu bir HTML anlık görüntüsü olarak oluşturmak ve bu anlık görüntüyü ChromePdfRenderer ile render etmektir. Bu yaklaşım, görsel render'ı WinForms'un GDI+ yüzeyinden ayırır, bu sayede her PDF görüntüleyicisinde aynı şekilde görünen net, 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 motoru çalıştırır, bu nedenle CSS düzenleri, gömülü yazı tipleri ve hatta baskı için medya sorguları doğru bir şekilde render edilir. Sabit kodlanmış alan değerlerini, çalışma zamanında form kontrollerinizden bağlanan verilerle değiştirin ve tamamen dinamik bir yaklaşım elde etmiş olun. HTML'den PDF'ye nasıl yapılır kılavuzu, mevcut tüm render seçeneklerini ayrıntılı bir şekilde kapsar.

Form Kontrollerinden Canlı Verileri Nasıl Alırsınız?

HTML'yi elle kodlamak yerine, değerleri doğrudan WinForms kontrollerinizden okuyun ve şablona enjekte edin:

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 kod parçacığı, form dışa aktarmasını mini bir rapor işine benzer şekilde ele alır: alan değerlerini toplayın, bir HTML şablonu içine yerleştirin, render edin ve ardından kullanıcının seçtiği yere kaydedin. HTML tablonuzu, formun içerdiği kadar çok alanla genişletebilirsiniz. Çok sekmeli formlar için, her sekme için ayrı

blokları oluşturun ve IronPDF'nin doğal olarak sayfalandırmasını sağlayın.

Başlıklar ve Altbilgiler Nasıl Eklenir?

Başlıklar ve altbilgiler, bir form dışa aktarımını profesyonel kullanım için parlatır. IronPDF'nin TextHeaderFooter sınıfı, gövde HTML'yi değiştirmeden her sayfanın en üstüne ve altına metin mühürler:

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 jetonlar render zamanında otomatik olarak çözülür. Markalı çıktı için, TextHeaderFooter yerine HtmlHeaderFooter değiştirin ve şirket logolarını içeren tam HTML işaretlemesini sağlayın. Başlıklar ve altbilgiler nasıl yapılır kılavuzu, mevcut tüm token ve düzenleme seçeneklerini gösterir.

Formu Bir Dosya Yerine Bir Byte Dizisine Nasıl Dönüştürürsünüz?

Doğrudan diske kaydetmek uygundur, ancak birçok uygulama PDF'yi HTTP üzerinden iletmek, bir veritabanında saklamak veya aşağı akış hizmetine iletmek için ham baytlar üzerinde çalışmalıdır:

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, kitaplıkların akış girdileri beklediği durumlar için erişilebilir yeni bir MemoryStream döndürür. Sıkıştırma veya şifreleme öncesi son baytları teslim ederken yararlıdır. Bellek içinde PDF işleme hakkında daha fazla bilgiye PDF bellek akışı kılavuzunda ulaşabilirsiniz.

Kaydetmeden Önce Güvenlik Ayarlarını Nasıl Uygularsınız?

Form dışa aktarımları genellikle hassas veriler içerir. IronPDF'in güvenlik API'si, PDF'yi şifreler ve alıcıların ne yapabileceğini kısıtlar:

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

Bir sahip parolası belirlemek, yöneticilerin izin bayraklarını kontrol etmelerine olanak tanır, kullanıcı parolası ise belge erişimini tamamen kapatır. AllowUserPrinting bayrağı burada özellikle önemlidir -- alıcının düzenleme hakları vermeden dışa aktarılan formu yeniden yazdırmasına izin verebilirsiniz. Tam detaylar PDF izin ve parolalar kılavuzunda bulunabilir.

C# Formları İç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 renderlemesi arasında seçim, doğruluk, karmaşıklık ve taşınabilirlikle ilgili tavizlere bağlıdır:

C# formu PDF'ye dönüştürme yaklaşımlarının karşılaştırılması
Yaklaşım Çıktı Sadakati Kod Karmaşıklığı Çapraz Platform CSS Desteği En İyi İçin
PrintDocument + PDF yazıcı sürücüsü Orta Orta Sadece Windows None Mevcut baskı mantığı ile eski WinForms
GDI+ Bitmap yakalama (Control.DrawToBitmap) Yüksek (rastersel) Düşük Sadece Windows None Hızlı ekran görüntüsü tarzı yakalamalar
IronPDF HTML oluşturma Yüksek (vektörel) Düşük Windows, Linux, macOS, Docker Tam CSS3 Profesyonel, taşınabilir, veri odaklı dışa aktarımlar
ReportViewer (RDLC) Yüksek Yüksek Sadece Windows Sınırlı Gruplama ile karmaşık sayfalandırılmış raporlar

IronPDF'in HTML tabanlı yaklaşımı, herhangi bir yakınlaştırma seviyesinde temiz bir şekilde ölçeklenen ve her cihazda keskin bir şekilde basılan vektörel PDF çıktısı üretir. Render motoru Chromium olduğu için, CSS medya sorguları, flexbox düzenleri ve Google Fonts beklediğiniz gibi çalışır -- GDI+ bitmap yakalama bu durumu kopyalayamaz. Kütüphane ayrıca Linux ortamlarında ve Docker kapları içinde çalışarak bu tablodaki tek seçenek olarak Windows dışında çalışır.

Form Birden Fazla Sekmeye Sahip Olduğunda Ne Olur?

Çok sekmeli WinForms iş uygulamalarında yaygındır. PDF, canlı GDI+ yüzeyinden ziyade HTML'den oluşturulduğu için, hangi sekme içeriğinin görüneceğini tam olarak kontrol edersiniz. Her sekme için bir HTML bölümü oluşturun ve render etmeden önce birleştirin. Pekinden HTML dizileri ChromePdfRenderer üzerinden tek bir, kesintisiz çok sayfalı PDF'ye akar -- her sekmeye bir mantıksal bölüm düşer. Alternatif olarak, her sekmeyi bağımsız olarak render edin ve ortaya çıkan PdfDocument nesnelerini IronPDF'nin birleştirme API'si ile birleştirin.

Form Dışa Aktarmadan Önce Nasıl Doğrulama Yaparsınız?

Sadece geçerli form verilerini dışa aktarın. Basit bir koruyucu desen, eksik gönderimlerden PDF oluşturmasını önler: Önce alanları doğrulayın ve tüm gerekli alanlar geçtikten sonra sadece HTML üretimi ve rendera devam edin. Herhangi bir alan başarısız olursa, hata kullanıcı arayüzünde vurgulanır ve dışa aktarma iptal edilir. Bu, dışa aktarılan PDFlerin tutarlı olmasını sağlar ve kısmi verilerden kaynaklanan sonraki karmaşayı önler. Microsoft'un Windows Forms doğrulaması hakkındaki belgelerine göre, ErrorProvider, herhangi bir eylemden önce alan düzeyinde doğrulama geri bildiri sistemi için standart mekanizmadır.

ASP.NET Core ile PDF Dışa Aktarımı Nasıl Sunarsınız?

ASP.NET Core ile oluşturulmuş web formları, aynı ChromePdfRenderer API'sini kullanarak PDF olarak dışa aktarabilir. Renderlanan 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 JSON olarak form verilerini alır, bellekte PDF oluşturur ve dosya indirme olarak geri akıtır. Sunucuda geçici dosyalar oluşturulmaz. Blazor uygulamaları için yaklaşım benzerdir -- bir servisten aynı renderleme kodunu çağırın ve baytları IJSRuntime aracılığıyla tarayıcıya itin. ASP.NET'ten PDF'ye kılavuzu tam ASP.NET entegrasyon kalıplarını belgelendirir.

Hangi MIME Tipi ve İçerik Dağıtımı Kullanılmalıdır?

Her zaman içeriği 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 kayıt iletişim kutusunda görünür, bu yüzden anlamlı bir isim seçin ve kimlik veya tarih ekleyin.

Oluşturulan PDF'leri Nasıl Önbelleğe Alırsınız?

Aynı form dışa aktarımı tekrarlayan şekilde istenirse, yeniden render etmeyi önlemek için bayt dizisini önbelleğe alın. IMemoryCache tek sunucu dağıtımları için çalışır; Çoklu örnek kurulumları için Redis gibi bir dağıtılmış önbellek kullanın. Alttaki form verilerinin ne sıklıkla değiştiği ile uyumlu bir sona erme ayarlayın.

Formdan PDF'ye Dışa Aktarımlar için En İyi Uygulamalar Nelerdir?

Tutarlı, yüksek kaliteli form dışa aktarımları, birkaç tekrarlanabilir desenden gelir:

  • HTML'i basit tutun. JavaScript ağırlıklı şablonlardan kaçının -- saf HTML ve CSS daha hızlı render edilir ve daha küçük PDF'ler üretir. Form hesaplamaları buna bağlı olduğunda yalnızca RenderingOptions.EnableJavaScript etkinleştirin.
  • Baskı CSS'si kullanın. CssMediaType = PdfCssMediaType.Print ayarlayın ve stil sayfanızda @media print kurallarını tanımlayın. Bu, ekran yalnızca olan kromları, örneğin gezinme çubukları ve yan çubukları, dışa aktarılan PDF'den çıkartır.
  • Kullanıcı girişini temizleyin. Şablona enjekte ettiğiniz herhangi bir alan değerindeki HTML varlıklarını kaçırın, böylece kırık işaretlemeye veya kenar durumlarında PDF içine script enjeksiyonuna neden olmaz.
  • PdfDocument nesnelerini atın. Yönetilmeyen kaynaklar, boşaltılana kadar tutulur. Kaydettikten sonra using beyannamelerini kullanın veya explisit olarak Dispose() çağırın.
  • Üretim verileriyle test yapın. Laon metin, özel karakterler veya gömülü görüntüler içeren formlar sürpriz iletimler üretebilir. Geliştirme sırasında dışa aktarımları gerçek veri örneklerine karşı çalıştırın.

Render seçenekleri referansı özel kağıt boyutlarından özel marjlara ve sayfa yönelimine kadar her ayarı belgelendirir.

Büyük veya Çok Sayfalı Formlar Nasıl Ele Alınır?

IronPDF, içerik yüksekliğine ve seçilen kağıt boyutuna göre otomatik olarak sayfalandırır. Yeni bir form bölümü her zaman yeni bir sayfada başlamalı ise, CSS'deki bölüm konteynerlerine page-break-before: always ekleyin. Yüzlerce alan içeren formlar için, tahmini kapasiteye sahip bir MemoryStream önceden ayrılması, bayt dizisi kopyalanırken GC baskısını azaltır.

Dijital İmza Nasıl Eklenir?

İmzalı form dışa aktarımları birçok yargı alanında yasal ağırlık taşır. IronPDF, PFX dosyalarında saklanan veya Windows sertifika mağazalarında saklanan dijital sertifikaları 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 imzalar genel bakış 'a göre, bir dijital imza belgenin kökenini tasdik eder ve imzalandıktan sonra yapılan herhangi bir değişikliği etkiler. PDF dijital imzalama kılavuzu sertifika yapılandırmasını ve görünür imza alanlarını ayrıntılı olarak kapsar.

Hangi Anahtar Noktaları Almalısınız?

IronPDF ile bir C# Windows Formunu PDF'ye dönüştürmek üç adımda azalır: form verilerinin bir HTML temsili oluşturun, bunu ChromePdfRenderer'a aktarın ve sonucu kaydedin veya iletin. GDI+ bitmap yakalama ve eski baskı sürücüsü yöntemlerinin eşleşemediği avantajlar sağlar: temiz bir şekilde ölçeklenen ve herhangi bir cihazda keskin bir şekilde basılan vektör PDF'ler üretir.

Bu kılavuzda ele alınan anahtar yetenekler:

  • WinForms ve ASP.NET Core için ChromePdfRenderer ile HTML-to-PDF renderleme
  • WinForms kontrollerinden HTML şablonlarına canlı veri bağlama
  • TextHeaderFooter ile başlıklar, altbilgiler ve sayfa numaralandırma
  • HTTP yanıtları ve veritabanı depolaması için BinaryData üzerinden bellekteki bayt dizisi çıktısı
  • PDF güvenlik ayarları: sahip/kullanıcı parolaları ve izin bayrakları
  • Yasal bağlayıcı dışa aktarımlar için dijital imza eki

Ek açıklama araçlarını, form alanı düzenlemeyi, PDF/A uyumluğunu ve daha fazlasını görmek için IronPDF özelliği setini keşfedin. IronPDF'i ücretsiz olarak deneyin, 30 günlük deneme lisansı ile kendi form dışa aktarma iş akışınıza hemen uygulayın.

Sıkça Sorulan Sorular

IronPDF kullanarak bir C# formunu PDF'ye nasıl dönüştürebilirim?

IronPDF kullanarak bir C# formunu PDF'ye dönüştürebilirsiniz, bu da karmaşık kod olmadan PDF dönüştürmeyi verimli bir şekilde yönetmenize olanak tanır.

Neden .NET uygulamalarında PDF belgelerini bayt dizilerine dönüştürmek önemlidir?

PDF belgelerini bayt dizilerine dönüştürmek önemlidir çünkü bu, modern .NET uygulamalarında kritik işlemler olan veritabanlarında PDF saklama, API'ler aracılığıyla iletim ve bellek içi belge içeriği işlemlerini sağlar.

Bayt dizisi dönüştürme için IronPDF kullanmanın faydaları nelerdir?

IronPDF, kolay kullanımlı bir API sağlayarak süreci kolaylaştırır, karmaşık kod ihtiyacını azaltır ve geliştirme verimliliğini artırır.

IronPDF, bellekte PDF dönüştürme işlemi yapabilir mi?

Evet, IronPDF bellekte PDF dönüştürme yapabilir, böylece geliştiricilerin belgeleri disk üzerinde kaydetmek zorunda kalmadan içeriği yönetmelerine olanak tanır.

IronPDF kullanarak PDF'leri veritabanında saklamak mümkün mü?

Evet, IronPDF kullanarak PDF'leri bayt dizilerine dönüştürüp veritabanında saklayabilirsiniz, bu da veritabanı sistemleriyle sorunsuz entegrasyonu kolaylaştırır.

IronPDF, API'ler aracılığıyla PDF dosyalarını iletmekte nasıl yardımcı olur?

IronPDF, PDF'leri bayt dizilerine dönüştürerek API'ler aracılığıyla dosyaları iletme işlemini kolaylaştırır, böylece belge verilerini ağ protokolleri üzerinden göndermek ve almak daha kolay hale gelir.

IronPDF'un API'si geliştiriciler için neden sezgiseldir?

IronPDF'un API'si, karmaşık PDF işlemlerini basitleştiren ve öğrenme eğrisini azaltan net ve basit yöntemler sağlayarak geliştiriciler için sezgisel olarak tasarlanmıştır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

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