So führen Sie IronPDF .NET auf einer Azure-Funktion aus und implementieren es
Ja. IronPDF kann verwendet werden, um PDF-Dokumente auf Azure zu erzeugen, zu bearbeiten und zu lesen. IronPDF wurde gründlich auf mehreren Azure-Plattformen getestet, darunter MVC-Websites, Azure Functions und viele mehr.
PDF-Generator in Azure-Funktion erstellen
- C#-Bibliothek zum Erzeugen von PDFs in Azure installieren
- Wählen Sie die Hosting-Stufe Azure Basic B1 oder höher
- Deaktivieren Sie das Kontrollkästchen
Ausführen aus der Paketdatei
option bei der Veröffentlichung - Befolgen Sie die empfohlenen Konfigurationsanweisungen
- Verwenden Sie das Codebeispiel, um mit Azure einen PDF-Generator zu erstellen
Anleitung zum Tutorial
Installieren Sie das IronPdf-Paket
Azure Function Apps haben drei unterschiedliche Umgebungen: Linux, Windows und Container. Dieser Artikel erklärt, wie IronPdf in allen drei Umgebungen eingerichtet wird. Unter diesen wird die Azure Function App Container empfohlen, da sie eine isolierte Umgebung bietet. Um zu beginnen, wählen wir das passende Paket zur Installation aus.
Azure Function App-Container
Azure Function App Container erfordert minimalen Aufwand und ist die empfohlene Methode, um IronPdf bereitzustellen.
- IronPdf.Linux paket
Install-Package IronPdf.Linux
Docker-Datei konfigurieren
Konfigurieren Sie die Docker-Datei basierend auf der von Ihnen verwendeten Linux-Distribution. Bitte beachten Siedieser Artikelfür detaillierte Anweisungen.
Azure Function App (Windows)
Um den Standard zu verwendenIronPDFPaket, stellen Sie sicher, dass die Option Aus Paketdatei ausführen nicht ausgewählt ist. Das Aktivieren dieser Option stellt das Projekt als ZIP-Datei bereit, was die Dateikonfiguration von IronPdf beeinträchtigt. Wenn Sie die Option Aus Paketdatei ausführen aktivieren möchten, installieren Sie dieIronPdf.SlimPaket stattdessen.
- IronPDF paket
Install-Package IronPdf
Azure Function App(Linux)
Für Azure Function App(Linux), das Projekt wird standardmäßig als ZIP-Datei bereitgestellt, und dieses Verhalten kann nicht deaktiviert werden. Dies ist ähnlich der Aktivierung der Option Von Paketdatei ausführen in der Azure Function App.(Windows).
- IronPdf.Slim paket
Install-Package IronPdf.Slim
Richtige Azure-Optionen auswählen
Die richtige Hosting-Stufe wählen
Azure Basic B1 ist die Mindest-Hosting-Ebene, die für die Rendering-Anforderungen unserer Endnutzer erforderlich ist. Wenn Sie ein System mit hohem Durchsatz aufbauen, muss dieses möglicherweise aufgerüstet werden.
Bevor Sie fortfahren
Konfiguration für .NET 6
Microsoft hat kürzlich die Imaging-Bibliotheken aus .NET 6+ entfernt, wodurch viele Legacy-APIs zerstört wurden. Daher ist es notwendig, Ihr Projekt so zu konfigurieren, dass diese Legacy-API-Aufrufe weiterhin möglich sind.
Unter Linux setzen Sie
Installation.LinuxAndDockerDependenciesAutoConfig=true;
um sicherzustellen, dasslibgdiplus
auf dem Rechner installiert istFügen Sie der .csproj-Datei für Ihr .NET 6-Projekt Folgendes hinzu:
<GenerateRuntimeConfigurationFiles>wahr</GenerateRuntimeConfigurationFiles>
- Erstellen Sie in Ihrem Projekt eine Datei mit dem Namen
runtimeconfig.template.json
und füllen Sie sie mit folgendem Inhalt:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
- Zum Schluss fügen Sie die folgende Zeile am Anfang Ihres Programms ein:
System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);
Azure Funktionscode Beispiel
Dieses Beispiel gibt automatisch Protokolleinträge an den integrierten Azure-Logger aus(siehe ILogger log
).
[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";
// Enable log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
// Configure IronPdf
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.Installation.AutomaticallyDownloadNativeBinaries = true;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
IronPdf.Installation.CustomDeploymentDirectory = "/tmp";
try
{
log.LogInformation("About to render pdf...");
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render PDF
var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
log.LogInformation("finished rendering pdf...");
return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
}
catch (Exception e)
{
log.LogError(e, "Error while rendering pdf", e);
return new OkObjectResult($"Error while rendering pdf: {e}");
}
}
[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";
// Enable log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
IronPdf.Logging.Logger.CustomLogger = log;
// Configure IronPdf
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.Installation.AutomaticallyDownloadNativeBinaries = true;
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
IronPdf.Installation.CustomDeploymentDirectory = "/tmp";
try
{
log.LogInformation("About to render pdf...");
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render PDF
var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
log.LogInformation("finished rendering pdf...");
return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
}
catch (Exception e)
{
log.LogError(e, "Error while rendering pdf", e);
return new OkObjectResult($"Error while rendering pdf: {e}");
}
}
<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"
' Enable log
IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
IronPdf.Logging.Logger.CustomLogger = log
' Configure IronPdf
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
IronPdf.Installation.AutomaticallyDownloadNativeBinaries = True
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
IronPdf.Installation.CustomDeploymentDirectory = "/tmp"
Try
log.LogInformation("About to render pdf...")
Dim renderer As New ChromePdfRenderer()
' Render PDF
Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")
log.LogInformation("finished rendering pdf...")
Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
Catch e As Exception
log.LogError(e, "Error while rendering pdf", e)
Return New OkObjectResult($"Error while rendering pdf: {e}")
End Try
End Function
Das Erstellen eines Projekts mit der Azure Function-Vorlage in Visual Studio kann zu leicht abweichendem Code führen. Aufgrund dieser Unterschiede kann es sein, dass ein Projekt funktioniert, während ein anderes nicht, selbst wenn dasselbe Paket installiert ist. Wenn dies auftritt, setzen Sie bitte die CustomDeploymentDirectory-Eigenschaft auf "/tmp".
Jede Installationskonfiguration verstehen
- LinuxAndDockerDependenciesAutoConfig: Diese Einstellung überprüft und versucht, alle notwendigen Abhängigkeiten für die Chrome-Engine herunterzuladen. Sie wird benötigt, wenn nicht-GUI-Systeme wie Linux verwendet werden. In Containersystemen werden die Abhängigkeiten normalerweise in der Dockerfile aufgeführt; daher können Sie dies auf false setzen.
- AutomaticallyDownloadNativeBinaries: Diese Option lädt das native Chrome-Binary zur Laufzeit herunter. Es ist erforderlich, wenn das IronPdf.Slim-Paket verwendet wird.
- CustomDeploymentDirectory: Diese Einstellung ist erforderlich für Systeme mit eingeschränktem Schreibzugriff.
Bekannte Probleme
Das Rendern von SVG-Schriften ist bei Shared-Hosting-Angeboten nicht verfügbar
Eine Einschränkung, die wir festgestellt haben, ist, dass dieAzure-Hosting-Plattform unterstützt keine Server, die SVG-Schriften, wie z. B. Google Fonts, in ihren billigeren, gemeinsam genutzten Webapplikations-Tiers laden. Dies liegt daran, dass diese gemeinsam genutzten Hosting-Plattformen aus Sicherheitsgründen nicht auf Windows-GDI+-Grafikobjekte zugreifen dürfen.
Wir empfehlen die Verwendung einesWindows- oder Linux-Docker-Container oder vielleicht einen VPS auf Azure, um dieses Problem zu lösen, wenn die beste Schriftartwiedergabe erforderlich ist.
Azure Free Tier Hosting ist langsam
Azure Free und Shared Tiers sowie der Consumption Plan sind für das PDF-Rendering nicht geeignet. Wir empfehlen Azure B1 Hosting/Premium Plan, den wir selbst nutzen. Der Prozess der Umwandlung von HTML in PDF ist für jeden Computer mit erheblicher "Arbeit" verbunden - ähnlich wie das Öffnen und Rendern einer Webseite auf Ihrem eigenen Computer. Es wird eine echte Browser-Engine verwendet, daher müssen wir entsprechende Vorkehrungen treffen und ähnliche Renderzeiten wie bei einem Desktop-Rechner mit ähnlicher Leistung erwarten.
Erstellen eines Tickets für eine technische Supportanfrage
Um ein Anfrageticket zu erstellen, beziehen Sie sich auf die 'So stellen Sie eine technische Supportanfrage für IronPDF' Anleitung