跳過到頁腳內容
PDF工具

如何在C++中將HTML轉PDF

在許多應用程式中,將 HTML 檔案或內容轉換為 PDF 頁面是一項非常有價值的功能。 在 C++ 中,從頭開始建立一個用於產生 HTML 轉 PDF 格式檔案的應用程式可能非常繁瑣。 在本文中,我們將探討如何使用 wkhtmltopdf 函式庫在 C++ 中將 HTML 轉換為 PDF。

WKHTMLTOPDF庫

wkhtmltopdf是一個開源命令列工具,可將 HTML 純文字頁面無縫轉換為高品質的 PDF 文件。 利用 C++ 程式中的對應功能,我們可以輕鬆地將 HTML 字串內容轉換為 PDF 格式。 讓我們深入了解使用 wkhtmltopdf 庫在 C++ 中將 HTML 頁面轉換為 PDF 的逐步過程。

先決條件

若要在 C++ 中建立 HTML 到 PDF 檔案轉換器,請確保符合以下先決條件:

  1. 您的系統上已安裝 C++ 編譯器,例如 GCC 或 Clang。
  2. 已安裝wkhtmltopdf 庫。 您可以從wkhtmltopdf 官方網站下載最新版本,並按照您的作業系統說明進行安裝。
  3. 具備 C++ 程式設計基礎。

在 Code::Blocks 中建立一個 C++ HtmltoPdf 專案

若要在 Code::Blocks 中建立 C++ PDF 轉換項目,請依照下列步驟操作:

  1. 開啟 Code::Blocks IDE。
  2. 前往"檔案"選單,選擇"新建",然後選擇"專案"以開啟"新建專案"精靈。
  3. 在"新建專案"精靈中,選擇"控制台應用程式"。
  4. 選擇 C++ 語言。
  5. 設定項目標題和儲存位置。 點選"下一步"繼續。
  6. 選擇適當的 C++ 編譯器和建置目標,例如 Debug 或 Release。 點擊"完成"創建項目。

設定搜尋目錄

為了確保 Code::Blocks 能夠找到必要的頭文件,我們需要設定搜尋目錄:

  1. 點選選單列中的"項目"選單,然後選擇"建置選項"。 請務必選擇"調試"。
  2. 在"建置選項"對話方塊中,選擇"搜尋目錄"標籤。
  3. 在"編譯器"標籤下,按一下"新增"按鈕。
  4. 瀏覽至wkhtmltox頭檔所在的目錄(例如, C:\Program Files\wkhtmltopdf\include ),然後選擇它。
  5. 最後,按一下"確定"關閉對話框。

如何在 C++ 中將 HTML 轉換為 PDF:圖 1 - 搜尋目錄

圖書館連結

要連結到wkhtmltox庫,請按照以下步驟操作:

  1. 再次點選選單列中的"項目"選單,然後選擇"建置選項"。 請務必選擇"調試"。
  2. 在"產生選項"對話方塊中,選擇"連結器設定"標籤。
  3. 在"連結庫"標籤下,按一下"新增"按鈕。
  4. 瀏覽至wkhtmltox庫檔案所在的目錄(例如, C:\Program Files\wkhtmltopdf\lib ),然後選擇對應的庫檔案。
  5. 點擊"開啟"將庫新增到您的專案中。
  6. 最後,按一下"確定"關閉對話方塊。

如何在 C++ 中將 HTML 轉換為 PDF:圖 2 - 連結庫

如何在 C++ 中輕鬆將 HTML 轉換為 PDF

步驟 1:包含用於轉換 HTML 檔案的程式庫

首先,請在您的 C++ 程式中包含必要的頭文件,以使用 wkhtmltopdf 庫的功能。 請在 main.cpp 原始碼檔案的開頭包含以下頭文件,如下例所示:

#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h>
#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h>
C++

步驟 2:初始化轉換器

要將 HTML 轉換為 PDF,我們需要初始化 wkhtmltopdf 轉換器。 程式碼如下:

// Initialize the wkhtmltopdf library
wkhtmltopdf_init(false);

// Create global settings object
wkhtmltopdf_global_settings* gs = wkhtmltopdf_create_global_settings();

// Create object settings object
wkhtmltopdf_object_settings* os = wkhtmltopdf_create_object_settings();

// Create the PDF converter with global settings
wkhtmltopdf_converter* converter = wkhtmltopdf_create_converter(gs);
// Initialize the wkhtmltopdf library
wkhtmltopdf_init(false);

// Create global settings object
wkhtmltopdf_global_settings* gs = wkhtmltopdf_create_global_settings();

// Create object settings object
wkhtmltopdf_object_settings* os = wkhtmltopdf_create_object_settings();

// Create the PDF converter with global settings
wkhtmltopdf_converter* converter = wkhtmltopdf_create_converter(gs);
C++

步驟 3:設定 HTML 內容

現在,讓我們提供需要轉換為 PDF 的 HTML 內容。 您可以載入 HTML 文件,也可以直接提供字串。

std::string htmlString = "<html><body><h1>Hello, World!</h1></body></html>";

// Add the HTML content to the converter
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
std::string htmlString = "<html><body><h1>Hello, World!</h1></body></html>";

// Add the HTML content to the converter
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
C++

步驟 4:將 HTML 轉換為 PDF

轉換器和 HTML 內容準備好後,我們就可以開始將 HTML 轉換為 PDF 檔案了。請使用以下程式碼片段:

// Perform the actual conversion
if (!wkhtmltopdf_convert(converter)) {
    std::cerr << "Conversion failed!" << std::endl;
}
// Perform the actual conversion
if (!wkhtmltopdf_convert(converter)) {
    std::cerr << "Conversion failed!" << std::endl;
}
C++

步驟 5:將輸出獲取為記憶體緩衝區

使用 wkhtmltopdf_get_output 函數,我們可以將現有的 PDF 資料作為記憶體緩衝區流取得。 它也會傳回 PDF 的長度。 以下範例將執行此任務:

// Retrieve the PDF data in memory buffer
const unsigned char* pdfData;
int pdfLength = wkhtmltopdf_get_output(converter, &pdfData);
// Retrieve the PDF data in memory buffer
const unsigned char* pdfData;
int pdfLength = wkhtmltopdf_get_output(converter, &pdfData);
C++

步驟 6:儲存 PDF 文件

轉換完成後,我們需要將產生的 PDF 檔案儲存到磁碟。 指定要儲存 PDF 檔案的檔案路徑。 然後使用輸出文件流,以二進位模式開啟該文件,並將 pdfData 寫入其中。 最後,關閉文件:

const char* outputPath = "file.pdf";
std::ofstream outputFile(outputPath, std::ios::binary);

// Write the PDF data to the file
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength);
outputFile.close();
const char* outputPath = "file.pdf";
std::ofstream outputFile(outputPath, std::ios::binary);

// Write the PDF data to the file
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength);
outputFile.close();
C++

步驟 7:清理

將 HTML 轉換為 PDF 後,必須清理 wkhtmltopdf 指派的資源:

// Clean up the converter and settings
wkhtmltopdf_destroy_converter(converter);
wkhtmltopdf_destroy_object_settings(os);
wkhtmltopdf_destroy_global_settings(gs);

// Deinitialize the wkhtmltopdf library
wkhtmltopdf_deinit();

std::cout << "PDF saved successfully." << std::endl;
// Clean up the converter and settings
wkhtmltopdf_destroy_converter(converter);
wkhtmltopdf_destroy_object_settings(os);
wkhtmltopdf_destroy_global_settings(gs);

// Deinitialize the wkhtmltopdf library
wkhtmltopdf_deinit();

std::cout << "PDF saved successfully." << std::endl;
C++

步驟 8:執行程式碼並產生 PDF 文件

現在,建立專案並使用 F9 執行程式碼。輸出結果將產生並保存在專案資料夾中。 產生的PDF文件如下:

如何在 C++ 中將 HTML 轉換為 PDF:圖 3 - PDF 輸出

HTML File to PDF File in C

IronPDF

IronPDF HTML 到 PDF 轉換庫是一個強大的.NET和.NET Core C# 庫,它允許開發人員輕鬆地從 HTML 內容產生 PDF 文件。 它提供了一個簡單直覺的 API,簡化了將 HTML 網頁轉換為 PDF 的過程,使其成為各種應用程式和用例的熱門選擇。

IronPDF的主要優勢之一是其多功能性。 它不僅支援轉換簡單的 HTML 文件,還支援轉換帶有 CSS 樣式、 JavaScript互動甚至動態內容的複雜網頁。 此外,您還可以開發不同的 PDF 轉換器,並快速存取其轉換方法。

以下是使用 C# 中的IronPDF將 HTML 字串轉換為 PDF 的程式碼範例:

using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create PDF content from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

// Export to a file or Stream
pdf.SaveAs("output.pdf");
using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create PDF content from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

// Export to a file or Stream
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

PDF 輸出結果:

如何在 C++ 中將 HTML 轉換為 PDF:圖 4 - IronPDF輸出

有關如何將不同的 HTML 文件、網頁 URL 和圖像轉換為 PDF 的更多詳細信息,請訪問此HTML 轉 PDF 程式碼範例

使用IronPDF,在.NET Framework語言中,從 HTML 內容產生 PDF 檔案變得非常簡單。 它直覺的 API 和豐富的功能集使其成為需要在 C# 專案中將HTML 轉換為 PDF 的開發人員的寶貴工具。 無論是產生報告、發票,或是任何其他需要精確的 HTML 轉 PDF 的文檔, IronPDF都是一個可靠且有效率的解決方案。

IronPDF可免費用於開發用途,但用於商業用途則需獲得許可。 它還提供IronPDF 全部功能的免費試用版,供商業用途測試其全部功能。 您可以從IronPDF下載該軟體。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me