Jak generować pliki HTML do PDF za pomocą .NET na platformie Azure

Jak używać języka C# do konwersji HTML na PDF za pomocą IronPDF w usłudze Azure Function

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF generuje, przetwarza i odczytuje dokumenty PDF na platformach Azure, w tym na stronach internetowych MVC i w Azure Functions. W niniejszym przewodniku pokazano, jak zaimplementować konwersję HTML na PDF w Azure Functions z odpowiednią konfiguracją i optymalizacją dla środowisk produkcyjnych.

Jeśli korzystasz z Azure Functions w kontenerze Docker, zapoznaj się z tym samouczkiem dotyczącym Azure Docker Linux.

Szybki start: Konwersja HTML do PDF za pomocą IronPDF na platformie Azure

Zacznij konwertować HTML na PDF w swoich aplikacjach Azure za pomocą IronPDF. Ten krótki przewodnik pokazuje, jak renderować adres URL jako dokument PDF przy użyciu metod API IronPDF. Ten przykład pokazuje, jak łatwo można zintegrować funkcje PDF z rozwiązaniami Azure dzięki IronPDF. Postępuj zgodnie z przykładem, aby rozpocząć generowanie plików PDF bez utraty formatowania i szybko uruchomić swój projekt w Azure.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    var pdf = new IronPdf.ChromePdfRenderer()
        .RenderHtmlAsPdf("<h1>Hello Azure!</h1>")
        .SaveAs("output-azure.pdf");
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer

Poradnik "Jak to zrobić"

Jak skonfigurować projekt?

Który pakiet IronPDF powinienem zainstalować?

Pierwszym krokiem jest zainstalowanie IronPDF za pomocą NuGet:

Install-Package IronPdf

Alternatywnie można ręcznie zainstalować plik .dll, korzystając z linku do bezpośredniego pobrania pakietu IronPDF dla platformy Azure.

Aby uzyskać informacje na temat bardziej zaawansowanych opcji instalacji, zapoznaj się z naszym obszernym przewodnikiem po pakietach NuGet.

Jakie opcje platformy Azure muszę skonfigurować?

Który poziom hostingu Azure powinienem wybrać?

Azure Basic B1 to minimalny poziom hostingu wymagany do renderowania. Jeśli tworzysz system o dużej przepustowości, może wymagać aktualizacji. Poziom B1 zapewnia wystarczające zasoby dla silnika renderowania PDF w przeglądarce Chrome, który obsługuje konwersję HTML do PDF w IronPDF.

OstrzeżenieNieprawidłowy wybór typu planu usługi aplikacji może spowodować, że IronPdf nie będzie w stanie renderować dokumentów PDF.

Formularz tworzenia aplikacji Azure Function App z opcją planu usługi aplikacji zaznaczoną w menu rozwijanym

Dlaczego warto odznaczyć opcję "Uruchom z pliku pakietu"?

Podczas publikacji aplikacji Azure Functions upewnij się, że Run from package file NIE jest zaznaczone. Ta opcja tworzy wdrożenie tylko do odczytu, które uniemożliwia IronPDF pobieranie niezbędnych zależności środowiska uruchomieniowego podczas wykonywania.

Okno dialogowe publikowania funkcji Azure Functions z niezaznaczoną opcją

Jak skonfigurować .NET 6?

Microsoft niedawno usunął biblioteki obrazowania z .NET 6+, co spowodowało problemy z wieloma starszymi interfejsami API. W związku z tym konieczne jest skonfigurowanie projektu, aby nadal umożliwiał te wywołania interfejsu API.

  1. Na Linux, ustaw Installation.LinuxAndDockerDependenciesAutoConfig=true;, aby zapewnić, że libgdiplus jest zainstalowany na maszynie
  2. Dodaj następujące elementy do pliku .csproj swojego projektu .NET 6:
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    XML
  3. Utwórz plik w swoim projekcie o nazwie runtimeconfig.template.json i wypełnij go następującymi danymi:

    {
      "configProperties": {
        "System.Drawing.EnableUnixSupport": true
      }
    }
  4. Na koniec dodaj następujący wiersz na początku programu, aby włączyć obsługę systemu Unix dla klasy System.Drawing:
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
    System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", True)
    $vbLabelText   $csharpLabel

Kiedy należy używać Docker na platformie Azure?

Jednym ze sposobów na uzyskanie kontroli, dostępu do czcionek SVG oraz możliwości sterowania wydajnością w Azure jest użycie aplikacji i funkcji IronPDF z poziomu kontenerów Docker. Takie podejście zapewnia lepszą kontrolę nad środowiskiem uruchomieniowym i eliminuje wiele ograniczeń związanych z konkretną platformą.

Mamy obszerny samouczek dotyczący IronPDF Azure Docker dla instancji Linux i Windows, który warto przeczytać.

Jak wygląda kod funkcji Azure?

Ten przykład automatycznie wyprowadza wpisy dziennika do wbudowanego dziennika Azure (zobacz ILogger log). Szczegółowe informacje na temat konfiguracji rejestrowania można znaleźć w naszym przewodniku po rejestrowaniu niestandardowym.

[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");

    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Configure logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;
    IronPdf.Logging.Logger.EnableDebugging = false;

    // Configure IronPdf settings
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

    try
    {
        log.LogInformation("About to render pdf...");

        // Create a renderer and render the URL as PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");

        log.LogInformation("Finished rendering pdf...");

        // Return the rendered PDF as a file download
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf");
    }

    return new OkObjectResult("OK");
}
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");

    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";

    // Configure logging
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;
    IronPdf.Logging.Logger.EnableDebugging = false;

    // Configure IronPdf settings
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;

    try
    {
        log.LogInformation("About to render pdf...");

        // Create a renderer and render the URL as PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");

        log.LogInformation("Finished rendering pdf...");

        // Return the rendered PDF as a file download
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf");
    }

    return new OkObjectResult("OK");
}
<FunctionName("PrintPdf")>
Public Shared Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route := Nothing)> ByVal req As HttpRequest, ByVal log As ILogger, ByVal context As ExecutionContext) As Task(Of IActionResult)
	log.LogInformation("Entered PrintPdf API function...")

	' Apply license key
	IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"

	' Configure logging
	IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
	IronPdf.Logging.Logger.CustomLogger = log
	IronPdf.Logging.Logger.EnableDebugging = False

	' Configure IronPdf settings
	Installation.LinuxAndDockerDependenciesAutoConfig = False
	Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled

	Try
		log.LogInformation("About to render pdf...")

		' Create a renderer and render the URL as PDF
		Dim renderer As New ChromePdfRenderer()
		Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")

		log.LogInformation("Finished rendering pdf...")

		' Return the rendered PDF as a file download
		Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
	Catch e As Exception
		log.LogError(e, "Error while rendering pdf")
	End Try

	Return New OkObjectResult("OK")
End Function
$vbLabelText   $csharpLabel

Przykład zaawansowanego renderowania ciągów znaków HTML

W przypadku bardziej złożonych scenariuszy z niestandardowym kodem HTML i stylami CSS można skorzystać z funkcji konwersji ciągu znaków HTML do formatu PDF:

[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("Processing HTML to PDF request");

    // Read HTML content from request body
    string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();

    // Configure renderer with custom options
    var renderer = new ChromePdfRenderer()
    {
        RenderingOptions = new ChromePdfRenderOptions()
        {
            MarginTop = 20,
            MarginBottom = 20,
            MarginLeft = 10,
            MarginRight = 10,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        }
    };

    try
    {
        // Add custom CSS
        string styledHtml = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; padding: 20px; }}
                    h1 {{ color: #2c3e50; }}
                    .highlight {{ background-color: #f1c40f; padding: 5px; }}
                </style>
            </head>
            <body>
                {htmlContent}
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(styledHtml);

        return new FileContentResult(pdf.BinaryData, "application/pdf") 
        { 
            FileDownloadName = "styled-document.pdf" 
        };
    }
    catch (Exception ex)
    {
        log.LogError(ex, "Failed to render HTML to PDF");
        return new BadRequestObjectResult("Error processing HTML content");
    }
}
[FunctionName("RenderHtmlWithCss")]
public static async Task<IActionResult> RenderHtmlWithCss(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("Processing HTML to PDF request");

    // Read HTML content from request body
    string htmlContent = await new StreamReader(req.Body).ReadToEndAsync();

    // Configure renderer with custom options
    var renderer = new ChromePdfRenderer()
    {
        RenderingOptions = new ChromePdfRenderOptions()
        {
            MarginTop = 20,
            MarginBottom = 20,
            MarginLeft = 10,
            MarginRight = 10,
            CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
            PrintHtmlBackgrounds = true,
            CreatePdfFormsFromHtml = true
        }
    };

    try
    {
        // Add custom CSS
        string styledHtml = $@"
            <html>
            <head>
                <style>
                    body {{ font-family: Arial, sans-serif; padding: 20px; }}
                    h1 {{ color: #2c3e50; }}
                    .highlight {{ background-color: #f1c40f; padding: 5px; }}
                </style>
            </head>
            <body>
                {htmlContent}
            </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(styledHtml);

        return new FileContentResult(pdf.BinaryData, "application/pdf") 
        { 
            FileDownloadName = "styled-document.pdf" 
        };
    }
    catch (Exception ex)
    {
        log.LogError(ex, "Failed to render HTML to PDF");
        return new BadRequestObjectResult("Error processing HTML content");
    }
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Azure.WebJobs
Imports Microsoft.Azure.WebJobs.Extensions.Http
Imports Microsoft.AspNetCore.Http
Imports Microsoft.Extensions.Logging
Imports IronPdf

Public Module HtmlToPdfFunction

    <FunctionName("RenderHtmlWithCss")>
    Public Async Function RenderHtmlWithCss(
        <HttpTrigger(AuthorizationLevel.Function, "post", Route:=Nothing)> req As HttpRequest,
        log As ILogger) As Task(Of IActionResult)

        log.LogInformation("Processing HTML to PDF request")

        ' Read HTML content from request body
        Dim htmlContent As String = Await New StreamReader(req.Body).ReadToEndAsync()

        ' Configure renderer with custom options
        Dim renderer As New ChromePdfRenderer() With {
            .RenderingOptions = New ChromePdfRenderOptions() With {
                .MarginTop = 20,
                .MarginBottom = 20,
                .MarginLeft = 10,
                .MarginRight = 10,
                .CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print,
                .PrintHtmlBackgrounds = True,
                .CreatePdfFormsFromHtml = True
            }
        }

        Try
            ' Add custom CSS
            Dim styledHtml As String = $"
                <html>
                <head>
                    <style>
                        body {{ font-family: Arial, sans-serif; padding: 20px; }}
                        h1 {{ color: #2c3e50; }}
                        .highlight {{ background-color: #f1c40f; padding: 5px; }}
                    </style>
                </head>
                <body>
                    {htmlContent}
                </body>
                </html>"

            Dim pdf = renderer.RenderHtmlAsPdf(styledHtml)

            Return New FileContentResult(pdf.BinaryData, "application/pdf") With {
                .FileDownloadName = "styled-document.pdf"
            }
        Catch ex As Exception
            log.LogError(ex, "Failed to render HTML to PDF")
            Return New BadRequestObjectResult("Error processing HTML content")
        End Try
    End Function

End Module
$vbLabelText   $csharpLabel

Aby dowiedzieć się więcej o zarządzaniu licencjami w usłudze Azure Functions, zapoznaj się z dokumentacją Korzystanie z kluczy licencyjnych.

Jakie są znane problemy?

Dlaczego czcionki SVG nie wyświetlają się na planach hostingu współdzielonego?

Jednym z ograniczeń jest to, że platforma hostingowa Azure nie obsługuje serwerów ładujących czcionki SVG, takie jak Google Fonts, w swoich tańszych warstwach współdzielonych aplikacji internetowych. Wynika to z ograniczeń bezpieczeństwa uniemożliwiających dostęp do obiektów graficznych Windows GDI+.

Zalecamy skorzystanie z przewodnika po kontenerach Docker dla systemów Windows lub Linux dla IronPDF lub ewentualnie z serwera VPS w Azure, aby rozwiązać ten problem w sytuacji, gdy wymagane jest najlepsze renderowanie czcionek.

Dlaczego hosting w ramach bezpłatnego pakietu Azure działa wolno?

Darmowe i współdzielone poziomy Azure oraz plan zużycia nie są odpowiednie do renderowania PDF. Zalecamy hosting Azure B1/plan Premium, którego sami używamy. Proces HTML to PDF jest znaczącym 'zadaniem' dla każdego komputera - podobnym do otwierania i renderowania strony internetowej na własnej maszynie. Używany jest prawdziwy silnik przeglądarki, dlatego musimy odpowiednio przygotować zasoby i oczekiwać podobnych czasów renderowania jak na komputerze stacjonarnym o podobnej mocy.

Jak mogę debugować Azure Functions lokalnie?

Dla lokalnego rozwoju i testowania odnieść się do naszego przewodnika Debugowanie projektu Azure Functions na lokalnej maszynie. To pomaga zidentyfikować i rozwiązać problemy przed wdrożeniem na Azure.

Gdzie mogę znaleźć dzienniki Azure?

Podczas rozwiązywania problemów z generowaniem PDF, dzienniki Azure są nieocenione. Sprawdź nasz przewodnik Pliki dziennika Azure dla instrukcji jak uzyskać dostęp do dzienników i je interpretować specyficznych dla operacji IronPDF.

Jak stworzyć zgłoszenie wsparcia inżynieryjnego?

Aby stworzyć zgłoszenie, odnieść się do przewodnika Jak złożyć zgłoszenie wsparcia inżynieryjnego dla IronPDF.

Najlepsze praktyki produkcyjne

  1. Zawsze używaj odpowiednich poziomów hostingu - B1 lub wyższe dla niezawodnej wydajności
  2. Konfiguruj dzienniki poprawnie - Użyj Azure Application Insights do monitorowania produkcji
  3. Obsługuj wyjątki z gracją - Zastosuj logikę ponawiania dla przelotnych błędów
  4. Optymalizuj zawartość HTML - Minimalizuj zewnętrzne zasoby i używaj obrazów zakodowanych w base64, kiedy to możliwe
  5. Testuj dokładnie - Zweryfikuj generowanie PDF lokalnie przed wdrożeniem na Azure
  6. Monitoruj wykorzystanie zasobów - Śledź zużycie pamięci i CPU, aby odpowiednio skalować

Często Zadawane Pytania

Jaki jest minimalny poziom hostingu Azure wymagany do generowania plików PDF?

IronPDF wymaga poziomu Azure Basic B1 jako minimalnego poziomu hostingu dla potrzeb renderowania plików PDF. Poziom B1 zapewnia wystarczające zasoby dla silnika renderowania PDF w przeglądarce Chrome, który obsługuje funkcje konwersji HTML na PDF w IronPDF.

Który pakiet powinienem zainstalować dla funkcji Azure Functions opartych na systemie Windows?

W przypadku funkcji Azure Functions opartych na systemie Windows należy zainstalować pakiet IronPdf z NuGet. Pakiet ten jest zoptymalizowany pod kątem środowisk Windows i zapewnia pełne możliwości generowania plików PDF przy użyciu silnika renderującego Chrome.

Jak przekonwertować HTML na PDF w Azure Functions?

Możesz przekonwertować HTML na PDF za pomocą jednej linii kodu, korzystając z ChromePdfRenderer firmy IronPDF. Wystarczy utworzyć nową instancję i wywołać metodę RenderHtmlAsPdf() z treścią HTML, a następnie zapisać wynikowy plik PDF.

Co się stanie, jeśli nie wybiorę odpowiedniego planu App Service?

Nieprawidłowy wybór typu planu usługi App może spowodować, że IronPDF nie będzie w stanie renderować dokumentów PDF. Prawidłowa konfiguracja środowiska hostingowego Azure jest niezbędna do prawidłowego działania silnika renderującego PDF.

Dlaczego podczas publikacji należy odznaczyć opcję „Uruchom z pliku pakietu”?

Podczas publikowania aplikacji Azure Functions należy odznaczyć opcję „Uruchom z pliku pakietu”, aby zapewnić, że IronPDF ma odpowiedni dostęp do swoich komponentów renderujących i zależności w środowisku Azure oraz może z nich korzystać.

Czy mogę używać funkcji Azure opartych na systemie Linux do generowania plików PDF?

Tak, w przypadku funkcji Azure opartych na systemie Linux należy użyć pakietu IronPdf.Linux z NuGet. Pakiet ten jest specjalnie zoptymalizowany pod kątem środowisk Linux, zapewniając jednocześnie te same możliwości generowania plików PDF.

Co zrobić, jeśli potrzebuję większej przepustowości przy generowaniu plików PDF?

W przypadku systemów o dużej przepustowości może być konieczna aktualizacja do poziomu wyższego niż B1. IronPDF skaluje się wraz z zasobami platformy Azure, umożliwiając obsługę zwiększonego zapotrzebowania na generowanie plików PDF poprzez wybór poziomów o wyższej wydajności.

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
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,135,201 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu? PM > Install-Package IronPdf
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.