我正在构建一个 POC,在其中我使用 razorlight 编译 index.cshtml,然后使用 dinktopdf 生成一个 pdf,到目前为止,我的那部分工作正常。
接下来,使用 vuejs 和 vue-qrcode,我能够将 qrcode 添加到 qr-code 标签转换为画布并显示 qrcode 的页面。
现在,我遇到的问题是,在生成 pdf 的过程中,vue-qrcode 没有被编译成常规的 html(它应该是一个画布标签),并且没有任何东西被添加到 pdf 中。
解决方案在以下存储库中
page = await engine.CompileRenderAsync(path, model);
显示 html 的完整字符串,在那里您可以看到 qr-code 标记仍然保持原样。
public async Task<byte[]> PrintPDFAsync()
{
var engine = new RazorLightEngineBuilder()
.UseFileSystemProject(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location))
.UseMemoryCachingProvider()
.Build();
var model = new List<WeatherForecast>(Get());
string page = null;
try
{
var path = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"Views/Home/Index.cshtml");
page = await engine.CompileRenderAsync(path, model);
}
catch (Exception e)
{
Console.WriteLine(e);
}
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4Plus
},
Objects = {
new ObjectSettings() {
PagesCount = true,
HtmlContent = page,
WebSettings = { DefaultEncoding = "utf-8" },
HeaderSettings = { FontSize = 9, Right = "Page [page] of [toPage]", Line = true, Spacing = 2.812 }
}
}
};
byte[] pdf = null;
try
{
pdf = _pdfConverter.Convert(doc);
}
catch (Exception e)
{
Console.WriteLine(e);
}
return pdf;
}