我正在使用 Iron Pdf,但是通过 @font-face 导入使用外部字体时出现问题。 即使在首次渲染上设置延迟,在生产中它也会返回一个空白的 PDF。 有人有替代方案来解决它吗? 下面是渲染 HTML/CSS 的代码示例:
try
{
_logger.Debug(LogContext, "start chrome render", options);
var renderer = new ChromePdfRenderer
{
RenderingOptions = CreateRenderOptionsFrom(options)
};
if (_isFirstRender)
{
_logger.Debug(LogContext, "first render");
//We need to add a delay in the render process because we are using external fonts on the template,
//after the first render, this does not look like a issue anymore. Link below for refence
//https://ironpdf.com/examples/google-fonts-htmltopdf/
_isFirstRender = false;
#if DEBUG
renderer.RenderingOptions.RenderDelay = 500;
#else
renderer.RenderingOptions.RenderDelay = 1200;
#endif
}
var (first, rest) = pages;
_logger.Debug(LogContext, "creating first page");
var pdf = await renderer.RenderHtmlAsPdfAsync(first);
_logger.Debug(LogContext, "created first page");
foreach (var page in rest)
{
_logger.Debug(LogContext, "creating next page");
var newPage = await renderer.RenderHtmlAsPdfAsync(page);
pdf.AppendPdf(newPage);
_logger.Debug(LogContext, "created next page");
}
_logger.Debug(LogContext, "reading stream");
using var ms = pdf.Stream;
var buffer = await ms.GetBufferAsync(cancellationToken: cancellationToken);
var file = FileRaw.Create(buffer, ExtensionMap.pdf);
_logger.Debug(LogContext, "readed stream");
return file.AsRight<Exception, FileRaw>();
}
catch (Exception ex)
{
return ex.AsLeft<Exception, FileRaw>();
}
我尝试在第一次渲染、加载字体以及渲染 PDF 之前设置渲染计时器,但它在我的本地主机上效果不佳。 我还尝试按照文档中的一些步骤进行操作,例如https://ironpdf.com/how-to/manage-fonts/ 但由于与另一个库不兼容,我们无法更新到最新版本
我建议使用 https://2pdf.io 作为无服务器 API,用于 HTML 到 PDF(或屏幕截图)渲染(使用 CSS 和 JS)。
当时现有转换器的问题是速度太慢、成本太高且主服务器超载,因此我们使用此服务来解决我们的问题。
我们的请求需要 600-700 毫秒才能提供简单的发票。
有一个 nuget 库
dotnet add package 2PDF --version 1.0.2