Jak używać języka C# do konwersji HTML na PDF za pomocą IronPDF w usłudze Azure Function
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.
-
Install IronPDF with NuGet Package Manager
PM > Install-Package IronPdf -
Skopiuj i uruchom ten fragment kodu.
var pdf = new IronPdf.ChromePdfRenderer() .RenderHtmlAsPdf("<h1>Hello Azure!</h1>") .SaveAs("output-azure.pdf"); -
Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny proces (5 kroków)
- Zainstaluj bibliotekę C# do generowania plików PDF w Azure
- Wybierz poziom hostingu Azure Basic B1 lub wyższy
- Odznaczyć opcję
Uruchom z pliku pakietupodczas publikowania - Postępuj zgodnie z zalecanymi instrukcjami konfiguracji
- Skorzystaj z przykładowego kodu, aby utworzyć generator plików PDF przy użyciu platformy Azure
Poradnik "Jak to zrobić"
Jak skonfigurować projekt?
Który pakiet IronPDF powinienem zainstalować?
Pierwszym krokiem jest zainstalowanie IronPDF za pomocą NuGet:
- Na Windows-based Azure Functions użyj pakietu
IronPdf- NuGet IronPdf package for Windows - Na Linux-based Azure Functions użyj pakietu
IronPdf.Linux- NuGet IronPdf package for Linux
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.
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.
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.
- Na Linux, ustaw
Installation.LinuxAndDockerDependenciesAutoConfig=true;, aby zapewnić, żelibgdiplusjest zainstalowany na maszynie - Dodaj następujące elementy do pliku .csproj swojego projektu .NET 6:
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles><GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>XML -
Utwórz plik w swoim projekcie o nazwie
runtimeconfig.template.jsoni wypełnij go następującymi danymi:{ "configProperties": { "System.Drawing.EnableUnixSupport": true } } - 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
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
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
- Zawsze używaj odpowiednich poziomów hostingu -
B1lub wyższe dla niezawodnej wydajności - Konfiguruj dzienniki poprawnie - Użyj Azure Application Insights do monitorowania produkcji
- Obsługuj wyjątki z gracją - Zastosuj logikę ponawiania dla przelotnych błędów
- Optymalizuj zawartość HTML - Minimalizuj zewnętrzne zasoby i używaj obrazów zakodowanych w base64, kiedy to możliwe
- Testuj dokładnie - Zweryfikuj generowanie PDF lokalnie przed wdrożeniem na Azure
- 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.

