尝试从 HTML 模板生成 PDF 时出现错误。我有一个不同的类库用于生成 PDF,我从另一个控制器调用它。
System.DllNotFoundException:'无法加载 DLL 'libwkhtmltox': 找不到指定的模块。 (HRESULT 的异常: 0x8007007E)'
您的 csproj 文件强制将 NuGet 程序集复制到构建的输出:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
如果您在 docker 中运行应用程序,请进行更新以安装 .netcore 的 libwkhtmltox 依赖项
# Install libwkhtmltox dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
zlib1g \
fontconfig \
libfreetype6 \
libx11-6 \
libxext6 \
libxrender1 \
libjpeg62-turbo
从https://github.com/rdvojmoc/DinkToPdf/tree/master/v0.12.4下载包
通过自定义程序集引用将其添加到您的项目引用并在您的启动项目中注册。 这是自定义程序集加载上下文,可以从绝对路径加载库。
internal 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();
}
}
在 Statup.cs 中添加以下代码。 在创建转换器之前调用 CustomAssemblyLoadContext:
CustomAssemblyLoadContext context = new CustomAssemblyLoadContext(); context.LoadUnmanagedLibrary(路径);
var转换器 = new SynchronizedConverter(new PdfTools()); services.AddSingleton(转换器); services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));