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()
{