首页 > 解决方案 > 无法使用 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);
    }

请帮我解决这个问题。

标签: c#asp.net-core-3.1dinktopdf

解决方案


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


推荐阅读