在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
创建动态、数据驱动、内容丰富的 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 代理主机和端口。
您必须在 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 用户界面(Jaeger UI 通常可在 http://localhost:16686
获取)并查找与您的服务相关的痕迹。
OpenTelemetry 并非基本仪器的必备工具,但它可与其他后端操作系统集成,以存储和处理遥测数据。 热门选项包括官方支持的操作系统:
流行的 .NET 软件包IronPDF您可以在 .NET 程序中创建、编辑和渲染 PDF 文档。 使用 PDF 的功能很多,包括:将 HTML 页面转换为 PDF; 从 PDF 中提取文本和图像; 在已有的 PDF 文档中添加文本、图像和形状; 以及根据 HTML 内容、照片或原始数据制作 PDF。
IronPdf 的两大优势是易用和简单。 由于.NET 具有直观的 API 和全面的文档,开发人员可以毫不费力地开始在其 .NET 项目中创建 PDF。 IronPdf 的效率和速度是帮助开发人员快速高效地创建高质量 PDF 文档的附加特性。
IronPDF 的部分优势:
多个 NuGet 包可用于 OpenTelemetry 的不同组件。 根据您的需要,您可以安装所需的软件包。 向可观测性后端发送遥测数据(如 Jaeger、Zipkin 或 Prometheus)因此,您至少需要 OpenTelemetry 软件包和应用程序框架的仪器软件包。(如 ASP.NET Core)此外,还需提供一个.NET、Java、Python 或 Node.js 工具包和一个输出程序包。 此外,请确保在您的项目中安装了 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
服务。 通过 "生成 "方法创建了一个名为 "PDF 生成 "的 OpenTelemetry 活动,以象征正在进行的工作。 我们模仿活动中的一些工作(代入自己的逻辑). 我们建立了一个名为 "work_duration_ms "的直方图指标来监控工作的毫秒持续时间。 我们在指标中添加了一个数据点,将其标记为 "演示",值为 "PDF 生成",并记录了持续时间(在这种情况下为 1000 毫秒). 标签为分析提供了额外的语境。
根据上述源代码生成 PDF 输出:
以下是 Jaeger UI 生成的跟踪屏幕:
OpenTelemetry 是.NET 应用程序性能优化和健康状况监控的变革者。 它通过提供一种供应商中立的标准化方法来收集、分析和导出遥测数据,让开发人员透彻了解其应用程序的内部工作原理。(指标、跟踪和日志).
通过将 OpenTelemetry.NET 与 IronPDF 集成,开发人员可以改进创建 PDF 的工作流程,并深入了解应用程序的性能。 通过利用 OpenTelemetry.NET 实现手动检测 PDF 生成过程,开发人员可以跟踪执行路径、监控性能指标并精确定位需要优化的区域。 此外,通过将遥测数据导出到可观测性平台,可实现集中监控指标的收集和分析,从而使开发人员有能力维护其应用程序的健康并提供完美的用户体验。
OpenTelemetry.NET 实现与 IronPDF 的集成可以增强开发人员创建 PDF 的工作流程,并保证 .NET 应用程序的可扩展性、性能和可靠性。 这些技术的集成可以帮助开发人员满足现代软件开发的需求,无论是创建发票、报告还是文档,都能产生出色的结果。
如果以套餐形式购买,IronPDF 价格公道,并包含终身许可证。 该翻译包价值不菲,只需 749 美元,对许多系统而言都是一次性收费。 它为许可证持有者提供全天候在线工程支持。 请访问Iron 软件网站了解有关收费的更多详情。 探索Iron Software 的产品以进一步了解他们提供的解决方案。