Update PuppeteerPdfGeneratorService for Local USE
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 25m21s

This commit is contained in:
Leandro Hernan Rojas 2026-01-12 16:22:19 -03:00
parent c75103c671
commit fa5b51dc40
2 changed files with 40 additions and 16 deletions

View File

@ -1,6 +1,7 @@
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using PuppeteerSharp.Media; using Microsoft.Extensions.Configuration;
using PuppeteerSharp; using PuppeteerSharp;
using PuppeteerSharp.Media;
using Transversal.Interfaces; using Transversal.Interfaces;
using Transversal.Models; using Transversal.Models;
@ -9,30 +10,49 @@ namespace Transversal.Services
public class PuppeteerPdfGeneratorService : IPdfGeneratorService, IAsyncDisposable public class PuppeteerPdfGeneratorService : IPdfGeneratorService, IAsyncDisposable
{ {
private readonly Browser _browser; private readonly Browser _browser;
public PuppeteerPdfGeneratorService()
public PuppeteerPdfGeneratorService(IConfiguration config)
{ {
string? executablePath = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) string? executablePath = RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
? "/usr/bin/chromium" // Docker/Linux ? "/usr/bin/chromium" // Docker/Linux (NO TOCAR)
: null; // Windows local → que use Chrome instalado : ResolveWindowsBrowserPath(config); // Windows local
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
if (string.IsNullOrWhiteSpace(executablePath) || !File.Exists(executablePath))
throw new InvalidOperationException(
$"No se encontró un navegador. Verifique Puppeteer:ExecutablePath. Path evaluado: '{executablePath}'.");
}
_browser = Puppeteer.LaunchAsync(new LaunchOptions _browser = Puppeteer.LaunchAsync(new LaunchOptions
{ {
Headless = true, Headless = true,
ExecutablePath = executablePath, ExecutablePath = executablePath,
Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" } Args = RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
? new[] { "--no-sandbox", "--disable-setuid-sandbox" }
: Array.Empty<string>()
}).GetAwaiter().GetResult(); }).GetAwaiter().GetResult();
} }
//public PuppeteerPdfGeneratorService() private static string? ResolveWindowsBrowserPath(IConfiguration config)
//{ {
// // NO USAR BrowserFetcher NUNCA en entorno productivo Docker // 1) appsettings: "Puppeteer:ExecutablePath"
// _browser = Puppeteer.LaunchAsync(new LaunchOptions var configured = config["Puppeteer:ExecutablePath"];
// { if (!string.IsNullOrWhiteSpace(configured))
// Headless = true, return configured;
// ExecutablePath = "/usr/bin/chromium", // ruta de chromium en la imagen docker
// Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" } // 2) fallbacks típicos (Chrome/Edge)
// }).GetAwaiter().GetResult(); var candidates = new[]
//} {
@"C:\Program Files\Google\Chrome\Application\chrome.exe",
@"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe",
@"C:\Program Files\Microsoft\Edge\Application\msedge.exe",
@"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe",
};
return candidates.FirstOrDefault(File.Exists);
}
public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent, PdfGenerationOptions options = null) public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent, PdfGenerationOptions options = null)
{ {
options ??= new PdfGenerationOptions(); options ??= new PdfGenerationOptions();
@ -55,6 +75,7 @@ namespace Transversal.Services
return await page.PdfDataAsync(pdfOptions); return await page.PdfDataAsync(pdfOptions);
} }
public async ValueTask DisposeAsync() public async ValueTask DisposeAsync()
{ {
if (_browser != null) if (_browser != null)

View File

@ -29,5 +29,8 @@
"ValidIssuer": "http://phroncare-bio-d7e9h0-api.saludlab.com.ar:9000", "ValidIssuer": "http://phroncare-bio-d7e9h0-api.saludlab.com.ar:9000",
"ValidAudience": "http://phroncare-bio-d7e9h0-api.saludlab.com.ar:9000", "ValidAudience": "http://phroncare-bio-d7e9h0-api.saludlab.com.ar:9000",
"Secret": "8f96cb2c6eac839349f783369690eb368411359afbaa8de6c6c2b30927d2f9fe6222fc6911348eb88c235cf393cb808ce80b5498de31e37090ba06482eca93ecbf31b8e1d97209d9ae4ba01d4e285af64bc9758b70decfb385bf96e74f2b6c61d00cc80b8fbfd999d5902e2ca58f2f7a3ee574280d776ba61a5b1cbd0180689577b02fc8ec26297a501c4409f8529b338814f629a2b8fcba21dc0e15f408969dbc4b7f14b43a19b46a41bc288ddf207c16d50b11e1039ffd131c312ddf10df6fd65d8bc3f898a14294cd32366269bee53f84e94f45de80e8b5ddaa1a3b4aa288a7cb35eacaf9c2005d65237210c14843af022177be2f6e93764c3b4030b59f24" "Secret": "8f96cb2c6eac839349f783369690eb368411359afbaa8de6c6c2b30927d2f9fe6222fc6911348eb88c235cf393cb808ce80b5498de31e37090ba06482eca93ecbf31b8e1d97209d9ae4ba01d4e285af64bc9758b70decfb385bf96e74f2b6c61d00cc80b8fbfd999d5902e2ca58f2f7a3ee574280d776ba61a5b1cbd0180689577b02fc8ec26297a501c4409f8529b338814f629a2b8fcba21dc0e15f408969dbc4b7f14b43a19b46a41bc288ddf207c16d50b11e1039ffd131c312ddf10df6fd65d8bc3f898a14294cd32366269bee53f84e94f45de80e8b5ddaa1a3b4aa288a7cb35eacaf9c2005d65237210c14843af022177be2f6e93764c3b4030b59f24"
},
"Puppeteer": {
"ExecutablePath": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
} }
} }