該頁面可以包含自動翻譯的文字。

HTML 轉 PDF 功能

您可以使用 Docotic.Pdf 庫將 HTML 轉換為 PDF。 請查看本頁提到的資源,以了解如何根據您的資料建立精美 的 PDF。

HTML 到 PDF 轉換過程

您需要 HTML 到 PDF 外掛程式 來將 HTML 轉換為 PDF。 這是 Docotic.Pdf 庫的免費附加元件。 此附加元件也可在 具有庫二進位檔案的 zip 檔 案 中找到。

Docotic.Pdf 函式庫 9.5.17615-dev HTML 轉 PDF 插件 9.5.17615-dev
回歸測試 14,813 已通過 NuGet 總下載量 4,924,084

API參考

在我們的網站上,我們提供了 HTML 轉 PDF 外掛程式的 API 參 考

文章

請閱讀以下內容,以了解有關 C# 和 VB.NET 程式碼中的 HTML 到 PDF 轉換的更多資訊。

範例程式碼

HTML 到 PDF 轉換這個術語可以描述各種相關任務。以下部分更詳細地描述了這些任務。

HTML 到 PDF C# 轉換

您需要從安裝附加元件開始。使用套件管理器從 NuGet 安裝 HTML 到 PDF 加載項。

Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf

此附加元件提供純非同步 API。我們將其設計為與非同步事件處理程序和非同步方法一起使用。您可以在 Windows 窗體、WPF、ASP.NET 和控制台應用程式中使用該加載項。

C# HTML 轉 PDF 程式碼如下所示:

using var converter = await HtmlConverter.CreateAsync();
var uri = new Uri("https://bitmiracle.com/pdf-library/html-pdf/");
using var pdf = await converter.CreatePdfAsync(uri);
pdf.Save("out.pdf");

該程式碼會建立 HTML 到 PDF 轉換器的實例。然後程式碼使用該實例從 HTML 建立 PDF。您可以繼續使用 PDF 文件,但範例程式碼僅儲存文件。

如果您的控制台應用程式使用舊版本的 C# 並且您沒有非同步 Main - 不用擔心。您仍然可以在應用程式中使用該插件。

以下程式碼顯示如何以常規同步方法將 URL 轉換為 PDF:

Task.Run(async () =>
{
    using var converter = await HtmlConverter.CreateAsync();
    var uri = new Uri("https://bitmiracle.com/pdf-library/html-pdf/");
    using var pdf = await converter.CreatePdfAsync(uri);
    pdf.Save("out.pdf");
}).GetAwaiter().GetResult();

VB.NET 應用程式使用類似的程式碼。下面的程式碼片段展示如何在 VB.NET 中將 HTML 轉換為 PDF。

Task.Run(
    Async Function()
        Using converter = Await HtmlConverter.CreateAsync()
            Dim uri = New Uri("https://bitmiracle.com/pdf-library/html-pdf/")
            Using pdf = Await converter.CreatePdfAsync(uri)
                pdf.Save("out.pdf")
            End Using
        End Using
    End Function
).GetAwaiter().GetResult()

從我們的 GitHub 儲存庫下載完整的測試專案:

在 C# 中將 HTML 字串轉換為 PDF

常見任務之一是在 C# 或 VB.NET 應用程式中從 HTML 產生 PDF。這個過程可以從應用程式使用資料庫中的資料填充的範本開始。網站使用者建立模板、資料或兩者的情況並不少見。

自動產生或上傳的 HTML 可以採用檔案或帶有程式碼的字串的形式。此附加元件提供了一種方法接受檔案路徑。使用C#程式碼將HTML檔案轉換為PDF的方法。以下程式碼適用於有字串的情況。

using var converter = await HtmlConverter.CreateAsync();

var html = "<body><br><br><br><h1>Hello, World</h1></body>";
using var pdf = await converter.CreatePdfFromStringAsync(html);
pdf.Save("out.pdf");

HTML 可以包含對圖片、腳本和 CSS 檔案的相對引用。要正確轉換此類程式碼,您需要使用轉換選項。以下是如何使用選項指定基本 URL:

using var converter = await HtmlConverter.CreateAsync();

var incompleteHtml = "<img src=\"/images/team.svg\"></img>";
var options = new HtmlConversionOptions();
options.Load.BaseUri = new Uri("https://bitmiracle.com/");
using var pdf = await converter.CreatePdfFromStringAsync(incompleteHtml, options);
pdf.Save("out.pdf");

我們的 GitHub 儲存庫包含完整的測試項目

轉換前執行 JavaScript

附加 API 提供了一種在轉換之前運行 JS 程式碼的方法。程式碼可以動態產生或修改HTML內容。例如,它可以切換元素,或進行動態內容載入。

以下程式碼顯示如何延遲 HTML 到 PDF 的轉換,直到 JavaScript 完成。

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
var js = @"document.body.style.backgroundColor = 'green';";
options.Start.SetStartAfterScriptRun(js);

var url = new Uri("https://google.com");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

上面的程式碼片段使用了一個非常簡單的程式碼來說明該方法。有關更真實的範例,請查看我們的 GitHub 儲存庫中的 相應的範例應用程式。該應用程式展示瞭如何處理動態加載其內容的頁面。應用程式中的 JavaScript 程式碼會捲動頁面,直到不再有新內容。之後,就會轉換為 PDF。

忽略 SSL 錯誤

當發送安全性請求來載入 HTML 時,該附加元件會檢查驗證網站身分並啟用加密連線的 SSL 憑證是否有效且可信任。

預設情況下,如果 HTML 到 PDF 轉換器因任何原因不信任證書,則該附加元件將引發異常。如果您了解接受不受信任的憑證的風險,您可以告訴插件繞過檢查。

var engineOptions = new HtmlEngineOptions
{
    IgnoreSslErrors = true
};
using var converter = await HtmlConverter.CreateAsync(engineOptions);

var url = new Uri("https://self-signed.badssl.com/");
using var pdf = await converter.CreatePdfAsync(url);
pdf.Save("out.pdf");

對於完整程式碼,請前往 Docotic.Pdf 範例儲存庫。

為受保護的頁面提供密碼

有些網頁需要身份驗證才能存取。當您造訪需要 HTTP 驗證的安全 URL 時,瀏覽器會要求您提供使用者名稱和密碼。

使用轉換選項,您可以指示 API 為需要登入的網頁提供憑證。

此 C# 程式碼展示如何將受密碼保護的 HTML 轉換為 PDF

using var converter = await HtmlConverter.CreateAsync();
var url = new Uri("http://httpbin.org/basic-auth/foo/bar");

var options = new HtmlConversionOptions();
options.Authentication.SetCredentials("foo", "bar");

using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

在範例儲存庫中找到完整工作範例

轉換前等待

如果頁面在載入後持續更新一段時間,則延遲 HTML 到 PDF 的轉換可能會很有用。在處理由 JavaScript 或 AJAX 呼叫產生的動態內容時,經常會發生這種情況。

Acid 3 測試是一個完美的頁面範例,可以從轉換前的延遲中受益。此測試執行大量檢查來評估瀏覽器正確呈現複雜網頁的能力。這些檢查需要時間。嘗試更改以下程式碼中的等待時間,看看它如何影響轉換結果。

var options = new HtmlConversionOptions();
options.Start.SetStartAfterDelay(10 * 1000);

using var converter = await HtmlConverter.CreateAsync();
var url = new Uri("http://acid3.acidtests.org/");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

上面的程式碼顯示如何將 HTML 延遲轉換為 PDF。雖然額外的時間有助於獲得更好的結果,但請注意,增加延遲可能會影響效能。延遲不足會對轉換品質產生負面影響。使用延遲的另一種方法是使用腳本,該腳本將執行直到頁面準備就緒。

您可以在 Docotic.Pdf 範例儲存庫中取得完整測試項目

HTML 到 PDF API 可以在產生的頁面上新增可重複的頁尾/頁首區塊。 Converter 根據轉換選項中指定的 HTML 範本建立區塊。我們建議對模板內的圖像使用內聯樣式和資料 URI。

轉換器將頁首和頁尾放置在頁邊距內。由於頁邊距較小,頁首和頁尾的內容可能不可見。我們建議明確指定頂部和底部邊距。大小應分別與頁首和頁尾的大小相符。

了解如何將 HTML 變更為 PDF 並新增頁首和頁尾

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
options.Page.HeaderTemplate = File.ReadAllText("header-template.html");
options.Page.MarginTop = 50;

options.Page.FooterTemplate = File.ReadAllText("footer-template.html");
options.Page.MarginBottom = 50;

var url = new Uri("https://www.iana.org/numbers");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

轉換器可以在範本內的預定義位置插入轉換日期和文件標題等值。查看 HeaderTemplate 和 FooterTemplate 屬性的描述以取得更多資訊。

完整的測試項目和模板程式碼位於 Docotic.Pdf 範例儲存庫中。

量表內容

處理具有寬版佈局的網頁時,您可以增加輸出 PDF 大小或縮小內容以適合 PDF 頁面。為了更好地定位縮放後的內容,您還可以設定邊距。

縮放良好的 PDF 可提供更好的閱讀體驗,因為讀者無需放大或縮小即可正確查看內容。如果 HTML 文件因為字體太小而難以閱讀,您可以放大內容。

預設情況下,API 產生頁面大小等於 A4 的 PDF。沒有邊距,也沒有放大。使用轉換選項,您可以變更這些設定。

了解從 HTML 產生 PDF 時如何設定縮放係數和邊距

using var converter = await HtmlConverter.CreateAsync();

var html = "<html><head><style>body { background-color: coral; margin-top: 100px;}</style></head>" +
"<body><h1>Did you notice the margins and the scale?</h1></body></html>";

var options = new HtmlConversionOptions();
options.Page.MarginLeft = 10;
options.Page.MarginTop = 20;
options.Page.MarginRight = 30;
options.Page.MarginBottom = 40;
options.Page.Scale = 1.5;

using var pdf = await converter.CreatePdfFromStringAsync(html, options);
pdf.Save("out.pdf");

Docotic.Pdf 範例儲存庫包含完整專案

將 HTML 疊加到現有 PDF 上

有時您會想使用現有的 PDF 作為轉換結果的背景。這可以透過 Docotic.Pdf 和附加元件來實現。

此方法涉及從 HTML(覆蓋內容)建立新的 PDF,然後將其與現有 PDF 合併。最終文件將包括原始內容和新的覆蓋內容。下面是說明該方法的程式碼。

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
options.Page.SetSizeInches(4.13, 5.83);

string htmlCode =
    "<div style=\"position: absolute; top: 270px; right: 100px;\">" +
    "I would like to put this here</div>";
using var htmlPdf = await converter.CreatePdfFromStringAsync(htmlCode, options);

using var pdf = new PdfDocument("pdf-to-merge-with.pdf");
var xObj = pdf.CreateXObject(htmlPdf.Pages[0]);

pdf.Pages[0].Canvas.DrawXObject(xObj, 0, 0);
pdf.Save("out.pdf");

指定覆蓋層的頁面大小非常重要。通常,該大小應等於您要覆蓋的頁面的大小。然後您需要產生帶有覆蓋內容的新 PDF。請注意,預設情況下背景是透明的。如果需要,您可以透過在轉換之前執行腳本 來變更背景。

現在是開啟現有 PDF 的時候了。該文件應從產生的 PDF 中的頁面建立 XObject。然後程式碼將 XObject 繪製在現有頁面的頂部。

完整的帶有範例來源 PDF 的測試項目 位於 Docotic.Pdf 範例儲存庫中。

在 C# 中將 SVG 轉換為 PDF

使用 HTML 到 PDF 轉換器從具有可縮放向量圖形的圖像建立 PDF。以下程式碼顯示了執行轉換最簡單的方法:

using var converter = await HtmlConverter.CreateAsync();
var uri = new Uri("https://bitmiracle.com/images/team.svg");
using var pdf = await converter.CreatePdfAsync(uri);
pdf.Save("out.pdf");

轉換器使用 SVG 影像中指定的寬度和/或高度來產生正確尺寸的高品質輸出。

您可以產生使用自訂選項的不同大小的輸出。可以將轉換後的圖像加入到另一個PDF

請參閱 GitHub 上的完整測試專案