c# - 无法使用 DinkToPDF 在 IIS 中生成 PDF 并在本地工作
问题描述
我正在尝试在 asp.net core 3.0 应用程序中生成 PDF。已使用 nuget 包添加了 DinkToPdf.dll,并将上述 3 个文件添加到 DinkToPdf 文件夹中。尝试使用 CustomAssemblyLoadContext 加载这些 DLL。
我能够在本地生成 PDF,并将发布代码生成到一个文件夹中。我在发布代码中没有看到 libwkhtmltox.dll。我将这 3 个文件手动添加到发布代码中并托管到 IIS 中。
当我托管到 IIS 时,我面临生成 PDF 的问题。
我正在使用以下代码:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
var data = Path.Combine(Directory.GetCurrentDirectory(), "DinkToPdf", "libwkhtmltox.dll");
CustomAssemblyLoadContext Context = new CustomAssemblyLoadContext();
Context.LoadUnmanagedLibrary(data);
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
}
}
public class CustomAssemblyLoadContext : AssemblyLoadContext
{
public IntPtr LoadUnmanagedLibrary(string absolutePath)
{
return LoadUnmanagedDll(absolutePath);
}
protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
{
return LoadUnmanagedDllFromPath(unmanagedDllName);
}
protected override Assembly Load(AssemblyName assemblyName)
{
throw new NotImplementedException();
}
}
使用以下代码生成 PDF:
public void GenPdf()
{
var globalSettings = new GlobalSettings
{
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
};
var objectSettings = new ObjectSettings
{
HtmlContent = //html content
};
var pdf = new HtmlToPdfDocument()
{
GlobalSettings = globalSettings,
Objects = { objectSettings }
};
var file = _converter.Convert(pdf);
}
请帮我解决这个问题。
解决方案
services.AddControllersWithViews();
var architectureFolder = (IntPtr.Size == 8) ? "64 bit" : "32 bit";
var wkHtmlToPdfPath = Path.Combine(_hostingEnvironment.ContentRootPath, $"wkhtmltox\\v0.12.4\\{architectureFolder}\\libwkhtmltox");
CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
context.LoadUnmanagedLibrary(wkHtmlToPdfPath);
我们必须添加上面的代码来加载它在 iis 和 kubernet 中对我有用的程序集
推荐阅读
- python - PySpark - 在数据框中显示列数据类型的计数
- ios - 如何使用 react-navigation 检测路线更改或将路线与屏幕匹配
- sockets - 协议 Minecraft 聊天套接字 Java
- javascript - 允许过滤器按次要条件排序和缩小范围
- c++ - 模板实现文件中的匿名命名空间
- node.js - 如何在 node.js 请求中模拟 curl -F 选项
- android - 工具栏出现在 android 应用程序的底部而不是顶部
- reactjs - 如何删除具有类组件字段的 FieldArray 中的字段
- sql - Informix - 高效查找 10 个最近的调用
- c# - 使用 ASP Net Core 在 Web API 中修改传入请求的路由