HOWTO · Csharp
使用 C# 將 HTML 轉換為 PDF
使用 HtmlRenderer.PdfSharp 在 C# 中將 HTML 字串轉換為 A4 PDF。
本頁內容
在 C# 專案中使用 HtmlRenderer.PdfSharp,將 HTML 字串轉譯為 PDF 頁面,然後將文件儲存到可寫入的路徑。此套件將 HTML 轉譯器連接到 PdfSharp。基本樣式可能會被轉譯,而複雜的版面配置和進階 CSS 可能與瀏覽器輸出不同。
HtmlRenderer.PdfSharp 入門
使用 Visual Studio 的 NuGet 套件管理員安裝 HtmlRenderer.PdfSharp,或從包含專案檔案的目錄執行 dotnet add package HtmlRenderer.PdfSharp。NuGet 會選取相容的套件版本。如果您的專案需要固定的版本,請在選擇之前,檢查該版本的目標框架是否與您的專案相符。
以套件為基礎的轉換需要在您的應用程式專案中包含 NuGet 組件。其 API 使用 TheArtOfDev.HtmlRenderer.PdfSharp 中的 PdfGenerator、PdfSharp.Pdf 中的 PdfDocument,以及 PdfSharp 中的 PageSize.A4。請將這些套件參考保留在建置轉換器的專案中。
將 HTML 字串轉換為 PDF
下列獨立的 C# 程式使用已安裝的套件執行轉換:它建立一個 PdfDocument,將 HTML 字串連同 PageSize.A4 傳遞給 PdfGenerator.AddPdfPages,將文件儲存到輸出路徑,並處置該文件。
using System;
using PdfSharp;
using PdfSharp.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;
class Program
{
static void Main()
{
string html = "<html><body><h1>Monthly report</h1><p>Revenue increased this month.</p></body></html>";
string outputPath = "monthly-report.pdf";
using (PdfDocument document = new PdfDocument())
{
PdfGenerator.AddPdfPages(document, html, PageSize.A4);
document.Save(outputPath);
}
Console.WriteLine("Saved " + outputPath);
}
}
Saved monthly-report.pdf
請在已安裝 HtmlRenderer.PdfSharp 的專案中執行此程式。在您的應用程式中,請使用處理程序可寫入的目的地;相對檔案名稱會從目前工作目錄解析。當您需要固定的目的地時,請使用絕對路徑。
轉譯包含 CSS 和圖片的 HTML
在將 HTML 字串傳遞給產生器之前,請在其中包含 <style> 區塊和圖片元素。HtmlRenderer.PdfSharp 可以轉譯基本 CSS,但其輸出不保證與瀏覽器相符。請檢查使用進階選取器、自訂字型或複雜定位的文件。
圖片來源在轉換期間必須可供應用程式使用。外部圖片 URL 需要該處理程序具有網路存取權。對於本機圖片,請使用您專案中的套件版本所支援的來源格式和路徑,並確保處理程序可以讀取它。如果圖片遺失,請檢查其來源是否正確且可存取。現有的螢幕截圖無法針對此範例進行確認,因此予以省略。
限制與疑難排解
將 HTML 轉譯為 PDF 與在瀏覽器中開啟同一頁面不同。請保持標記格式良好,使用轉譯器支援的樣式,並檢查產生的 PDF 是否有版面配置變更。複雜的版面配置和進階 CSS 可能不會如預期般轉譯。
如果 PDF 遺失,請檢查輸出路徑以及應用程式對其目錄的寫入存取權。如果樣式遺失,請縮減 HTML 並分階段加回 CSS。如果圖片遺失,請確認其 URL 或本機來源在轉換期間可供使用。這些檢查有助於區分路徑或資源存取問題與轉譯差異。
FAQ
- HtmlRenderer.PdfSharp 有什麼功能? 它使用 PdfSharp 將 HTML 內容轉譯為 PDF 頁面,讓 C# 應用程式可以儲存由標記產生的文件。
- 我可以使用 CSS 嗎? 支援基本 CSS。進階 CSS 和複雜的版面配置看起來可能與瀏覽器不同,因此請檢查產生的 PDF。
- 圖片如何運作? 圖片來源在轉換期間必須可供轉譯器使用。外部 URL 需要應用程式具有網路存取權;本機來源需要處理程序可讀取的路徑。
- 我可以自訂 PDF 嗎? 透過 PDF 產生 API 設定頁面大小,並調整 HTML 和支援的樣式。請查看 API 以了解您已安裝版本中的其他選項。
- 對於複雜的 HTML,我應該有什麼預期? 轉譯器支援 HTML 和 CSS 的子集。請試用您的實際文件,並在其外觀與您的意圖不同時簡化或調整標記。