forked from rdvojmoc/DinkToPdf
-
Notifications
You must be signed in to change notification settings - Fork 71
Open
Description
We used to generate pdf in .net5 in 2021, then we upgraded to .net6 in 2022 and upgraded to .net8 in 2024,But we found this caused failed to free memory in .net8. I don't know the problem caused by .net8 Or by the WkHtmlToPdf version.
The api called 10000 times maybe every day, the memory trend like this.

code in my project below:
Startup.cs
services.AddSingleton<WkHtmlToPdfDotNet.Contracts.IConverter>(sp =>
{
var logger = sp.GetService<ILogger<WkHtmlToPdfDotNet.Contracts.IConverter>>();
var converter = new WkHtmlToPdfDotNet.SynchronizedConverter(new WkHtmlToPdfDotNet.PdfTools());
converter.Warning += (sender, e) =>
{
logger.LogWarning(e.Message);
};
converter.Error += (sender, e) =>
{
logger.LogError(e.Message);
};
return converter;
});ValueController.cs
private IConverter converter;
public ValueController(IConverter _converter)
{
converter = _converter;
}
[HttpGet]
public async Task<IActionResult> DownChainPdf()
{
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4Plus,
},
Objects = {
new ObjectSettings() {
PagesCount = true,
HtmlContent = html, // html string, 100kb
WebSettings = { DefaultEncoding = "utf-8" },
HeaderSettings = { FontSize = 9, FontName = "微软雅黑", Line = true, Spacing = 5, Left = $"Gen by:{model.User.UserName}【{model.User.DisplayName}】", Right = $"Gen date:{model.ReportDate.ToOffset(TimeSpan.FromHours(8)).ToString("yyyy-MM-dd HH:mm:ss")}" },
FooterSettings = { FontSize = 9, FontName = "微软雅黑", Line = true, Spacing = 5, Center = "[page] / [topage]" }
}
}
};
byte[] pdfData;
await _PdfSlim.WaitAsync();
try
{
pdfData = converter.Convert(doc);
}
finally
{
_PdfSlim.Release();
}
Response.Headers.Append("Content-Disposition", "attachment; filename=\"output.pdf\"");
return File(pdfData, "application/pdf", "output.pdf");
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels