在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在現代軟體開發的許多領域中,創建動態的、數據驅動的、豐富的 PDF 文檔是一個典型的需求。 企業極度依賴其快速生成高品質 PDF 的能力,無論是用於創建賬單、報告還是文檔。 然而,隨著 PDF 生產過程變得更加複雜和大規模,跟蹤和理解這些過程的有效性對於保持應用程式的健康並確保用戶滿意變得至關重要。
本文旨在討論開發者如何透過利用IronPDF和OpenTelemetry.NET的功能來提升PDF生成操作,並提供關於應用程式性能的重要見解。 我們將探討這兩種技術的特點和優勢,並展示它們如何協同工作以優化在.NET 應用程式中創建和監控PDF。
OpenTelemetry 是一個供應商中立的可觀察性框架,專為雲原生應用程式而創建。OpenTelemetry 自動化儀器提供單一 API 來收集遙測信息,包括日誌、追蹤和指標。 藉由使用這些廣泛的數據,開發人員可以有效地除錯問題、找出性能瓶頸,並完全掌握程式的行為。 OpenTelemetry 支援自動和手動儀器,以提供全面且靈活的遙測資料收集。
將 OpenTelemetry 整合到您的 .NET 應用程式中具有多項優勢:
您需要在您的應用程式中配置 OpenTelemetry。 對於 ASP.NET Core 應用程式,這通常在 Startup.cs
文件的 ConfigureServices
方法中完成。以下是 Jaeger 出口配置的示例:
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
builder.Services.AddOpenTelemetry().WithTracing(options =>
{
// Configure Jaeger exporter
// serviceName we can read from environment variables
options
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName))
.AddAspNetCoreInstrumentation().AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}
using OpenTelemetry.Trace;
using OpenTelemetry.Exporter.Jaeger;
using OpenTelemetry.Resources;
public void ConfigureServices(IServiceCollection services)
{
// Configure OpenTelemetry
builder.Services.AddOpenTelemetry().WithTracing(options =>
{
// Configure Jaeger exporter
// serviceName we can read from environment variables
options
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName))
.AddAspNetCoreInstrumentation().AddJaegerExporter(opt =>
{
opt.AgentHost = "localhost"; // Jaeger agent host
opt.AgentPort = 14250; // Jaeger agent port
});
});
// Other service configurations...
}
Imports OpenTelemetry.Trace
Imports OpenTelemetry.Exporter.Jaeger
Imports OpenTelemetry.Resources
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure OpenTelemetry
builder.Services.AddOpenTelemetry().WithTracing(Sub(options)
' Configure Jaeger exporter
' serviceName we can read from environment variables
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(serviceName)).AddAspNetCoreInstrumentation().AddJaegerExporter(Sub(opt)
opt.AgentHost = "localhost" ' Jaeger agent host
opt.AgentPort = 14250 ' Jaeger agent port
End Sub)
End Sub)
' Other service configurations...
End Sub
將您的服務名稱放在 serviceName
的位置。 根據您的 Jaeger 配置選項,更改 Jaeger agent 主機和端口。
您必須在 ASP.NET Core 應用程式中包含 OpenTelemetry 中介軟體,以取得對來自 HTTP 要求的自動化檢測。 在您的 Startup.cs
文件的 Configure
方法中,添加中介軟體:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add OpenTelemetry middleware if we are using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Add OpenTelemetry middleware if we are using Prometheus
app.UseHttpMetrics();
// Other middleware configurations...
}
Public Sub Configure(ByVal app As IApplicationBuilder, ByVal env As IWebHostEnvironment)
' Add OpenTelemetry middleware if we are using Prometheus
app.UseHttpMetrics()
' Other middleware configurations...
End Sub
設定完成後,OpenTelemetry 將開始跟蹤傳入的 HTTP 請求,並自行將遙測信息發送到配置好的 Jaeger 後端。
您可以在您的 Jaeger 後端中檢查追蹤,以確認 OpenTelemetry 是否正常運作。 開啟 Jaeger 使用者介面(通常可在 http://localhost:16686
提供 Jaeger UI)並查找與您的服務相關的痕跡。
OpenTelemetry 不是基本儀器化的必需品,但它可以與其他後端操作系統集成以儲存和處理遙測數據。 熱門選項包括官方支援的操作系統:
熱門的 .NET 套件IronPDF允許您在 .NET 程式中創建、編輯和渲染 PDF 文檔。 處理 PDF 的功能多樣化,包括:將 HTML 頁面轉換為 PDF; 從 PDF 提取文本和圖像; 將文字、圖片和形狀添加到現有的 PDF 文件中; 從 HTML 內容、照片或原始數據生成 PDF。
IronPDF 的兩個主要優勢是易於使用及簡單化。 由於其直觀的API和全面的文件,開發者可以輕鬆地在其 .NET 專案中開始創建PDF。 IronPDF 的效率和速度是額外的特點,幫助開發人員快速高效地創建高質量的 PDF 文件。
IronPDF 的一些好處:
OpenTelemetry 為不同的元件提供多個 NuGet 套件。 根據您的需求,您可以安裝所需的套件。 將遙測數據發送到可觀測性後端(例如 Jaeger、Zipkin 或 Prometheus)你至少需要 OpenTelemetry 套件,以及適用於您的應用框架的儀器包(例如 ASP.NET Core)和導出器套件。 此外,確保在您的專案中安裝了 IronPDF 套件。 要安裝它,請使用 NuGet 套件管理器主控台:
Install-Package OpenTelemetry
Install-Package OpenTelemetry.Instrumentation.AspNetCore
Install-Package OpenTelemetry.Exporter.Jaeger
Install-Package IronPdf
打開您的 ASP.NET Core 應用程式的 Startup.cs
文件,以進入 ConfigureServices
函數。 要設置 IronPDF,請包含以下代碼。
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}
using IronPdf;
public void ConfigureServices(IServiceCollection services)
{
// Configure IronPDF
services.AddSingleton<HtmlToPdf>();
// Other service configurations...
}
Imports IronPdf
Public Sub ConfigureServices(ByVal services As IServiceCollection)
' Configure IronPDF
services.AddSingleton(Of HtmlToPdf)()
' Other service configurations...
End Sub
此程式碼確保應用程式僅透過將 IronPDF 的 HtmlToPdf
服務配置為單例來創建和使用 HtmlToPdf
的實例。
您可以通過將 OpenTelemetry.NET 與 IronPDF 集成來跟蹤和觀察 .NET 應用程式中的 PDF 生成過程。 讓我們深入研究這個代碼範例,逐步了解每一個步驟:
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<WeatherForecastController> _logger;
private readonly Tracer _tracer;
public WeatherForecastController(ILogger<WeatherForecastController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
}
[HttpGet]
public FileContentResult Generate()
{
string fileName = "Sample.pdf";
var stream = GeneratePdf("Hello IronPDF");
return new FileContentResult(stream, "application/octet-stream")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
var pdfBytes = pdfDocument.BinaryData;
return pdfBytes;
}
}
}
}
using Microsoft.AspNetCore.Mvc;
using OpenTelemetry.Trace;
using System.Diagnostics;
using System.Net;
using System.Net.Http.Headers;
namespace DemoWebApplication.Controllers
{
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly HtmlToPdf _htmlToPdf;
private readonly ILogger<WeatherForecastController> _logger;
private readonly Tracer _tracer;
public WeatherForecastController(ILogger<WeatherForecastController> logger, HtmlToPdf htmlToPdf, TracerProvider tracerProvider)
{
_tracer = tracerProvider.GetTracer("Demo");
_htmlToPdf = htmlToPdf;
}
[HttpGet]
public FileContentResult Generate()
{
string fileName = "Sample.pdf";
var stream = GeneratePdf("Hello IronPDF");
return new FileContentResult(stream, "application/octet-stream")
{
FileDownloadName = fileName
};
}
private byte[] GeneratePdf(string htmlContent)
{
using (var activity = _tracer.StartActiveSpan("PDF Generation"))
{
var pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent);
var pdfBytes = pdfDocument.BinaryData;
return pdfBytes;
}
}
}
}
Imports Microsoft.AspNetCore.Mvc
Imports OpenTelemetry.Trace
Imports System.Diagnostics
Imports System.Net
Imports System.Net.Http.Headers
Namespace DemoWebApplication.Controllers
<ApiController>
<Route("[controller]")>
Public Class DemoController
Inherits ControllerBase
Private ReadOnly _htmlToPdf As HtmlToPdf
Private ReadOnly _logger As ILogger(Of WeatherForecastController)
Private ReadOnly _tracer As Tracer
Private Function WeatherForecastController(ByVal logger As ILogger(Of WeatherForecastController), ByVal htmlToPdf As HtmlToPdf, ByVal tracerProvider As TracerProvider) As Public
_tracer = tracerProvider.GetTracer("Demo")
_htmlToPdf = htmlToPdf
End Function
<HttpGet>
Public Function Generate() As FileContentResult
Dim fileName As String = "Sample.pdf"
Dim stream = GeneratePdf("Hello IronPDF")
Return New FileContentResult(stream, "application/octet-stream") With {.FileDownloadName = fileName}
End Function
Private Function GeneratePdf(ByVal htmlContent As String) As Byte()
Using activity = _tracer.StartActiveSpan("PDF Generation")
Dim pdfDocument = _htmlToPdf.RenderHtmlAsPdf(htmlContent)
Dim pdfBytes = pdfDocument.BinaryData
Return pdfBytes
End Using
End Function
End Class
End Namespace
要為我們的應用程式生成追蹤器實例,我們注入 TracerProvider
服務。 Generate
方法創建了一個名為 "PDF Generation" 的 OpenTelemetry 活動,用以象徵當前正在進行的工作。 我們模擬了活動中的一些工作(替換您自己的邏輯). 我們建立一個名為 work_duration_ms
的直方圖度量來監控工作的毫秒持續時間。 我們將一個數據點添加到度量標準中,將其標記為「Demo」,值為「PDF Generation」,並記錄持續時間。(在這種情況下為 1000 毫秒). 標籤為分析提供了額外的上下文層。
從上述源代碼生成的 PDF 輸出:
以下是從 Jaeger UI 生成的追蹤畫面:
OpenTelemetry 是一個改變遊戲規則的技術,用於 .NET 應用程式效能優化和健康監控。 它通過提供一種與廠商無關且標準化的方法來收集、分析和導出遙測數據,使開發者深入了解其應用程式的內部運作。(度量、追蹤和日誌).
通過將 OpenTelemetry.NET 與 IronPDF 集成,開發人員可以改進創建 PDF 的工作流程並獲取其應用程式性能的洞察。 通過利用 OpenTelemetry.NET 實作手動儀表化 PDF 生成過程,開發人員可以追蹤執行路徑、監控性能指標,並找出需要優化的區域。 此外,通過將遙測數據導出到可觀測性平台,實現了集中監控指標的收集和分析,使開發人員能夠維護其應用程式的健康狀況,並提供無縫的用戶體驗。
整合 OpenTelemetry.NET 的實作與 IronPDF 可以增強開發人員創建 PDF 的工作流程,並保證 .NET 應用程式的可擴展性、性能和可靠性。 這些技術的整合幫助開發人員滿足現代軟體開發的需求,並產生出色的結果,不論是創建發票、報告還是文件。
當作為套裝購買時,IronPDF 價格相當合理,並包括終身許可證。 此套件價格僅為 $749,這是一個多系統的一次性費用,提供極佳的價值。 它為許可持有人提供全天候的在線技術支援。 請訪問Iron Software 網站更多關於收費的詳情。 探索Iron Software 的產品瞭解更多關於他們提供的解決方案。