Skip to content

Commit d659f77

Browse files
committed
feat: 增加 Logger 支持
1 parent 411162d commit d659f77

1 file changed

Lines changed: 85 additions & 25 deletions

File tree

src/components/BootstrapBlazor.Html2Pdf/Services/DefaultPdfService.cs

Lines changed: 85 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,61 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
// Website: https://www.blazor.zone or https://argozhang.github.io/
44

5+
using Microsoft.Extensions.Logging;
56
using PuppeteerSharp;
7+
using System.Net;
68

79
namespace BootstrapBlazor.Components;
810

911
/// <summary>
1012
/// 默认 Html to Pdf 实现
1113
/// </summary>
12-
class DefaultPdfService : IHtml2Pdf
14+
class DefaultPdfService(ILogger<DefaultPdfService> logger) : IHtml2Pdf
1315
{
16+
/// <summary>
17+
/// 获得/设置 WebProxy 对象用于网络请求代理
18+
/// <para>Get or set the WebProxy object for network request proxy</para>
19+
/// </summary>
20+
public IWebProxy? WebProxy { get; set; }
21+
1422
/// <summary>
1523
/// <inheritdoc/>
1624
/// </summary>
1725
public async Task<byte[]> PdfDataAsync(string url)
1826
{
19-
await using var browser = await LaunchBrowserAsync();
20-
await using var page = await browser.NewPageAsync();
21-
await page.GoToAsync(url);
27+
try
28+
{
29+
await using var browser = await LaunchBrowserAsync();
30+
await using var page = await browser.NewPageAsync();
2231

23-
return await page.PdfDataAsync();
32+
await page.GoToAsync(url);
33+
return await page.PdfDataAsync();
34+
}
35+
catch (Exception ex)
36+
{
37+
Log(ex, "Error generating PDF from URL: {Url}", url);
38+
throw;
39+
}
2440
}
2541

2642
/// <summary>
2743
/// <inheritdoc/>
2844
/// </summary>
2945
public async Task<Stream> PdfStreamAsync(string url)
3046
{
31-
await using var browser = await LaunchBrowserAsync();
32-
await using var page = await browser.NewPageAsync();
33-
await page.GoToAsync(url);
47+
try
48+
{
49+
await using var browser = await LaunchBrowserAsync();
50+
await using var page = await browser.NewPageAsync();
51+
await page.GoToAsync(url);
3452

35-
return await page.PdfStreamAsync();
53+
return await page.PdfStreamAsync();
54+
}
55+
catch (Exception ex)
56+
{
57+
Log(ex, "Error generating PDF from URL: {Url}", url);
58+
throw;
59+
}
3660
}
3761

3862
/// <summary>
@@ -43,14 +67,22 @@ public async Task<Stream> PdfStreamAsync(string url)
4367
/// <param name="scripts"></param>
4468
public async Task<byte[]> PdfDataFromHtmlAsync(string html, IEnumerable<string>? links = null, IEnumerable<string>? scripts = null)
4569
{
46-
await using var browser = await LaunchBrowserAsync();
47-
await using var page = await browser.NewPageAsync();
48-
await page.SetContentAsync(html);
70+
try
71+
{
72+
await using var browser = await LaunchBrowserAsync();
73+
await using var page = await browser.NewPageAsync();
74+
await page.SetContentAsync(html);
4975

50-
await AddStyleTagAsync(page, links);
51-
await AddScriptTagAsync(page, scripts);
76+
await AddStyleTagAsync(page, links);
77+
await AddScriptTagAsync(page, scripts);
5278

53-
return await page.PdfDataAsync();
79+
return await page.PdfDataAsync();
80+
}
81+
catch (Exception ex)
82+
{
83+
Log(ex, "Error generating PDF from HTML content");
84+
throw;
85+
}
5486
}
5587

5688
/// <summary>
@@ -61,14 +93,22 @@ public async Task<byte[]> PdfDataFromHtmlAsync(string html, IEnumerable<string>?
6193
/// <param name="scripts"></param>
6294
public async Task<Stream> PdfStreamFromHtmlAsync(string html, IEnumerable<string>? links = null, IEnumerable<string>? scripts = null)
6395
{
64-
await using var browser = await LaunchBrowserAsync();
65-
await using var page = await browser.NewPageAsync();
66-
await page.SetContentAsync(html);
96+
try
97+
{
98+
await using var browser = await LaunchBrowserAsync();
99+
await using var page = await browser.NewPageAsync();
100+
await page.SetContentAsync(html);
67101

68-
await AddStyleTagAsync(page, links);
69-
await AddScriptTagAsync(page, scripts);
102+
await AddStyleTagAsync(page, links);
103+
await AddScriptTagAsync(page, scripts);
70104

71-
return await page.PdfStreamAsync();
105+
return await page.PdfStreamAsync();
106+
}
107+
catch (Exception ex)
108+
{
109+
Log(ex, "Error generating PDF from HTML content");
110+
throw;
111+
}
72112
}
73113

74114
private static async Task AddStyleTagAsync(IPage page, IEnumerable<string>? links = null)
@@ -103,11 +143,31 @@ private static async Task AddScriptTagAsync(IPage page, IEnumerable<string>? scr
103143

104144
private static LaunchOptions CreateOptions() => new() { Headless = true, Args = ["--no-sandbox", "--disable-setuid-sandbox", "--disable-web-security"] };
105145

106-
private static async Task<IBrowser> LaunchBrowserAsync()
146+
private async Task<IBrowser> LaunchBrowserAsync()
107147
{
108-
var browserFetcher = new BrowserFetcher();
109-
await browserFetcher.DownloadAsync();
148+
var browserFetcher = new BrowserFetcher
149+
{
150+
WebProxy = WebProxy
151+
};
152+
153+
Log(null, "Ready to start downloading browser");
154+
var browser = await browserFetcher.DownloadAsync();
155+
Log(null, $"Browser downloaded successfully. installed browser {browser.BuildId}");
110156

111-
return await Puppeteer.LaunchAsync(CreateOptions());
157+
var options = CreateOptions();
158+
Log(null, "Start your browser", "--no-sandbox", "--disable-setuid-sandbox", "--disable-web-security");
159+
return await Puppeteer.LaunchAsync(options);
160+
}
161+
162+
private void Log(Exception? exception, string? message, params object?[] args)
163+
{
164+
if (args.Length != 0)
165+
{
166+
logger.LogInformation(exception, "{Message} | Args: {Args}", message, args);
167+
}
168+
else
169+
{
170+
logger.LogInformation(exception, "{Message}", message);
171+
}
112172
}
113173
}

0 commit comments

Comments
 (0)