什么是 ChromiumHtmlToPdf? ChromiumHtmlToPdf 是一个 100% 纯托管的 C# .NETStandard 2.0 库和 .NET 8 控制台应用程序,也适用于 Linux 和 macOS。它利用 Google Chrome 或 Microsoft Edge 浏览器将 HTML 转换为 PDF 格式,(MIT 许可证授权)。
从 4.0 版本开始,该库已完全支持异步操作,但仍然可以选择不使用异步功能。
一个替代 wkHtmlToPdf 的工具。虽然 wkHtmlToPdf 是一个很棒的工具,但该项目已在 GitHub 上归档,不再添加新功能,且与 HTML5 的兼容性也不够完美。
安装使用 在 Visual Studio 的包管理器控制台中,输入以下命令:
Install-Package ChromeHtmlToPdf
从代码中转换文件或网址 using ChromiumHtmlToPdfLib; using ChromiumHtmlToPdfLib.Settings; namespace ChromeHtmlToPdfDemo { internal class Program { static void Main ( string [] args ) { // 创建 PageSettings 实例 var pageSettings = new PageSettings(); // 创建输入 URI var inputUri = new ConvertUri( "https://www.dotnetshare.com/" ); // 创建输出流(例如,保存到文件) using ( var outputStream = new FileStream( @"dotnetshare.pdf" , FileMode.Create, FileAccess.Write)) { // 创建 Converter 实例 using ( var converter = new Converter()) { // 调用 ConvertToPdf 方法 converter.ConvertToPdf(inputUri, outputStream, pageSettings); } } } } }
当然也可以使用异步方式
在 Linux 或 macOS 上安装 安装 Chrome 关于如何在 Linux 上安装 Chrome,请参阅此链接:
https://support.google.com/chrome/a/answer/9025903?hl=en
关于如何在 macOS 上安装 Chrome,请参阅此链接:
https://support.google.com/chrome/a/answer/7550274?hl=en
在 Linux Ubuntu 上安装 Chrome 的示例 wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' sudo apt-get update sudo apt-get install google-chrome-stable google-chrome --version google-chrome --no-sandbox --user-data-dir
问题 在 Linux 或 Docker 容器中使用该库 为了使库正常工作, --no-sandbox
标志将默认设置(在 Windows 上不会设置此标志)。该库会自动检测您运行代码的操作系统,并在需要时设置该标志。如果由于某种原因您遇到转换错误,请检查是否设置了该标志,如果没有,则手动添加它。
converter.AddChromiumArgument( "--no-sandbox" );
当 Chrome 在 Docker 容器中因未知原因崩溃时 在大多数桌面 Linux 发行版中, /dev/shm
分区的默认大小足够大。然而,在许多使用 Docker 容器的云提供商(如 Google App Engine Flexible Environment)或 Heroku 上, /dev/shm
的默认大小明显较小(分别为 64MB 和 5MB)。在这些平台上,无法更改 /dev/shm
的大小,这使得使用 Chrome 变得困难甚至不可能,尤其是对于那些希望利用其新的无头模式的用户。
如果无法更改分区大小,则添加 --disable-dev-shm-usage
标志,告知 Chrome 不要使用该分区。
converter.AddChromiumArgument( "--disable-dev-shm-usage" );
阅读原文:原文链接
该文章在 2025/3/24 17:09:09 编辑过