IRONSOFTWAREHOME
KORZYSTANIE Z IRONPDF

Jak przekonwertować JPG na PDF w C# .NET

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

Zbuduj gotowe do produkcji API PDF .NET za pomocą ASP.NET Core i IronPDF, aby scentralizować logikę generowania PDF, umożliwiając spójną tworzenie dokumentów w aplikacjach z użyciem punktów końcowych RESTful do konwersji HTML na PDF, scałania, dodawania znaków wodnych i przetwarzania szablonów dynamicznych.

Pracując z nowoczesnymi aplikacjami, deweloperzy .NET często muszą zbudować scentralizowaną usługę generowania PDF. Niezależnie od tego, czy generujesz faktury, raporty, certyfikaty, czy umowy, posiadanie dedykowanego API PDF .NET poprawia przepływ pracy związany z generowaniem PDF. Jak to pomaga? Zapewnia spójność, łatwość utrzymania i skalowalność w aplikacjach desktopowych i internetowych. Zarządzanie treścią dokumentów, stronami PDF i polami formularzy PDF staje się proste.

W tym samouczku dowiesz się, jak zbudować gotowe do produkcji API PDF za pomocą ASP.NET Core i IronPDF, potężnej biblioteki PDF .NET. Utworzymy punkty końcowe RESTful, które generują PDF z HTML, scałają dokumenty, dodają znaki wodne i obsługują różne scenariusze PDF w twoim Web API.

Dlaczego warto zbudować dedykowane API PDF?

Diagram architektury pokazujący aplikacje klienckie (webowe, desktopowe, mobilne), które wysyłają treści HTML, adresy URL lub dynamiczne dane do warstwy PDF Controller/Service API, która generuje dokumenty PDF.

Zanim zagłębimy się w kod, zastanówmy się, dlaczego tworzenie dedykowanego API PDF ma sens:

  • Scentralizowana logika: Cała logika generowania PDF znajduje się w jednym miejscu, upraszczając utrzymanie i aktualizacje.
  • Architektura mikroserwisów: Idealne dla architektur zorientowanych na usługi, gdzie różne aplikacje potrzebują funkcji PDF.
  • Optymalizacja wydajności: Łatwiej skalować i optymalizować dedykowaną usługę dla dużych PDF, wielu stron i dynamicznych danych używając operacji asynchronicznych i technik wydajności.
  • Neutralność językowa: Każda aplikacja kliencka może używać API niezależnie od języka programowania.
  • Spójny wynik: Zapewnia, że wszystkie PDF w twojej organizacji mają spójny układ, formatowanie i treść.

Czy jesteś gotowy do rozpoczęcia budowy? Pobierz bezpłatną wersję próbną IronPDF i postępuj zgodnie z tym samouczkiem, aby programowo tworzyć pliki PDF w swoich projektach .NET Framework.

Co czyni IronPDF kompletną biblioteką PDF .NET?

Strona główna IronPDF for .NET pokazująca przykłady kodu C# do konwersji HTML na PDF z funkcjami takimi jak renderowanie HTML, zapisywanie plików i polecenie instalacji NuGet

IronPDF wyróżnia się jako wiodąca biblioteka PDF dla deweloperów .NET, oferując kompleksowy zestaw funkcji, które sprawiają, że generowanie PDF w projektach Web API jest proste i niezawodne. Oparta na silniku renderującym Chrome, zapewnia konwersje HTML na PDF z zachowaniem pikseli w kilku liniach kodu, jednocześnie zachowując wszystkie style, wykonania JavaScript i responsywne układy.

Kluczowe możliwości, które czynią IronPDF idealnym wyborem dla rozwoju PDF API .NET:

Jak skonfigurować projekt API dokumentów PDF?

Zacznijmy od stworzenia nowego projektu ASP.NET Core Web API i zainstalowania niezbędnych pakietów.

Jakie są wymagania wstępne?

  • .NET 6.0 SDK lub nowszy
  • Visual Studio 2022 lub Visual Studio Code
  • Postman lub podobne narzędzie do testowania API do testowania twojego API PDF REST

Jak utworzyć projekt?

Najpierw, utwórzmy projekt, w którym zbudujemy nasze narzędzie do generowania PDF.

dotnet new webapi -n PdfApiService
cd PdfApiService
SHELL

Jak zainstalować IronPDF?

Następnie, dodaj IronPDF do swojego projektu za pomocą NuGet:

dotnet add package IronPdf

Lub, używając Konsoli Menedżera Pakietów NuGet w Visual Studio:

PM > Install-Package IronPdf

Dla zaawansowanych opcji instalacji, w tym pakietów specyficznych dla platformy, konfiguracji Dockera lub konfiguracji Linuxa, zobacz dokumentację instalacyjną IronPDF.

Jaką strukturę projektu powinienem zastosować?

Dobra praktyka programowania w C# wymaga utrzymania czystego i dobrze zorganizowanego folderu projektu. Na przykład:

Eksplorator rozwiązań Visual Studio pokazujący strukturę folderów projektu .NET PDF API Service z katalogami Controllers, Models i Services

Jak stworzyć swoje pierwsze odniesienie PDF?

Zbudujmy prosty punkt końcowy, który konwertuje HTML na format PDF. Najpierw stwórzmy interfejs usługi i implementację:

Jak utworzyć serwis PDF?

Najpierw dodaj następujące elementy do pliku IPdfService.cs:

public interface IPdfService
{
    byte[] GeneratePdfFromHtml(string htmlContent);
    byte[] GeneratePdfFromUrl(string url);
}

W pliku PdfService.cs dodaj to:

using IronPdf;
public class PdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;
    public PdfService()
    {
        _renderer = new ChromePdfRenderer();
        // Configure rendering options for optimal PDF generation in .NET
        _renderer.RenderingOptions.MarginTop = 20;
        _renderer.RenderingOptions.MarginBottom = 20;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
    }
    public byte[] GeneratePdfFromHtml(string htmlContent)
    {
        // Generate PDF from HTML using the .NET PDF API
        var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
        return pdf.BinaryData;
    }
    public byte[] GeneratePdfFromUrl(string url)
    {
        // Convert URL to PDF in the REST API
        var pdf = _renderer.RenderUrlAsPdf(url);
        return pdf.BinaryData;
    }
}

PdfService obsługuje konwersję HTML na PDF. Używając ChromePdfRenderer IronPDF, ta klasa konfiguruje domyślne ustawienia takie jak marginesy strony i renderowanie tła dla profesjonalnych wyników. Dla zaawansowanych konfiguracji renderowania, zapoznaj się z opcje renderowania IronPDF.

Kiedy kontroler przekazuje surowe HTML, serwis renderuje to do wysokiej jakości PDF i zwraca dane bajtowe do pobrania. Przekształca również całe strony internetowe bezpośrednio do PDF przy użyciu konwersji URL na PDF.

Jak utworzyć kontroler?

Teraz utwórz kontroler dla swojego API. To zapewnia punkt końcowy, który generuje pliki PDF z HTML i pozwala pobierać i zapisywać dokumenty PDF na swoim systemie.

// Controllers/PdfController.cs
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    private readonly IPdfService _pdfService;
    public PdfController(IPdfService pdfService)
    {
        _pdfService = pdfService;
    }
    [HttpPost("html-to-pdf")]
    public IActionResult ConvertHtmlToPdf([FromBody] HtmlRequest request)
    {
        try
        {
            var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent);
            // Return as downloadable file
            return File(pdfBytes, "application/pdf", "document.pdf");
        }
        catch (Exception ex)
        {
            return BadRequest($"Error generating PDF: {ex.Message}");
        }
    }
}

Następnie w pliku HtmlRequest.cs dodaj to:

// Models/HtmlRequest.cs
public class HtmlRequest
{
    public string HtmlContent { get; set; }
    public string FileName { get; set; } = "document.pdf";
}

To ustawia punkt końcowy API, który konwertuje HTML na PDF do pobrania. Gdy ktoś prześle HTML do api/pdf/html-to-pdf, PdfController deleguje konwersję na usługę.

Po utworzeniu kontroler zwraca PDF jako plik do pobrania. Żądanie używa modelu HtmlRequest, który zawiera HTML i opcjonalnie nazwę pliku. To ułatwia klientom przesyłanie HTML i odbieranie dopracowanego PDF.

Jak zarejestrować serwisy?

Zaktualizuj swój Program.cs, aby zarejestrować usługę PDF:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// Register PDF service
builder.Services.AddSingleton<IPdfService, PdfService>();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapControllers();
app.Run();

Jak obsłużyć różne typy odpowiedzi?

Twoje API powinno obsługiwać różne sposoby zwracania PDF w zależności od potrzeb klienta:

[HttpPost("generate")]
public IActionResult GeneratePdf([FromBody] PdfRequest request)
{
    var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent);
    switch (request.ResponseType?.ToLower())
    {
        case "base64":
            return Ok(new
            {
                data = Convert.ToBase64String(pdfBytes),
                filename = request.FileName
            });
        case "inline":
            return File(pdfBytes, "application/pdf");
        default: // download
            return File(pdfBytes, "application/pdf", request.FileName);
    }
}

To dodaje elastyczny punkt końcowy generowania PDF. Zamiast wymuszać pobieranie, metoda GeneratePdf pozwala klientom wybrać, jak chcą otrzymać wyniki: jako pobranie, w linii w przeglądarce lub zakodowane w Base64 do użytku API.

Model PdfRequest rozszerza HtmlRequest o opcję ResponseType. To daje użytkownikom kontrolę nad dostarczaniem PDF, czyniąc API bardziej wszechstronnym. Dla obsługi PDF w pamięci bez dostępu do systemu plików, zobacz dokumentację strumieni pamięci IronPDF.

Kiedy uruchomimy nasz program, zobaczymy ten wynik na Swagger:

Dokumentacja Swagger UI pokazująca punkty końcowe PdfApiService z trzema metodami POST do operacji PDF: html-to-pdf, generate i url-to-pdf, wraz ze schematami żądań.

Jak zaimplementować powszechne operacje PDF?

Rozszerzmy naszą usługę o obsługę różnych scenariuszy generowania PDF:

Jak przetworzyć URL na PDF?

[HttpPost("url-to-pdf")]
public async Task<IActionResult> ConvertUrlToPdf([FromBody] UrlRequest request)
{
    try
    {
        var pdfBytes = await Task.Run(() =>
            _pdfService.GeneratePdfFromUrl(request.Url));
        return File(pdfBytes, "application/pdf",
            $"{request.FileName ?? "website"}.pdf");
    }
    catch (Exception ex)
    {
        return BadRequest($"Failed to convert URL: {ex.Message}");
    }
}
public class UrlRequest
{
    public string Url { get; set; }
    public string FileName { get; set; }
}

Ten punkt końcowy konwertuje URL na PDF do pobrania. Gdy żądanie POST trafi na /api/pdf/url-to-pdf, kontroler używa _pdfService do konwersji URL na bajty PDF w tle, a następnie zwraca je do pobrania. Jeśli konwersja się nie powiedzie, odpowiada jasnym komunikatem o błędzie. Dla stron internetowych z autentykacją, zapoznaj się z dokumentacją logowania IronPDF.

Spróbujmy użyć URL "https://www.apple.com/nz" i przetestujmy żądanie POST. Poniżej znajduje się uzyskany wynik:

Jak wygląda wynik?

Strona główna witryny Apple Nowa Zelandia pokazująca różne sekcje produktów, w tym iPhone 16, MacBook Air, Apple Watch i AirPods z przyciskami 'Dowiedz się więcej' i 'Kup' - demonstrujące konwersję URL na PDF

Jak dodać własne znaki wodne?

public byte[] AddWatermarkFromFile(string filePath, string watermarkText)
{
    // Load PDF directly from file
    var pdf = PdfDocument.FromFile(filePath);
    pdf.ApplyWatermark(
        $"<h1 style='color:red;font-size:72px;'>{watermarkText}</h1>",
        75,
        IronPdf.Editing.VerticalAlignment.Middle,
        IronPdf.Editing.HorizontalAlignment.Center
    );
    return pdf.BinaryData;
}

To ręcznie ładuje lokalny plik do testowania. Możesz dostosować to tak, aby twoje API PDF generowało PDF, a następnie łatwo dodawało własne znaki wodne. Dla zaawansowanych opcji dodawania znaków wodnych, w tym znaków wodnych w formie obrazów i niestandardowego pozycjonowania, zobacz przewodnik dodawania znaków wodnych.

Jak wygląda wynik z dodanym znakiem wodnym?

Bezpieczny dokument z oznaczeniem 'CONFIDENTIAL' w rogu ukośnie przez pustą stronę, z identyfikatorem dokumentu: BA811648DCE1FF2AAA55E7CE umieszczonym na górze

Jak dodać dynamiczne dane za pomocą szablonów?

W przypadku aplikacji rzeczywistego świata, często będziesz musiał generować PDF-y ze szablonów z dynamicznymi danymi:

[HttpPost("from-template")]
public IActionResult GenerateFromTemplate([FromBody] TemplateRequest request)
{
    // Simple template replacement
    var html = request.Template;
    foreach (var item in request.Data)
    {
        html = html.Replace($"{{{{{item.Key}}}}}", item.Value);
    }
    var pdfBytes = _pdfService.GeneratePdfFromHtml(html);
    return File(pdfBytes, "application/pdf", request.FileName);
}
public class TemplateRequest
{
    public string Template { get; set; }
    public Dictionary<string, string> Data { get; set; }
    public string FileName { get; set; } = "document.pdf";
}

Dla zaawansowanych scenariuszy szablonów z użyciem Razor, Handlebars lub innych silników, zobacz dokumentację HTML na PDF IronPDF. Możesz również zbadać konwersję CSHTML do PDF dla aplikacji MVC i Razor do PDF dla aplikacji Blazor. Dla renderowania Razor w trybie bezgłowym, zapoznaj się z przewodnikiem CSHTML dla renderowania bezgłowego.

Jak zoptymalizować wydajność?

Podczas tworzenia API PDF do produkcji, wydajność jest kluczowa. Oto kluczowe strategie optymalizacji:

Dlaczego używać operacji asynchronicznych?

Używaj kodowania asynchronicznego, gdy projekty obejmują operacje I/O. To jest szczególnie pomocne, gdy zawartość PDF pochodzi z zewnętrznych źródeł, takich jak:

  • Pobieranie stron HTML (RenderUrlAsPdf)

Pobieranie obrazów, CSS lub fontów przez HTTP⟩

Odczyt/zapis plików na dysk lub do chmurowej przechowalni⟩

Te operacje mogą blokować wątki, ale async zapobiega oczekiwaniu wątków API na bezczynnie. Dla pełnych wzorców generacji PDF async, zobacz przewodnik generacji PDF async.

Przykład:

public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent)
{
    return await Task.Run(() =>
    {
        var pdf = _renderer.RenderHtmlAsPdf(htmlContent);
        return pdf.BinaryData;
    });
}

Dla scenariuszy równoległej generacji PDF, eksploruj wielowątkowe i równoległe przetwarzanie technik.

Jakie opcje renderowania należy skonfigurować?

Skonfiguruj IronPDF dla optymalnej wydajności:

_renderer.RenderingOptions.EnableJavaScript = false; // If JS not needed
_renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
_renderer.RenderingOptions.RenderDelay = 0; // Remove if no JS
_renderer.RenderingOptions.Timeout = 30; // Set reasonable timeout

Dla pełnych opcji konfiguracji renderowania, w tym ustawień widoku, niestandardowych rozmiarów papieru i orientacji stron, zobacz dokumentację opcji renderowania.

Jak zabezpieczyć swoje API PDF?

Bezpieczeństwo jest kluczowe dla każdego API produkcyjnego. Oto proste podejście do uwierzytelniania za pomocą klucza API:

// Middleware/ApiKeyMiddleware.cs
public class ApiKeyMiddleware
{
    private readonly RequestDelegate _next;
    private const string ApiKeyHeader = "X-API-Key";
    public ApiKeyMiddleware(RequestDelegate next)
    {
        _next = next;
    }
    public async Task InvokeAsync(HttpContext context)
    {
        if (!context.Request.Headers.TryGetValue(ApiKeyHeader, out var apiKey))
        {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsync("API Key required");
            return;
        }
        // Validate API key (in production, check against database)
        var validApiKey = context.RequestServices
            .GetRequiredService<IConfiguration>()["ApiKey"];
        if (apiKey != validApiKey)
        {
            context.Response.StatusCode = 403;
            await context.Response.WriteAsync("Invalid API Key");
            return;
        }
        await _next(context);
    }
}
// In Program.cs
app.UseMiddleware<ApiKeyMiddleware>();

Dla zaawansowanych scenariuszy uwierzytelniania, rozważ:

Dla zabezpieczeń specyficznych dla PDF, wdroż ochronę hasłem, podpisy cyfrowe i sanitację PDF, aby usunąć potencjalnie złośliwe treści.

Jak zbudować API generowania faktur w rzeczywistości?

Zbudujmy praktyczny punkt końcowy generowania faktur, demonstrujący pełną implementację. Ten przykład pokazuje, jak produkcyjne API PDF .NET generuje profesjonalne faktury z dynamicznymi danymi.

Pierwszy krok:
arrow pointer

Najpierw utwórz nowy plik w katalogu Models. Tutaj nazwałem go Invoice.cs. Następnie dodaj następujący kod:

public class Invoice
{
    public string InvoiceNumber { get; set; }
    public DateTime Date { get; set; }
    public string CustomerName { get; set; }
    public string CustomerAddress { get; set; }
    public List<InvoiceItem> Items { get; set; }
    public decimal Tax { get; set; }
}
public class InvoiceItem
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal UnitPrice { get; set; }
    public decimal Total => Quantity * UnitPrice;
}

Następnie utwórz nowy plik serwisowy dla generatora faktur. W folderze Services dodaj poniższy kod. Utworzyłem plik o nazwie InvoiceService.cs. Ten kod obsługuje stylizację i układ twojej faktury PDF:

public class InvoiceService
{
    private readonly ChromePdfRenderer _renderer;
    public InvoiceService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.MarginTop = 10;
        _renderer.RenderingOptions.MarginBottom = 10;
        _renderer.RenderingOptions.PrintHtmlBackgrounds = true;
    }
    public byte[] GenerateInvoice(Invoice invoice)
    {
        var html = BuildInvoiceHtml(invoice);
        // Add footer with page numbers
        _renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
        {
            MaxHeight = 15,
            HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
            DrawDividerLine = true
        };
        var pdf = _renderer.RenderHtmlAsPdf(html);
        return pdf.BinaryData;
    }
    private string BuildInvoiceHtml(Invoice invoice)
    {
        var subtotal = invoice.Items.Sum(i => i.Total);
        var taxAmount = subtotal * (invoice.Tax / 100);
        var total = subtotal + taxAmount;
        var itemsHtml = string.Join("", invoice.Items.Select(item =>
            $@"<tr>
                <td>{item.Description}</td>
                <td class='text-center'>{item.Quantity}</td>
                <td class='text-right'>${item.UnitPrice:F2}</td>
                <td class='text-right'>${item.Total:F2}</td>
            </tr>"));
        return $@"
        <!DOCTYPE html>
        <html>
        <head>
            <style>
                body {{font-family: Arial, sans-serif;}}
                .invoice-header {{background-color: #f8f9fa;
                    padding: 20px;
                    margin-bottom: 20px;}}
                table {{width: 100%;
                    border-collapse: collapse;}}
                th, td {{padding: 10px;
                    border-bottom: 1px solid #ddd;}}
                th {{background-color: #007bff;
                    color: white;}}
                .text-right {{text-align: right;}}
                .text-center {{text-align: center;}}
                .total-section {{margin-top: 20px;
                    text-align: right;}}
            </style>
        </head>
        <body>
            <div class='invoice-header'>
                <h1>Invoice #{invoice.InvoiceNumber}</h1>
                <p>Date: {invoice.Date:yyyy-MM-dd}</p>
            </div>
            <div>
                <h3>Bill To:</h3>
                <p>{invoice.CustomerName}<br/>{invoice.CustomerAddress}</p>
            </div>
            <table>
                <thead>
                    <tr>
                        <th>Description</th>
                        <th>Quantity</th>
                        <th>Unit Price</th>
                        <th>Total</th>
                    </tr>
                </thead>
                <tbody>
                    {itemsHtml}
                </tbody>
            </table>
            <div class='total-section'>
                <p>Subtotal: ${subtotal:F2}</p>
                <p>Tax ({invoice.Tax}%): ${taxAmount:F2}</p>
                <h3>Total: ${total:F2}</h3>
            </div>
        </body>
        </html>";
    }
}
C#

Na koniec utwórz nowy kontroler, aby uzyskać dostęp i tworzyć faktury za pomocą API:

[ApiController]
[Route("api/[controller]")]
public class InvoiceController : ControllerBase
{
    private readonly InvoiceService _invoiceService;
    public InvoiceController(InvoiceService invoiceService)
    {
        _invoiceService = invoiceService;
    }
    [HttpPost("generate")]
    public IActionResult GenerateInvoice([FromBody] Invoice invoice)
    {
        try
        {
            var pdfBytes = _invoiceService.GenerateInvoice(invoice);
            var fileName = $"Invoice_{invoice.InvoiceNumber}.pdf";
            return File(pdfBytes, "application/pdf", fileName);
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"Error generating invoice: {ex.Message}");
        }
    }
}

Dla zaawansowanych funkcji faktur, rozważ dodanie kodów kreskowych, kodów QR, numerów stron i niestandardowych nagłówków/stopki. Możesz również wdrożyć zgodność z PDF/A do długoterminowego archiwizowania lub zintegrować z przepływami pracy z podpisami elektronicznymi.

Jak wygląda wynik generowania faktur?

PDF invoice document showing Invoice #INV-1023 dated 2025-08-22, with a single line item for 'Misc Object' totaling $495.00 including tax

Jakie są kwestie wdrożeniowe dotyczące kontenerów?

Chociaż ten samouczek koncentruje się na lokalnym rozwoju, oto krótki przegląd konteneryzacji Twojego API PDF:

Jak utworzyć podstawowy plik Dockerfile?

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["PdfApiService.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet build -c Release -o /app/build
FROM build AS publish
RUN dotnet publish -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# IronPDF requires additional dependencies on Linux
RUN apt-get update && apt-get install -y \
    libgdiplus \
    libc6-dev \
    libx11-dev \
    && rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["dotnet", "PdfApiService.dll"]
Text

Dla szczegółowych przewodników wdrożeniowych Twojego API PDF .NET, zobacz:

Jakie są najlepsze praktyki obsługi błędów?

Dla programów odporne na błędy, zaimplementuj globalny obsługiwacz błędów dla spójnych odpowiedzi błędów:

// Middleware/ErrorHandlingMiddleware.cs
public class ErrorHandlingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<ErrorHandlingMiddleware> _logger;
    public ErrorHandlingMiddleware(RequestDelegate next, ILogger<ErrorHandlingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }
    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "An error occurred processing request {Path}", context.Request.Path);
            await HandleExceptionAsync(context, ex);
        }
    }
    private static async Task HandleExceptionAsync(HttpContext context, Exception ex)
    {
        context.Response.ContentType = "application/json";
        context.Response.StatusCode = ex switch
        {
            ArgumentNullException => 400,
            UnauthorizedAccessException => 401,
            _ => 500
        };
        var response = new
        {
            error = "An error occurred processing your request",
            message = ex.Message,
            statusCode = context.Response.StatusCode
        };
        await context.Response.WriteAsync(JsonSerializer.Serialize(response));
    }
}

Dla specyficznych scenariuszy rozwiązywania problemów z IronPDF, zapoznaj się z:

Gotowy na zbudowanie swojego gotowego do produkcji API PDF .NET?

Zbudowałeś teraz solidne API PDF .NET używając ASP.NET Core i IronPDF, które obsługuje różne scenariusze generowania dokumentów. To REST API zapewnia solidną podstawę do scentralizowanych operacji PDF w Twoich aplikacjach.

Najważniejsze wnioski:

  • IronPDF sprawia, że generowanie PDF w projektach Web API jest proste dzięki renderowaniu opartemu na Chrome.
  • Łatwo edytuj istniejące PDF za pomocą zaawansowanych narzędzi edycyjnych IronPDF.
  • Zasady projektowania RESTful zapewniają, że twoje API PDF jest intuicyjne i łatwe w utrzymaniu.
  • Poprawna obsługa błędów i środki bezpieczeństwa są niezbędne do produkcji.
  • Optymalizacja wydajności poprzez operacje asynchroniczne i buforowanie poprawia skalowalność.
  • Pełna obsługa aplikacji desktopowych i internetowych z skalowalnymi rozwiązaniami dokumentówymi.

IronPDF pozwala deweloperom tworzyć PDF, zapisywać pliki PDF i efektywnie konwertować HTML, czyniąc go niezbędnym API PDF dla nowoczesnych aplikacji .NET Framework.

Jakie są kolejne kroki?

Gotowy do wdrożenia IronPDF w swoim produkcyjnym .NET PDF API? Oto Twoje następne kroki:

  1. Rozpocznij darmowy okres próbny - Przetestuj IronPDF z pełną funkcjonalnością w swoim środowisku deweloperskim.
  2. Poznawaj zaawansowane funkcje - Odkryj podpisy cyfrowe, formularze PDF, zgodność z PDF/A, zarządzanie metadanymi i inne zaawansowane funkcje PDF.
  3. Skaluj z pewnością - Zapoznaj się z opcje licencjonowania dla swoich potrzeb API produkcyjnego, w tym rozszerzenia i ulepszenia.

Zbuduj swoje .NET PDF API już dziś i usprawnij generowanie dokumentów w całym ekosystemie aplikacji dzięki IronPDF!

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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta