1

我正在尝试在 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);
    }

请帮我解决这个问题。

4

2 回答 2

0
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 中对我有用的程序集

于 2020-07-21T19:02:59.863 回答
0

https://www.nuget.org/packages/Haukcode.WkHtmlToPdfDotNet/从升级netcoreapp2.1netcoreapp3.1.

将您对 DinkToPdf 的引用替换为:

using WkHtmlToPdfDotNet;
using WkHtmlToPdfDotNet.Contracts;

我使用 Haukcode.WkHtmlToPdfDotNet 1.4.0 版,我的 libwkhtmltopdf 是 0.12.6

于 2021-05-15T18:29:25.473 回答