首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Qt:无法在libwkhtmltox.dll上初始化OLE (错误80010106) -( C# )

Qt:无法在libwkhtmltox.dll上初始化OLE (错误80010106) -( C# )
EN

Stack Overflow用户
提问于 2017-10-30 17:34:00
回答 2查看 7.6K关注 0票数 12

我使用这个libwkhtmltox.dll将我的html转换成pdf。我用的是c# .netCore。

用法:

代码语言:javascript
运行
复制
    private static string CreatePdf(string content, string fileName)
    {
        var fullPath = $"{_projectSettingsOptions.Pdf}/{fileName}";

        using (var sw = new StreamWriter(new FileStream(fullPath, FileMode.Create), Encoding.UTF8))
        {
            sw.Write(content);
            sw.Flush();
        }

        new Pdf(_projectSettingsOptions).Convert(fullPath, content);

        return fullPath;
    }

关于上面的代码:

  • content =我想要转换为pdf的html内容。
  • fullPath =将存储html内容的位置。
  • _projectSettingsOptions =项目的路径,如图像路径、pdf路径等等.

然后调用Pdf类,传递要转换的路径和内容。

代码语言:javascript
运行
复制
new Pdf(_projectSettingsOptions).Convert(fullPath, content);

这是我的Pdf课程:

代码语言:javascript
运行
复制
namespace SiteMFPManager.Library.Util
{

using Assembly;
using DinkToPdf;
using Settings;
using System.IO;

public class Pdf
{
    public Pdf(ProjectSettingsOptions projectSettingsOptions) =>
        new CustomAssemblyLoadContext().LoadUnmanagedLibrary(Path.Combine(projectSettingsOptions.References, "libwkhtmltox", "libwkhtmltox.dll"));

    public void Convert(string fullPath, string content) =>
        new SynchronizedConverter(new PdfTools()).Convert(new HtmlToPdfDocument
        {
            GlobalSettings =
            {
                ColorMode = ColorMode.Color,
                Orientation = Orientation.Portrait,
                PaperSize = PaperKind.A4,
                Margins = new MarginSettings { Top = 10 },
                Out = fullPath,
            },
            Objects =
            {
                new ObjectSettings
                {
                    PagesCount = true,
                    HtmlContent = content,
                    WebSettings = { DefaultEncoding = "utf-8" }
                }
            }
        });
    }
}

CreatePdf方法执行了两次。在第一次执行时,它在控制台中向我显示: Qt:未能初始化OLE (错误80010106),当第二次执行代码时,应用程序停止,没有异常发生,没有.就这条信息。

如果你需要更多的信息来帮助我解决这个问题,就告诉我。

抱歉,这篇文章的格式不好,我对此很陌生.

EN

回答 2

Stack Overflow用户

发布于 2017-11-29 15:24:12

要使SynchronizedConverter在.Net核心中正常工作,您需要将其注册为Singleton (最有可能是在Startup.cs ConfigureServices中):

代码语言:javascript
运行
复制
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));

(这里还描述了:https://github.com/rdvojmoc/DinkToPdf#dependancy-injection)

之后,您可以将转换器插入到Controller中,而不是创建一个新实例。这样,DLL总是在同一个线程中被调用。

票数 3
EN

Stack Overflow用户

发布于 2020-10-23 12:39:56

将属性STAThread设置为CreatePdf方法。

您可能仍然会在控制台上得到错误,但至少会创建pdf。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47021112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档