Przejdź do treści stopki
KORZYSTANIE Z IRONPDF

C# Konwertuj PNG na PDF (Samouczek z przykładem kodu)

Czym jest Fluent Validation?

FluentValidation to biblioteka walidacyjna .NET, która pomaga w tworzeniu reguł walidacji silnie typowanych. Wykorzystuje płynny interfejs i wyrażenia lambda, dzięki czemu kod jest bardziej czytelny i łatwiejszy w utrzymaniu. Zamiast używać adnotacji danych lub ręcznej walidacji w klasach modeli, możesz skorzystać z Fluent Validation, aby zbudować oddzielną klasę dla logiki walidacji.

Fluent Validation zapewnia większą elastyczność w zakresie walidacji. Dzięki wbudowanym walidatorom dla typowych scenariuszy, możliwości tworzenia niestandardowych walidacji oraz prostemu sposobowi łączenia reguł walidacji, Fluent Validation jest potężnym narzędziem w zestawie narzędzi .NET Core.

Zrozumienie płynnej walidacji

Fluent Validation to biblioteka open source dla platformy .NET, która ułatwia tworzenie reguł walidacji dla klas modeli.

  1. Walidatory: Walidatory to klasy, które hermetyzują logikę walidacji. Zazwyczaj są tworzone przez dziedziczenie z klasy bazowej AbstractValidator<t>.
  2. Reguły: Reguła to warunek walidacji, który musi spełniać dana właściwość. Zasady są definiowane za pomocą metody RuleFor w klasie walidatora.
  3. Niepowodzenia Walidacji: Jeśli zasada zawiedzie, Fluent Validation tworzy obiekt ValidationFailure, który zawiera szczegóły dotyczące błędu, w tym nazwę właściwości i komunikat o błędzie.

Czym jest IronPDF?

IronPDF - Convert HTML to PDF in C# to potężna biblioteka .NET, która pozwala generować dokumenty PDF na podstawie treści HTML. Niezależnie od tego, czy potrzebujesz tworzyć faktury, raporty czy jakikolwiek inny rodzaj dokumentu, IronPDF zapewnia łatwe w użyciu rozwiązanie. Integruje się płynnie z aplikacjami .NET Core, umożliwiając generowanie wysokiej jakości plików PDF za pomocą zaledwie kilku linii kodu.

Korzystanie z Fluent Validation z IronPDF

Teraz, gdy wiemy już, czym są Fluent Validation i IronPDF, zobaczmy, jak można je wykorzystać razem. Ten samouczek pomoże w stworzeniu generatora faktur, w którym zawartość faktury będzie sprawdzana przy użyciu FluentValidation w ASP.NET Core przed wygenerowaniem pliku PDF za pomocą IronPDF.

Konfiguracja projektu

Na początek utwórzmy nową aplikację konsolową w Visual Studio lub innym preferowanym środowisku programistycznym.

  1. Otwórz Visual Studio i przejdź do Plik > Nowy > Projekt.
  2. Wybierz "Aplikacja konsolowa (ASP.NET Core)" jako szablon projektu i nadaj nazwę swojemu projektowi.

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 1: Tworzenie nowej aplikacji konsolowej Utwórz nową aplikację konsolową

  1. Kliknij przycisk Dalej i skonfiguruj projekt, nadając mu nazwę oraz wybierając lokalizację repozytorium.

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 2: Konfiguracja nowej aplikacji Skonfiguruj nową aplikację

  1. Kliknij przycisk Dalej i wybierz .NET Framework. Zalecane jest użycie najnowszej wersji .NET Framework (7).

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 3: Wybór .NET Framework Wybór platformy .NET Framework

  1. Kliknij przycisk Utwórz, aby utworzyć projekt.

Zainstaluj wymagane pakiety

Po utworzeniu projektu dodaj niezbędne pakiety NuGet dla Fluent Validation i IronPDF.

  1. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz opcję "Zarządzaj pakietami NuGet".
  2. Wyszukaj "FluentValidation" i kliknij "Zainstaluj", aby dodać pakiet do swojego projektu.

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 4: Instalacja pakietu FluentValidation w UI Menedżera Pakietów NuGet Zainstaluj pakiet FluentValidation w interfejsie użytkownika menedżera pakietów NuGet

  1. Podobnie, wyszukaj "IronPDF – Potężna biblioteka PDF dla .NET" i zainstaluj pakiet IronPDF.

Alternatywnie można zainstalować IronPDF za pomocą konsoli NuGet Package Manager Console, używając następującego polecenia:

Install-Package IronPdf

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 5: Instalacja pakietu IronPDF w Konsoli Menedżera Pakietów Zainstaluj pakiet IronPDF w konsoli menedżera pakietów

Po skonfigurowaniu projektu i zainstalowaniu wymaganych pakietów przejdźmy do zdefiniowania klasy treści PDF.

Określenie treści pliku PDF

W tym przykładzie zostanie utworzony prosty PDF faktury z kodów HTML w dwóch klasach: InvoiceContent i InvoiceItem.

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

W powyższym kodzie zdefiniowano abstrakcyjną klasę PdfContent z abstrakcyjną metodą o nazwie RenderHtml. Klasa InvoiceContent rozszerza PdfContent i reprezentuje zawartość faktury PDF. Zawiera pola dotyczące nazwy klienta, adresu oraz listy pozycji na fakturze. Klasa InvoiceItem zawiera dwie właściwości: 'Opis' i 'Cena'. Metoda RenderHtml generuje znacznik HTML faktury na podstawie zawartości.

Teraz, gdy zawartość pliku PDF została zdefiniowana, przejdźmy do tworzenia reguł walidacji przy użyciu Fluent Validation.

Tworzenie reguł walidacji

Aby zbudować zasady walidacji dla klasy InvoiceContent, utwórz klasę walidatora o nazwie InvoiceContentValidator. Ta klasa będzie dziedziczyć po AbstractValidator<InvoiceContent>, który jest dostarczany przez FluentValidation.

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

W kodzie źródłowym zdefiniowano klasę InvoiceContentValidator, która dziedziczy po AbstractValidator<InvoiceContent>. W konstruktorze klasy walidatora metoda RuleFor definiuje zasady walidacji dla każdej właściwości klasy InvoiceContent.

Na przykład, RuleFor(content => content.CustomerName) określa, że ​​nazwa klienta nie powinna być pusta. Podobnie zdefiniowano reguły walidacji dla właściwości pozycji adresu i faktury.

Metoda RuleForEach iteruje przez każdy element na liście InvoiceItems i stosuje InvoiceItemValidator. Klasa InvoiceItemValidator zawiera zasady walidacji dla klasy InvoiceItem.

Mając te zasady walidacji, przejdźmy do generowania pliku PDF przy użyciu IronPDF.

Generowanie plików PDF za pomocą IronPDF

IronPDF – Generowanie i edycja dokumentów PDF to popularna biblioteka .NET służąca do tworzenia i edycji dokumentów PDF. Do wygenerowania pliku PDF na podstawie zweryfikowanej treści faktury zostanie użyty IronPDF.

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

Klasa PdfService udostępnia metodę GeneratePdf. Ta metoda przyjmuje obiekt PdfContent jako dane wejściowe i generuje dokument PDF na podstawie zweryfikowanej zawartości.

Najpierw pobiera odpowiedni walidator dla zawartości, wywołując metodę GetValidatorForContent, która sprawdza rodzaj zawartości i zwraca odpowiedni walidator. W naszym przypadku obsługujemy InvoiceContent i używamy InvoiceContentValidator.

Następnie zawartość jest weryfikowana za pomocą walidatora, wywołując jego metodę Validate. Wynik walidacji jest przechowywany w obiekcie ValidationResult.

Jeśli walidacja nie powiedzie się (!validationResult.IsValid), zgłaszane jest FluentValidation.ValidationException z błędami walidacyjnymi. W przeciwnym razie PDF jest generowany przy użyciu IronPDF.

Tworzona jest instancja ChromePdfRenderer do renderowania zawartości HTML jako PDF. Metoda RenderHtmlAsPdf jest wywoływana na obiekcie renderer, przekazując w wygenerowany przez metodę content.RenderHtml HTML, generując dokument PDF.

Teraz, gdy zdefiniowaliśmy logikę generowania PDF, zajmijmy się wszelkimi błędami walidacji, które mogą wystąpić.

Obsługa błędów walidacji

Kiedy występuje błąd walidacji, chcemy wyświetlić komunikat o błędzie i obsłużyć go z gracją. Zmodyfikujmy metodę Main klasy Program, aby obsłużyć wszelkie wyjątki i wyświetlać użytkownikowi znaczące komunikaty.

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

W powyższym kodzie stosowane są bloki try-catch, aby przechwycić wszelkie wyjątki, które mogą wystąpić. Jeśli wyjątek zostanie przechwycony, zostanie wyświetlony komunikat o błędzie dla użytkownika za pomocą Console.WriteLine.

Przetestujmy teraz tę aplikację w różnych scenariuszach, aby zweryfikować generowanie PDF i zasady walidacji.

Testowanie aplikacji

W przykładzie kodu są trzy scenariusze do przetestowania:

  1. Puste imię klienta: Pozostawienie pustego imienia klienta, aby wywołać błąd walidacji.
  2. Puste pozycje faktury: Dostarczenie pustej listy pozycji faktury, aby wywołać błąd walidacji.
  3. Pomyślne generowanie: Dostarczenie prawidłowej zawartości, aby pomyślnie wygenerować PDF.

Uruchom aplikację i obserwuj wynik w konsoli.

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!

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 6: Wyjściowy błąd w Konsoli Wynik błędu w konsoli

Jak korzystać z Fluent Validation z IronPDF w C#, Rysunek 7: Wyjściowy plik PDF Plik PDF wynikowy

Zgodnie z oczekiwaniami, w przypadku dwóch pierwszych scenariuszy pokazane są błędy walidacyjne, a w przypadku trzeciego scenariusza pokazana jest wiadomość o sukcesie.

Wnioski

Ten poradnik zbadał Fluent Validation i jak używać go z IronPDF do generowania dokumentów PDF. Zaczynając od ustawienia aplikacji konsolowej i zdefiniowania klasy zawartości PDF. Następnie, utworzono zasady walidacji przy użyciu Fluent Validation i przetestowano generowanie PDF w różnych scenariuszach.

Fluent Validation zapewnia elastyczne i łatwe do użycia podejście do walidacji obiektów w aplikacjach .NET. Pozwala na definiowanie zasad walidacji w sposób silnie typizowany, dostosowywanie komunikatów o błędach i z gracją obsługiwanie błędów walidacji.

IronPDF Free Trial & Licensing Information oferuje bezpłatną wersję próbną, a licencja zaczyna się od $499 na dewelopera.

Często Zadawane Pytania

Jak mogę zintegrować Fluent Validation z generowaniem PDF w C#?

Aby zintegrować Fluent Validation z generowaniem PDF w C#, można skonfigurować aplikację konsolową w Visual Studio, zainstalować pakiety FluentValidation i IronPDF poprzez NuGet oraz zdefiniować logikę walidacji modelu przy użyciu Fluent Validation podczas generowania PDF za pomocą IronPDF.

Jakie kroki są wymagane do skonfigurowania projektu dla generowania i walidacji PDF?

Aby skonfigurować projekt, utwórz nową aplikację konsolową w Visual Studio, zainstaluj pakiety IronPDF i FluentValidation przez NuGet, a następnie zdefiniuj treść PDF i reguły walidacji, używając odpowiednich bibliotek.

Jak mogę wygenerować PDF z treści HTML przy użyciu biblioteki .NET?

Możesz wygenerować PDF z treści HTML, używając metody RenderHtmlAsPdf z IronPDF, która pozwala na konwersję ciągów HTML lub plików do wysokiej jakości PDF.

Jaki jest cel klasy PdfService w tym samouczku?

Klasa PdfService w tym samouczku jest zaprojektowana do zarządzania generowaniem PDF poprzez najpierw walidację treści za pomocą Fluent Validation. Po pomyślnej walidacji używa metod ChromePdfRenderer i RenderHtmlAsPdf z IronPDF do stworzenia PDF.

Jak są definiowane reguły walidacji przy użyciu Fluent Validation?

Zasady walidacji w Fluent Validation są definiowane przez utworzenie klasy walidatora dziedziczącej po AbstractValidator. W tej klasie metoda RuleFor jest używana do określania warunków dla każdej właściwości, co pozwala na dostosowanie komunikatów o błędach i łączenie reguł.

Co się stanie, jeśli walidacja nie powiedzie się podczas generowania PDF?

Jeśli walidacja się nie powiedzie, Fluent Validation rzuca ValidationException, która zawiera szczegółowe informacje o błędach walidacji, co może być użyte do poinformowania użytkownika, co poszło nie tak.

Czy mogę używać Fluent Validation do walidacji złożonych obiektów?

Tak, Fluent Validation wspiera walidację złożonych obiektów poprzez wykorzystanie walidatorów podrzędnych, umożliwiając walidację zagnieżdżonych właściwości i kolekcji w twoim modelu.

Jak mogę dostosować komunikaty o błędach w Fluent Validation?

Dostosowane komunikaty o błędach w Fluent Validation można zdefiniować przy użyciu metody WithMessage dla każdej reguły walidacji określonej z RuleFor.

Czy jest dostępna wersja próbna dla biblioteki do generowania PDF?

Tak, IronPDF oferuje bezpłatną wersję próbną dla programistów do testowania możliwości biblioteki, z opcjami licencyjnymi zaczynającymi się od 499 USD za dewelopera.

Czy IronPDF jest w pełni kompatybilny z .NET 10?

Tak. IronPDF jest w pełni kompatybilny z .NET 10 i wspiera platformy, w tym Windows, Linux, macOS w różnych typach projektów (konsola, web, desktop, Blazor itp.). Działa bezpośrednio z najnowszym runtime bez potrzeby obejść.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie