Altbilgi içeriğine atla
IRONPDF KULLANARAK

C# PNG'yi PDF'ye Dönüştürme (Kod Örnekleri Eğitimi)

Fluent Validation Nedir?

FluentValidation, yazım tipine uygun doğrulama kuralları oluşturmayı kolaylaştıran bir .NET doğrulama kütüphanesidir. Akıcı bir arayüz ve lambda ifadeleri kullanarak, kodu daha okunabilir ve bakımı kolay hale getirir. Model sınıflarınızda veri ek açıklamaları veya manuel doğrulama kullanmak yerine, doğrulama mantığınız için ayrı bir sınıf oluşturmak üzere Fluent Validation kullanabilirsiniz.

Fluent Validation, doğrulamalar oyununa daha fazla esneklik getirir. Yaygın senaryolar için yerleşik doğrulayıcılar, özel doğrulamalar oluşturabilme yeteneği ve doğrulama kurallarını zincirlemek için basit bir yol ile Fluent Validation, .NET Core araç setinde güçlü bir araçtır.

Fluent Validation Anlamak

Fluent Validation, .NET için açık kaynaklı bir kütüphane olup model sınıflarınıza doğrulama kuralları oluşturmayı kolaylaştırır.

  1. Doğrulayıcılar: Doğrulayıcılar, doğrulama mantığını kapsayan sınıflardır. Bunlar genellikle AbstractValidator<t> taban sınıfından türetilerek oluşturulur.
  2. Kurallar: Kural, bir özelliğin sağlamak zorunda olduğu bir doğrulama koşuludur. Kurallar bir doğrulayıcı sınıfta RuleFor yöntemi kullanılarak tanımlanır.
  3. Doğrulama Başarısızlıkları: Bir kural başarısız olursa, Fluent Validation hata hakkında ayrıntılar içeren, özellikle özellik adı ve hata mesajını içeren bir ValidationFailure nesnesi oluşturur.

IronPDF Nedir?

IronPDF - HTML'yi C# ile PDF'ye Dönüştürün güçlü bir .NET kütüphanesi olup HTML içeriğinden PDF belgeleri oluşturmanıza izin verir. Faturalar, raporlar veya başka türden belgeler oluşturmanız gerekip gerekmediğine bakılmaksızın IronPDF, kullanımı kolay bir çözüm sunar. Bu, ASP.NET Core uygulamalarınıza sorunsuz bir şekilde entegre olur ve yalnızca birkaç satır kodla yüksek kaliteli PDF dosyaları oluşturmanıza olanak tanır.

IronPDF ile Fluent Validation Kullanma

Artık Fluent Validation ve IronPDF'nin ne olduğunu bildiğimize göre, bunların birlikte nasıl kullanılacağını görelim. Bu öğretici, faturanın içeriği IronValidation kullanılarak ASP.NET Core'da doğrulandıktan sonra IronPDF kullanılarak oluşturulacak bir fatura üretici oluşturmaya yardımcı olacak.

Proje Kurulumu

Başlamak için, Visual Studio veya tercih ettiğiniz geliştirme ortamında yeni bir Konsol Uygulaması oluşturalım.

  1. Visual Studio'yu açın ve Dosya > Yeni > Proje seçeneğine gidin.
  2. Proje şablonu olarak "Konsol Uygulaması (ASP.NET Core)" seçin ve projenize bir isim verin.

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 1: Yeni Bir Konsol Uygulaması Oluşturma Yeni Konsol Uygulaması Oluştur

  1. Sonraki düğmesine tıklayın ve projenizi adlandırarak ve depo konumunu seçerek yapılandırın.

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 2: Yeni Uygulamanın Yapılandırılması Yeni uygulamayı yapılandırın

  1. Sonraki butonuna tıklayın ve .NET Framework sürümünü seçin. En yeni .NET Framework (7) önerilir.

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 3: .NET Framework seçimi .NET Framework seçimi

  1. Projeyi oluşturmak için Oluştur butonuna tıklayın.

Gerekli Paketleri Kur

Proje oluşturulduktan sonra Fluent Validation ve IronPDF için gerekli NuGet paketlerini ekleyin.

  1. Çözüm Gezgini'nde projeye sağ tıklayın ve "NuGet Paketlerini Yönet" seçeneğini seçin.
  2. "FluentValidation" kelimesini arayın ve paketi projeye eklemek için "Install" butonuna tıklayın.

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 4: NuGet Paket Yöneticisi UI'de FluentValidation paketini yükleyin NuGet Paket Yöneticisi UI'de FluentValidation paketi kurun

  1. Benzer şekilde, "IronPDF - Güçlü .NET PDF Kütüphanesi" arayın ve IronPDF paketini kurun.

Alternatif olarak, aşağıdaki komutu kullanarak IronPDF'i NuGet Paket Yöneticisi Konsolu ile kurabilirsiniz:

Install-Package IronPdf

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 5: Paket Yöneticisi Konsolunda IronPDF paketini yükleyin Paket Yöneticisi Konsolu'nda IronPDF paketini kurun

Proje kurulumu tamamlanıp gerekli paketler yüklendikten sonra, PDF içerik sınıfını tanımlamaya geçelim.

PDF İçeriğini Tanımlama

Bu örnekte, InvoiceContent ve InvoiceItem olmak üzere iki sınıftaki HTML kodlarından basit bir fatura PDF'si oluşturulacaktır.

using System.Collections.Generic;
using System.Linq;

public abstract class PdfContent
{
    // Abstract method to generate the HTML string
    public abstract string RenderHtml();
}

public class InvoiceContent : PdfContent
{
    public string CustomerName { get; set; }
    public string Address { get; set; }
    public List<InvoiceItem> InvoiceItems { get; set; }

    // Constructs the HTML representation of the invoice
    public override string RenderHtml()
    {
        string invoiceItemsHtml = string.Join("", InvoiceItems.Select(item => $"<li>{item.Description}: {item.Price}</li>"));
        return $"<h1>Invoice for {CustomerName}</h1><p>{Address}</p><ul>{invoiceItemsHtml}</ul>";
    }
}

public class InvoiceItem
{
    public string Description { get; set; }
    public decimal Price { get; set; }
}
using System.Collections.Generic;
using System.Linq;

public abstract class PdfContent
{
    // Abstract method to generate the HTML string
    public abstract string RenderHtml();
}

public class InvoiceContent : PdfContent
{
    public string CustomerName { get; set; }
    public string Address { get; set; }
    public List<InvoiceItem> InvoiceItems { get; set; }

    // Constructs the HTML representation of the invoice
    public override string RenderHtml()
    {
        string invoiceItemsHtml = string.Join("", InvoiceItems.Select(item => $"<li>{item.Description}: {item.Price}</li>"));
        return $"<h1>Invoice for {CustomerName}</h1><p>{Address}</p><ul>{invoiceItemsHtml}</ul>";
    }
}

public class InvoiceItem
{
    public string Description { get; set; }
    public decimal Price { get; set; }
}
Imports System.Collections.Generic
Imports System.Linq

Public MustInherit Class PdfContent
	' Abstract method to generate the HTML string
	Public MustOverride Function RenderHtml() As String
End Class

Public Class InvoiceContent
	Inherits PdfContent

	Public Property CustomerName() As String
	Public Property Address() As String
	Public Property InvoiceItems() As List(Of InvoiceItem)

	' Constructs the HTML representation of the invoice
	Public Overrides Function RenderHtml() As String
		Dim invoiceItemsHtml As String = String.Join("", InvoiceItems.Select(Function(item) $"<li>{item.Description}: {item.Price}</li>"))
		Return $"<h1>Invoice for {CustomerName}</h1><p>{Address}</p><ul>{invoiceItemsHtml}</ul>"
	End Function
End Class

Public Class InvoiceItem
	Public Property Description() As String
	Public Property Price() As Decimal
End Class
$vbLabelText   $csharpLabel

Yukarıdaki kodda, PdfContent adlı soyut bir sınıf, RenderHtml adlı soyut bir yöntem ile tanımlanır. InvoiceContent sınıfı PdfContent sınıfını genişletir ve fatura PDF'sinin içeriğini temsil eder. Müşteri adı, adresi ve fatura kalemleri listesine ait özellikleri vardır. InvoiceItem sınıfı 'Description' ve 'Price' olmak üzere iki özelliğe sahiptir. RenderHtml yöntemi, içerik baz alınarak fatura için HTML işaretlemesini oluşturur.

Artık PDF içeriği tanımlandığına göre, Fluent Validation kullanarak doğrulama kuralları oluşturma işlemine geçelim.

Doğrulama Kurallarını Oluşturma

InvoiceContent sınıfı için doğrulama kuralları oluşturmak üzere InvoiceContentValidator adlı bir doğrulayıcı sınıf oluşturun. Bu sınıf, FluentValidation tarafından sağlanan AbstractValidator<InvoiceContent> sınıfından türeyecek.

using FluentValidation;

public class InvoiceContentValidator : AbstractValidator<InvoiceContent>
{
    public InvoiceContentValidator()
    {
        RuleFor(content => content.CustomerName).NotEmpty().WithMessage("Customer name is required.");
        RuleFor(content => content.Address).NotEmpty().WithMessage("Address is required.");
        RuleFor(content => content.InvoiceItems).NotEmpty().WithMessage("At least one invoice item is required.");
        RuleForEach(content => content.InvoiceItems).SetValidator(new InvoiceItemValidator());
    }
}

public class InvoiceItemValidator : AbstractValidator<InvoiceItem>
{
    public InvoiceItemValidator()
    {
        RuleFor(item => item.Description).NotEmpty().WithMessage("Description is required.");
        RuleFor(item => item.Price).GreaterThanOrEqualTo(0).WithMessage("Price must be greater than or equal to 0.");
    }
}
using FluentValidation;

public class InvoiceContentValidator : AbstractValidator<InvoiceContent>
{
    public InvoiceContentValidator()
    {
        RuleFor(content => content.CustomerName).NotEmpty().WithMessage("Customer name is required.");
        RuleFor(content => content.Address).NotEmpty().WithMessage("Address is required.");
        RuleFor(content => content.InvoiceItems).NotEmpty().WithMessage("At least one invoice item is required.");
        RuleForEach(content => content.InvoiceItems).SetValidator(new InvoiceItemValidator());
    }
}

public class InvoiceItemValidator : AbstractValidator<InvoiceItem>
{
    public InvoiceItemValidator()
    {
        RuleFor(item => item.Description).NotEmpty().WithMessage("Description is required.");
        RuleFor(item => item.Price).GreaterThanOrEqualTo(0).WithMessage("Price must be greater than or equal to 0.");
    }
}
Imports FluentValidation

Public Class InvoiceContentValidator
	Inherits AbstractValidator(Of InvoiceContent)

	Public Sub New()
		RuleFor(Function(content) content.CustomerName).NotEmpty().WithMessage("Customer name is required.")
		RuleFor(Function(content) content.Address).NotEmpty().WithMessage("Address is required.")
		RuleFor(Function(content) content.InvoiceItems).NotEmpty().WithMessage("At least one invoice item is required.")
		RuleForEach(Function(content) content.InvoiceItems).SetValidator(New InvoiceItemValidator())
	End Sub
End Class

Public Class InvoiceItemValidator
	Inherits AbstractValidator(Of InvoiceItem)

	Public Sub New()
		RuleFor(Function(item) item.Description).NotEmpty().WithMessage("Description is required.")
		RuleFor(Function(item) item.Price).GreaterThanOrEqualTo(0).WithMessage("Price must be greater than or equal to 0.")
	End Sub
End Class
$vbLabelText   $csharpLabel

Kaynak kodda, InvoiceContentValidator sınıfı tanımlanır ve AbstractValidator<InvoiceContent> sınıfından türetilir. Doğrulayıcı sınıfın yapıcısında, RuleFor yöntemi, InvoiceContent sınıfının her özelliği için doğrulama kurallarını tanımlar.

Örneğin, RuleFor(content => content.CustomerName) müşteri adının boş olmaması gerektiğini belirtir. Benzer şekilde, adres ve fatura kalemleri özellikleri için doğrulama kuralları tanımlanmıştır.

RuleForEach yöntemi, InvoiceItems listesindeki her öğe üzerinde döner ve InvoiceItemValidator uygular. InvoiceItemValidator sınıfı, InvoiceItem sınıfı için doğrulama kuralları içerir.

Bu doğrulama kuralları varken, IronPDF kullanarak PDF oluşturma işlemine geçelim.

IronPDF Kullanarak PDF Oluşturma

IronPDF - PDF Belgeleri Oluşturun ve Düzenleyin, PDF belgeleri oluşturup manipüle etmek için popüler bir .NET kütüphanesidir. IronPDF, doğrulanmış fatura içeriğine dayalı olarak PDF oluşturmak için kullanılacaktır.

using IronPdf;
using FluentValidation;

public class PdfService
{
    // Generates a PDF document for the provided content
    public PdfDocument GeneratePdf<t>(T content) where T : PdfContent
    {
        // Validate the content using the appropriate validator
        var validator = GetValidatorForContent(content);
        var validationResult = validator.Validate(content);

        // Check if validation is successful
        if (!validationResult.IsValid)
        {
            throw new FluentValidation.ValidationException(validationResult.Errors);
        }

        // Generate the PDF using IronPDF
        var renderer = new ChromePdfRenderer();
        return renderer.RenderHtmlAsPdf(content.RenderHtml());
    }

    // Retrieves the appropriate validator for the content
    private IValidator<t> GetValidatorForContent<t>(T content) where T : PdfContent
    {
        if (content is InvoiceContent)
        {
            return (IValidator<t>)new InvoiceContentValidator();
        }
        else
        {
            throw new NotSupportedException("Unsupported content type.");
        }
    }
}
using IronPdf;
using FluentValidation;

public class PdfService
{
    // Generates a PDF document for the provided content
    public PdfDocument GeneratePdf<t>(T content) where T : PdfContent
    {
        // Validate the content using the appropriate validator
        var validator = GetValidatorForContent(content);
        var validationResult = validator.Validate(content);

        // Check if validation is successful
        if (!validationResult.IsValid)
        {
            throw new FluentValidation.ValidationException(validationResult.Errors);
        }

        // Generate the PDF using IronPDF
        var renderer = new ChromePdfRenderer();
        return renderer.RenderHtmlAsPdf(content.RenderHtml());
    }

    // Retrieves the appropriate validator for the content
    private IValidator<t> GetValidatorForContent<t>(T content) where T : PdfContent
    {
        if (content is InvoiceContent)
        {
            return (IValidator<t>)new InvoiceContentValidator();
        }
        else
        {
            throw new NotSupportedException("Unsupported content type.");
        }
    }
}
Imports IronPdf
Imports FluentValidation

Public Class PdfService
    ' Generates a PDF document for the provided content
    Public Function GeneratePdf(Of T As PdfContent)(content As T) As PdfDocument
        ' Validate the content using the appropriate validator
        Dim validator = GetValidatorForContent(content)
        Dim validationResult = validator.Validate(content)

        ' Check if validation is successful
        If Not validationResult.IsValid Then
            Throw New FluentValidation.ValidationException(validationResult.Errors)
        End If

        ' Generate the PDF using IronPDF
        Dim renderer = New ChromePdfRenderer()
        Return renderer.RenderHtmlAsPdf(content.RenderHtml())
    End Function

    ' Retrieves the appropriate validator for the content
    Private Function GetValidatorForContent(Of T As PdfContent)(content As T) As IValidator(Of T)
        If TypeOf content Is InvoiceContent Then
            Return CType(New InvoiceContentValidator(), IValidator(Of T))
        Else
            Throw New NotSupportedException("Unsupported content type.")
        End If
    End Function
End Class
$vbLabelText   $csharpLabel

PdfService sınıfı bir GeneratePdf yöntemi sağlar. Bu yöntem, bir PdfContent nesnesini girdi olarak alır ve doğrulanan içeriğe dayalı olarak PDF belgesini üretir.

Öncelikle, içerik için uygun doğrulayıcıyı, içeriğin türünü kontrol eden ve ilgili doğrulayıcıyı döndüren GetValidatorForContent yöntemini çağırarak getirir. Bizim durumumuzda, InvoiceContent destekliyoruz ve InvoiceContentValidator kullanıyoruz.

Sonraki adımda, içerik doğrulayıcı kullanılarak doğrulanır ve doğrulayıcının Validate yöntemi çağrılır. Doğrulama sonucu, bir ValidationResult nesnesinde saklanır.

Doğrulama başarısız olursa (!validationResult.IsValid), doğrulama hatalarıyla birlikte bir FluentValidation.ValidationException atılır. Aksi takdirde, PDF IronPDF ile oluşturulur.

ChromePdfRenderer örneği, HTML içeriğini PDF olarak oluşturmak için oluşturulur. RenderHtmlAsPdf yöntemi renderer nesnesinde çağrılarak, content.RenderHtml yöntemi tarafından üretilen HTML içine geçirilir ve PDF belgesi oluşturulur.

Artık PDF oluşturma mantığını tanımladığımıza göre, meydana gelebilecek doğrulama hatalarını ele alalım.

Doğrulama Hatalarını Ele Alma

Doğrulama hatası meydana geldiğinde, bir hata mesajı göstermek ve zarif bir şekilde ele almak istiyoruz. Main yöntemini, Program sınıfında, olası istisnaları ele alması ve kullanıcıya anlamlı mesajlar göstermesi için değiştirelim.

using System;
using System.Collections.Generic;

public class Program
{
    static void Main(string[] args)
    {
        var pdfService = new PdfService();

        // Test 1: Empty Customer Name
        try
        {
            var invoiceContent = new InvoiceContent
            {
                CustomerName = "",
                Address = "123 Main St, Anytown, USA",
                InvoiceItems = new List<InvoiceItem> {
                    new InvoiceItem { Description = "Item 1", Price = 19.99M },
                    new InvoiceItem { Description = "Item 2", Price = 29.99M }
                }
            };

            var pdfDocument = pdfService.GeneratePdf(invoiceContent);
            pdfDocument.SaveAs("C:\\TestInvoice.pdf");
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error generating PDF: " + ex.Message);
        }

        // Test 2: Empty InvoiceItems
        try
        {
            var invoiceContent = new InvoiceContent
            {
                CustomerName = "John Doe",
                Address = "123 Main St, Anytown, USA",
                InvoiceItems = new List<InvoiceItem>()  // Empty list
            };

            var pdfDocument = pdfService.GeneratePdf(invoiceContent);
            pdfDocument.SaveAs("C:\\TestInvoice.pdf");
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error generating PDF: " + ex.Message);
        }

        // Successful generation
        try
        {
            var invoiceContent = new InvoiceContent
            {
                CustomerName = "John Doe",
                Address = "123 Main St, Anytown, USA",
                InvoiceItems = new List<InvoiceItem> {
                    new InvoiceItem { Description = "Item 1", Price = 19.99M },
                    new InvoiceItem { Description = "Item 2", Price = 29.99M }
                }
            };
            var pdfDocument = pdfService.GeneratePdf(invoiceContent);
            pdfDocument.SaveAs("C:\\TestInvoice.pdf");
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error generating PDF: " + ex.Message);
        }
    }
}
using System;
using System.Collections.Generic;

public class Program
{
    static void Main(string[] args)
    {
        var pdfService = new PdfService();

        // Test 1: Empty Customer Name
        try
        {
            var invoiceContent = new InvoiceContent
            {
                CustomerName = "",
                Address = "123 Main St, Anytown, USA",
                InvoiceItems = new List<InvoiceItem> {
                    new InvoiceItem { Description = "Item 1", Price = 19.99M },
                    new InvoiceItem { Description = "Item 2", Price = 29.99M }
                }
            };

            var pdfDocument = pdfService.GeneratePdf(invoiceContent);
            pdfDocument.SaveAs("C:\\TestInvoice.pdf");
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error generating PDF: " + ex.Message);
        }

        // Test 2: Empty InvoiceItems
        try
        {
            var invoiceContent = new InvoiceContent
            {
                CustomerName = "John Doe",
                Address = "123 Main St, Anytown, USA",
                InvoiceItems = new List<InvoiceItem>()  // Empty list
            };

            var pdfDocument = pdfService.GeneratePdf(invoiceContent);
            pdfDocument.SaveAs("C:\\TestInvoice.pdf");
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error generating PDF: " + ex.Message);
        }

        // Successful generation
        try
        {
            var invoiceContent = new InvoiceContent
            {
                CustomerName = "John Doe",
                Address = "123 Main St, Anytown, USA",
                InvoiceItems = new List<InvoiceItem> {
                    new InvoiceItem { Description = "Item 1", Price = 19.99M },
                    new InvoiceItem { Description = "Item 2", Price = 29.99M }
                }
            };
            var pdfDocument = pdfService.GeneratePdf(invoiceContent);
            pdfDocument.SaveAs("C:\\TestInvoice.pdf");
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error generating PDF: " + ex.Message);
        }
    }
}
Imports System
Imports System.Collections.Generic

Public Class Program
	Shared Sub Main(ByVal args() As String)
		Dim pdfService As New PdfService()

		' Test 1: Empty Customer Name
		Try
			Dim invoiceContent As New InvoiceContent With {
				.CustomerName = "",
				.Address = "123 Main St, Anytown, USA",
				.InvoiceItems = New List(Of InvoiceItem) From {
					New InvoiceItem With {
						.Description = "Item 1",
						.Price = 19.99D
					},
					New InvoiceItem With {
						.Description = "Item 2",
						.Price = 29.99D
					}
				}
			}

			Dim pdfDocument = pdfService.GeneratePdf(invoiceContent)
			pdfDocument.SaveAs("C:\TestInvoice.pdf")
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine("Error generating PDF: " & ex.Message)
		End Try

		' Test 2: Empty InvoiceItems
		Try
			Dim invoiceContent As New InvoiceContent With {
				.CustomerName = "John Doe",
				.Address = "123 Main St, Anytown, USA",
				.InvoiceItems = New List(Of InvoiceItem)()
			}

			Dim pdfDocument = pdfService.GeneratePdf(invoiceContent)
			pdfDocument.SaveAs("C:\TestInvoice.pdf")
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine("Error generating PDF: " & ex.Message)
		End Try

		' Successful generation
		Try
			Dim invoiceContent As New InvoiceContent With {
				.CustomerName = "John Doe",
				.Address = "123 Main St, Anytown, USA",
				.InvoiceItems = New List(Of InvoiceItem) From {
					New InvoiceItem With {
						.Description = "Item 1",
						.Price = 19.99D
					},
					New InvoiceItem With {
						.Description = "Item 2",
						.Price = 29.99D
					}
				}
			}
			Dim pdfDocument = pdfService.GeneratePdf(invoiceContent)
			pdfDocument.SaveAs("C:\TestInvoice.pdf")
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine("Error generating PDF: " & ex.Message)
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

Yukarıdaki kodda, meydana gelebilecek her türlü istisnayı yakalamak için try-catch blokları kullanılır. Bir istisna yakalanırsa, kullanıcıya Console.WriteLine kullanılarak bir hata mesajı gösterilecektir.

Şimdi bu uygulamayı, PDF oluşturmayı ve doğrulama kurallarını doğrulamak için farklı senaryolarla test edin.

Uygulamayı Test Etme

Kod örneğinde test edilecek üç senaryo bulunmaktadır:

  1. Boş müşteri adı: Müşteri adını boş bırakarak bir doğrulama hatası tetikleyin.
  2. Boş fatura kalemleri: Boş fatura kalemleri listesi sağlayarak bir doğrulama hatası tetikleyin.
  3. Başarılı oluşturma: Geçerli içerik sağlayarak PDF'yi başarıyla oluşturun.

Uygulamayı çalıştırın ve çıktıyı konsolda gözlemleyin.

Error generating PDF: Validation failed:
    -- CustomerName: Customer name is required. Severity: Error
Error generating PDF: Validation failed:
    -- InvoiceItems: At least one invoice item is required. Severity: Error
PDF generated successfully!

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 6: Konsolda Çıktı Hatası Konsoldaki çıktı hatası

IronPDF ile Fluent Validation Nasıl Kullanılır, Şekil 7: Çıktı PDF Dosyası Çıktı PDF dosyası

Beklendiği gibi, ilk iki senaryo için doğrulama hataları gösterilir ve üçüncü senaryo için bir başarı mesajı gösterilir.

Sonuç

Bu öğretici, Fluent Validation ve IronPDF kullanarak PDF belgelerini nasıl üretebileceğini keşfetti. Konsol Uygulaması kurulumuna başlayarak ve PDF içerik sınıfını tanımlayarak başladı. Ardından, Fluent Validation kullanarak doğrulama kuralları oluşturdum ve farklı senaryolarla PDF oluşturmayı test ettik.

Fluent Validation, .NET uygulamalarında nesneleri doğrulama konusunda esnek ve kullanımı kolay bir yaklaşım sunar. Doğrulama kurallarını tipine uygun bir şekilde tanımlamanıza, hata mesajlarını özelleştirmenize ve doğrulama hatalarını zarif bir şekilde ele almanıza olanak tanır.

IronPDF Ücretsiz Deneme ve Lisanslama Bilgisi ücretsiz deneme sunar ve lisans, geliştirici başına 499 $'dan başlar.

Sıkça Sorulan Sorular

Fluent Validation'ı PDF oluşturma ile C#'ta nasıl entegre edebilirim?

C#’da PDF oluşturma ile Fluent Validation entegrasyonu yapmak için, Visual Studio’da bir Konsol Uygulaması kurabilir, NuGet üzerinden FluentValidation ve IronPDF paketlerini yükleyebilir ve PDF’ler oluştururken Fluent Validation kullanarak model doğrulama mantığınızı tanımlayabilirsiniz.

PDF oluşturma ve doğrulama için bir projeyi kurmak hangi adımları içerir?

Bir proje kurmak için Visual Studio'da yeni bir Konsol Uygulaması oluşturun, IronPDF ve FluentValidation paketlerini NuGet aracılığıyla yükleyin ve ardından PDF içeriğinizi ve doğrulama kurallarınızı ilgili kütüphaneleri kullanarak tanımlayın.

Bir .NET kütüphanesi kullanarak HTML içeriğinden nasıl PDF oluşturabilirim?

HTML içeriğinden IronPDF'nin RenderHtmlAsPdf yöntemiyle PDF oluşturabilirsiniz. Bu yöntem, HTML dizgilerini veya dosyalarını yüksek kaliteli PDF'lere dönüştürmenizi sağlar.

PdfService sınıfının dersteki amacı nedir?

Bu öğreticideki PdfService sınıfı, PDF oluşturmayı yönetmek için önce içeriği Fluent Validation kullanarak doğrulamak üzere tasarlanmıştır. Başarılı doğrulama üzerine, PDF'yi oluşturmak için IronPDF'nin ChromePdfRenderer ve RenderHtmlAsPdf yöntemlerini kullanır.

Fluent Validation kullanarak doğrulama kuralları nasıl tanımlanır?

Fluent Validation'da doğrulama kuralları, AbstractValidator sınıfından türetilen bir doğrulayıcı sınıfı oluşturarak tanımlanır. Bu sınıf içinde, her bir özellik için koşulları belirtmek, özel hata mesajları tanımlamak ve kuralları zincirlemek için RuleFor metodu kullanılır.

PDF oluşturma sırasında doğrulama başarısız olursa ne olur?

Doğrulama başarısız olursa, Fluent Validation, doğrulama hataları hakkında ayrıntılı bilgiler içeren bir ValidationException fırlatır, bu da neyin yanlış gittiğini kullanıcıya bildirmek için kullanılabilir.

Karmaşık nesne doğrulaması için Fluent Validation kullanabilir miyim?

Evet, Fluent Validation, modeliniz içerisindeki iç içe geçmiş özellikleri ve koleksiyonları doğrulamanıza olanak tanıyan alt doğrulayıcılar kullanarak karmaşık nesne doğrulamasını destekler.

Fluent Validation'da hata mesajlarını nasıl özelleştirebilirim?

Fluent Validation'da özel hata mesajları, RuleFor ile belirtilen her bir doğrulama kuralı için WithMessage yöntemi kullanılarak tanımlanabilir.

PDF oluşturma kütüphanesi için bir deneme sürümü mevcut mu?

Evet, IronPDF, geliştiricilerin kütüphanenin yeteneklerini test etmeleri için ücretsiz bir deneme sürümü sunar ve lisanslama seçenekleri geliştirici başına 499 $'dan başlamaktadır.

IronPDF, .NET 10 ile tam uyumlu mu?

Evet. IronPDF, .NET 10 ile tamamen uyumludur ve Windows, Linux, macOS gibi platformları çeşitli proje türlerinde (konsol, web, masaüstü, Blazor vb.) destekler. En son çalışma zamanı ile kutudan çıktığı gibi çalışır ve ek çözümler gerektirmez.

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