我使用这个libwkhtmltox.dll将我的html转换成pdf。我用的是c# .netCore。
用法:
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;
}
关于上面的代码:
然后调用Pdf类,传递要转换的路径和内容。
new Pdf(_projectSettingsOptions).Convert(fullPath, content);
这是我的Pdf课程:
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),当第二次执行代码时,应用程序停止,没有异常发生,没有.就这条信息。
如果你需要更多的信息来帮助我解决这个问题,就告诉我。
抱歉,这篇文章的格式不好,我对此很陌生.
发布于 2017-11-29 15:24:12
要使SynchronizedConverter在.Net核心中正常工作,您需要将其注册为Singleton (最有可能是在Startup.cs ConfigureServices中):
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
(这里还描述了:https://github.com/rdvojmoc/DinkToPdf#dependancy-injection)
之后,您可以将转换器插入到Controller中,而不是创建一个新实例。这样,DLL总是在同一个线程中被调用。
发布于 2020-10-23 12:39:56
将属性STAThread设置为CreatePdf方法。
您可能仍然会在控制台上得到错误,但至少会创建pdf。
https://stackoverflow.com/questions/47021112
复制相似问题