diff --git a/Codeuctivity.HtmlRenderer/Renderer.cs b/Codeuctivity.HtmlRenderer/Renderer.cs index a5edef6..cc83756 100644 --- a/Codeuctivity.HtmlRenderer/Renderer.cs +++ b/Codeuctivity.HtmlRenderer/Renderer.cs @@ -195,6 +195,29 @@ public async Task ConvertHtmlToPng(string sourceHtmlFilePath, string destination await page.ScreenshotAsync(destinationPngFilePath, screenshotOptions).ConfigureAwait(false); } + /// + /// Converts a HTML string to a PNG buffer + /// + /// + public Task ConvertHtmlStringToPngData(string sourceHtmlData) + { + return ConvertHtmlStringToPngData(sourceHtmlData, new ScreenshotOptions { FullPage = true }); + } + + /// + /// Converts a HTML string to a PNG buffer + /// + /// + /// + public async Task ConvertHtmlStringToPngData(string sourceHtmlData, ScreenshotOptions screenshotOptions) + { + await using var page = await Browser.NewPageAsync().ConfigureAwait(false); + await page.SetContentAsync(sourceHtmlData).ConfigureAwait(false); + // Wait for fonts to be loaded. Omitting this might result in no text the screenshot. + await page.EvaluateExpressionHandleAsync("document.fonts.ready"); + return await page.ScreenshotDataAsync(screenshotOptions).ConfigureAwait(false); + } + private void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { if (LastProgressValue != e.ProgressPercentage) diff --git a/Codeuctivity.HtmlRendererTests/RendererTests.cs b/Codeuctivity.HtmlRendererTests/RendererTests.cs index ac6540f..ec50f9f 100644 --- a/Codeuctivity.HtmlRendererTests/RendererTests.cs +++ b/Codeuctivity.HtmlRendererTests/RendererTests.cs @@ -166,6 +166,38 @@ public async Task ShouldConvertHtmlToPngScreenshotOptions(string testFileName, b await ChromiumProcessDisposedAsserter.AssertNoChromiumProcessIsRunning(); } + [Theory] + [InlineData("BasicTextFormatedInlineBackground.html", false, 15000)] + [InlineData("BasicTextFormatedInlineBackground.html", true, 9500)] + public async Task ShouldConvertHtmlToPngBufferOptions(string testFileName, bool omitBackground, int allowedPixelDiff) + { + var sourceHtmlFilePath = $"../../../TestInput/{testFileName}"; + var actualFilePath = Path.Combine(Path.GetTempPath(), $"ActualConvertHtmlToPng{testFileName}.{omitBackground}.png"); + var expectReferenceFilePath = $"../../../ExpectedTestOutcome/ExpectedConvertHtmlToPng{testFileName}.{omitBackground}.png"; + + if (File.Exists(actualFilePath)) + { + File.Delete(actualFilePath); + } + + await using (var chromiumRenderer = await Renderer.CreateAsync()) + { + ScreenshotOptions screenshotOptions = new ScreenshotOptions + { + OmitBackground = omitBackground + }; + + var fileContent = await File.ReadAllTextAsync(sourceHtmlFilePath); + var pngData = await chromiumRenderer.ConvertHtmlStringToPngData(fileContent, screenshotOptions); + // File.Copy(actualFilePath, expectReferenceFilePath, true); + await File.WriteAllBytesAsync(actualFilePath, pngData); + DocumentAsserter.AssertImageIsEqual(actualFilePath, expectReferenceFilePath, allowedPixelDiff); + } + + File.Delete(actualFilePath); + await ChromiumProcessDisposedAsserter.AssertNoChromiumProcessIsRunning(); + } + [Fact] public async Task ShouldDisposeGracefull() {