Vic*_*idt 7 c# wkhtmltopdf asp.net-core-mvc
即时通讯使用此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;
}
Run Code Online (Sandbox Code Playgroud)
关于上面的代码:
然后,我调用Pdf类,传递要转换的路径和内容。
new Pdf(_projectSettingsOptions).Convert(fullPath, content);
Run Code Online (Sandbox Code Playgroud)
这是我的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" }
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
该CreatePdf方法其执行两次。第一次,它执行并在控制台中显示给我:Qt:无法初始化OLE(错误80010106),第二次执行代码时,应用程序停止,没有异常发生,什么都没有...只是那个消息。
如果您需要更多信息来帮助我解决此问题,请告诉我。
抱歉,如果帖子格式错误,我是新来的...
为了让 SynchronizedConverter 在 .Net Core 中正常工作,您需要将其注册为单例(最有可能在 Startup.cs 配置服务中):
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
Run Code Online (Sandbox Code Playgroud)
(此处也有描述:https ://github.com/rdvojmoc/DinkToPdf#dependancy-injection )
之后,您可以将转换器注入控制器中,而不是创建新实例。这样 DLL 就总是在同一个线程中被调用。
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |