什么是 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 編輯過