Weasyprint.Wrapped
10.0.3
dotnet add package Weasyprint.Wrapped --version 10.0.3
NuGet\Install-Package Weasyprint.Wrapped -Version 10.0.3
<PackageReference Include="Weasyprint.Wrapped" Version="10.0.3" />
<PackageVersion Include="Weasyprint.Wrapped" Version="10.0.3" />
<PackageReference Include="Weasyprint.Wrapped" />
paket add Weasyprint.Wrapped --version 10.0.3
#r "nuget: Weasyprint.Wrapped, 10.0.3"
#:package Weasyprint.Wrapped@10.0.3
#addin nuget:?package=Weasyprint.Wrapped&version=10.0.3
#tool nuget:?package=Weasyprint.Wrapped&version=10.0.3
Introduction
Wrapper around the weasyprint library which allows you to print html to a pdf file. This package does not require any external software or packages to be installed in order to use weasyprint.
Getting started
Installation
dotnet add package Weasyprint.Wrapped
Usage
You might want to provide the printer class using your DI Container.
- Initialize
This will unzip the needed asset, it is best done during startup procedure. The printer will check if the asset is already unzipped, so the process is only done once (or when the package is upgraded and the version changed).
await new Printer().Initialize();
await new Printer().Print("<html><body><h1>TEST</h1></body></html>");
Warning
There are resources which will be extracted during initialization, the size of it is:
- +-29 MB zipped resource (official standalone windows executable) which will be unzipped in the same folder (for Windows).
- +-26 MB zipped resource (standalone build weasyprint) which will be unzipped in the same folder (for Linux).
Extra resources
References
Thanks to all these great repos and the guys maintaining them!!!
- https://github.com/balbarak/WeasyPrint-netcore
- https://github.com/Kozea/WeasyPrint
- https://wiki.python.org/moin/EmbeddedPython
- https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
Weasyprint CLI
The weasyprint program takes at least two arguments:
weasyprint [options] <input> <output>
input: URL or filename of the HTML input, or - for stdin.output: Filename where output is written, or - for stdout.-e <encoding>, --encoding <encoding>: Force the input character encoding.-s <stylesheet>, --stylesheet <stylesheet>URL or filename for a user CSS stylesheet.
This option can be passed multiple times.
-m <media-type>, --media-type <media-type>Media type to use for @media, defaults to print.-u <base-url>, --base-url <base-url>Base for relative URLs in the HTML input, defaults to the input’s own filename or URL or the current directory for stdin.-a <attachment>, --attachment <attachment>URL or filename of a file to attach to the PDF document. This option can be passed multiple times.--pdf-identifier <pdf-identifier>PDF file identifier.--pdf-variant <pdf-variant>PDF variant to generate.Possible choices: pdf/a-1b, pdf/a-2b, pdf/a-3b, pdf/a-4b, pdf/ua-1.
--pdf-version <pdf-version>PDF version number.--pdf-formsInclude PDF forms.--uncompressed-pdfDo not compress PDF content, mainly for debugging purpose.--custom-metadataInclude custom HTML meta tags in PDF metadata.-p, --presentational-hintsFollow HTML presentational hints.--optimize-imagesOptimize size of embedded images with no quality loss.-j <jpeg-quality>, --jpeg-quality <jpeg-quality>JPEG quality between 0 (worst) to 95 (best).--full-fontsEmbed unmodified font files when possible.--hintingKeep hinting information in embedded fonts.-c <cache-folder>, --cache-folder <cache-folder>Store cache on disk instead of memory, folder is created if needed and cleaned after the PDF is generated.-D <dpi>, --dpi <dpi>Set maximum resolution of images embedded in the PDF.-v, --verboseShow warnings and information messages.-d, --debugShow debugging messages.-q, --quietHide logging messages.--versionPrint WeasyPrint’s version number and exit.-i, --infoPrint system information and exit.-O <optimize-size>, --optimize-size <optimize-size>Deprecated, use other options instead.Possible choices: images, fonts, hinting, pdf, all, none. This option can be passed multiple times.
-h, --help: Show this help message and exit.
Contribute
Create test package and run example
Windows:
.\build-on-windows.ps1
Linux (docker is needed):
.\build-on-linux.ps1
Create package:
cd .\src\Weasyprint.Wrapped\
dotnet pack -p:PackageVersion=0.0.25 --output nupkgs
Update the example project package version (Weasyprint.Wrapped.Example.csproj) and run the example to test it
Error in tests
The following error might be thrown when running the tests on Windows:
(process:13448): GLib-GIO-WARNING **: 17:21:45.816: Unexpectedly, UWP app `Microsoft.OutlookForWindows_1.2023.1114.100_x64__8wekyb3d8bbwe' (AUMId `Microsoft.OutlookForWindows_8wekyb3d8bbwe!Microsoft.OutlookforWindows') supports 1 extensions but has no verbs
Check here for the answer: https://stackoverflow.com/questions/67607643/what-does-this-warning-mean-it-happens-every-time-i-restart-the-node-process#answer-67715630
Building assets
Windows (build-on-windows.ps1 does approximately this)
Basically it does the same thing as the original exe generation of weasyprint does (https://github.com/Kozea/WeasyPrint/blob/main/.github/workflows/exe.yml), but wrapped into a ps1 script and generating a one directory solution instead a one file solution. Here are the steps:
- Installing a msys2 environment (https://www.msys2.org)
- Installing python3 (https://github.com/indygreg/python-build-standalone) and all the dependencies
- Installing weasyprint and pyinstaller using pip
- Use pyinstaller to create a standalone executable for Windows (https://pyinstaller.org/en/stable/usage.html#cmdoption-D)
- Get rid of the python and msys2 files for testing
- Chek the newly created executable to make sure it works and has all the needed dependencies
- Pack the executable into the resources zip for Windows
Linux (build-on-linux.ps1 does approximately this)
- Starting a docker image with an Ubunut 22.04
- Update the image to the latest packages
- Installing python3 and all the dependencies for weasyprint inside the docker image
- Installing weasyprint and pyinstaller using pip
- Use pyinstaller to create a standalone executable for Linux (https://pyinstaller.org/en/stable/usage.html#cmdoption-D)
- Chek the newly created executable in a new clean docker image to make sure it works and has all the needed dependencies
- Pack the executable into the resources zip for Linux
Help
- Check PATH in python
.\python.exe -c "import os; print(*os.environ['PATH'].split(os.pathsep), sep='\n')"
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- CliWrap (>= 3.9.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Weasyprint.Wrapped:
| Package | Downloads |
|---|---|
|
Avae.Printables
Printing for avalonia |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.3 | 76 | 4/9/2026 |
| 10.0.2 | 121 | 4/2/2026 |
| 10.0.1 | 158 | 3/28/2026 |
| 9.0.0 | 139 | 3/12/2026 |
| 8.0.3 | 101 | 3/12/2026 |
| 7.0.1 | 40,816 | 1/5/2025 |
| 6.0.1 | 148,988 | 3/2/2024 |
| 6.0.0 | 1,031 | 3/2/2024 |
| 5.0.0 | 28,875 | 1/1/2024 |
| 4.0.1 | 3,696 | 1/1/2024 |
| 4.0.0 | 42,272 | 6/18/2023 |
| 3.0.4 | 1,288 | 5/24/2023 |
| 3.0.3 | 1,014 | 5/24/2023 |
| 3.0.1 | 57,798 | 12/22/2022 |
| 3.0.0 | 14,880 | 10/21/2022 |
| 2.0.1 | 1,480 | 10/21/2022 |
| 2.0.0 | 18,525 | 7/8/2022 |