Westwind.WebView.HtmlToPdf 0.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Westwind.WebView.HtmlToPdf --version 0.1.0
NuGet\Install-Package Westwind.WebView.HtmlToPdf -Version 0.1.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Westwind.WebView.HtmlToPdf" Version="0.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Westwind.WebView.HtmlToPdf --version 0.1.0
#r "nuget: Westwind.WebView.HtmlToPdf, 0.1.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Westwind.WebView.HtmlToPdf as a Cake Addin
#addin nuget:?package=Westwind.WebView.HtmlToPdf&version=0.1.0

// Install Westwind.WebView.HtmlToPdf as a Cake Tool
#tool nuget:?package=Westwind.WebView.HtmlToPdf&version=0.1.0

Html to PDF using WebView on Windows

NuGet Pre Release

This library provides a quick way to print HTML to PDF on Windows using the WebView control. You can generate PDF from HTML using a few different mechanisms:

  • To file
  • To Stream
  • Using Async Call
  • Using Event Callbacks

Prerequisites

The components requires:

  • Running on Windows
  • Running with an Interactive User Context

The component does not support:

  • Non Windows platforms
  • Running inside of a server, non-user context (ie. SYSTEM)

Using the library

You can install the library from NuGet:

PS> install-package westwind.webview.htmltopdf

or:

dotnet add package westwind.webview.htmltopdf

Async Call Syntax for File Output

// Full path to File or URL
var htmlFile = Path.GetFullPath("HtmlSampleFileLonger-SelfContained.html");
var outputFile = Path.GetFullPath(@".\test2.pdf");
File.Delete(outputFile);

var host = new HtmlToPdfHost();

// all overrides are optional!
var pdfPrintSettings = new WebViewPrintSettings()
{
    MarginBottom = 0.2F,
    MarginLeft = 0.2f,
    MarginRight = 0.2f,
    MarginTop = 0.4f,
    ScaleFactor = 0.8F,
    ShouldPrintHeaderandFooter = false,
    ColorMode = "Color",
};
var result = await host.PrintToPdfAsync(htmlFile, outputFile, pdfPrintSettings);

Assert.IsTrue(result.IsSuccess, result.Message);
ShellUtils.OpenUrl(outputFile);

Async Call Syntax for Stream Result

var htmlFile = Path.GetFullPath("HtmlSampleFileLonger-SelfContained.html");
var outputFile = Path.GetFullPath(@".\test3.pdf");
File.Delete(outputFile);

var host = new HtmlToPdfHost();
var pdfPrintSettings = new WebViewPrintSettings()
{
    MarginBottom = 0.2F,
    MarginLeft = 0.2f,
    MarginRight = 0.2f,
    MarginTop = 0.4f,
    ScaleFactor = 1,
    HeaderTitle = "Markdown Monster",
    ShouldPrintHeaderandFooter = true,
    ColorMode = "Grayscale",  // doesn't work
    FooterUri = "https://west-wind.com"
};

// We're interested in result.ResultStream
var result = await host.PrintToPdfStreamAsync(htmlFile, pdfPrintSettings);

Assert.IsTrue(result.IsSuccess, result.Message);
Assert.IsNotNull(result.ResultStream); // MemoryStream instance

Debug.WriteLine($"Stream Length: {result.ResultStream.Length}");

// Copy resultstream to output file and display
File.Delete(outputFile);
using var fstream = new FileStream(outputFile, FileMode.OpenOrCreate, FileAccess.Write);
result.ResultStream.CopyTo(fstream);
result.ResultStream.Close(); // Close returned stream!

ShellUtils.OpenUrl(outputFile);

Event Syntax to PDF File

var htmlFile = Path.GetFullPath("HtmlSampleFile-SelfContained.html");
var outputFile = Path.GetFullPath(@".\test.pdf");
File.Delete(outputFile);

var host = new HtmlToPdfHost();            

// Callback when complete
host.OnPrintCompleteAction = (result) =>
{
    if (result.IsSuccess)
    {
        ShellUtils.OpenUrl(outputFile);
        Assert.IsTrue(true);
    }
    else
    {
        Assert.Fail(result.Message);
    }
};
var pdfPrintSettings = new WebViewPrintSettings()
{
    MarginBottom = 0.2F,
    MarginLeft = 0.2f,
    MarginRight = 0.2f,
    MarginTop = 0.4f,
    ScaleFactor = 0.8f
};
host.PrintToPdf(htmlFile, outputFile, pdfPrintSettings);

Event Syntax to Stream

// File or URL
var htmlFile = Path.GetFullPath("HtmlSampleFile-SelfContained.html");                       
var host = new HtmlToPdfHost();

// Callback on completion
host.OnPrintCompleteAction = (result) =>
{
    if (result.IsSuccess)
    {
        // create file so we can display
        var outputFile = Path.GetFullPath(@".\test1.pdf");
        File.Delete(outputFile);

        using var fstream = new FileStream(outputFile, FileMode.OpenOrCreate, FileAccess.Write);
        result.ResultStream.CopyTo(fstream);

        result.ResultStream.Close(); // Close returned stream!

        ShellUtils.OpenUrl(outputFile);
        Assert.IsTrue(true);
    }
    else
    {
        Assert.Fail(result.Message);
    }
};
var pdfPrintSettings = new WebViewPrintSettings()
{
    MarginBottom = 0.2F,
    MarginLeft = 0.2f,
    MarginRight = 0.2f,
    MarginTop = 0.4f,
    ScaleFactor = 0.8f,
};
host.PrintToPdfStream(htmlFile, pdfPrintSettings);
Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Westwind.WebView.HtmlToPdf:

Package Downloads
Westwind.WebView.HtmlToPdf.Extended

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.6.0 184 4/7/2024
0.5.0 218 3/31/2024
0.4.0 96 3/27/2024
0.3.0 91 3/27/2024
0.2.0 91 3/26/2024
0.1.0 97 3/25/2024