跳至頁尾內容
PDF工具

如何將PDF保存為圖像文件

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

wkhtmltopdf程式庫

wkhtmltopdf是一個開源命令行工具,可無縫地將HTML純文字頁面轉換成高品質PDF文件。 通過在C++程式中利用其功能,我們可以輕鬆地將HTML字串內容轉換為PDF格式。 讓我們深入了解在C++中使用wkhtmltopdf程式庫進行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. 前往"File"選單,選擇"New",然後選擇"Project"以打開新的專案精靈。
  3. 在新的專案精靈中,選擇"Console Application"。
  4. 選擇C++語言。
  5. 設定專案標題和您希望保存的位置。 點擊"Next"繼續。
  6. 選擇適當的C++編譯器和構建目標,例如Debug或Release。 點擊"Finish"以建立專案。

設置搜尋目錄

為了確保Code::Blocks可以找到必要的標頭文件,我們需要設置搜尋目錄:

  1. 點選選單欄中的"專案"選單,然後選擇"構建選項"。 確保選擇"除錯"。
  2. 在"構建選項"對話框中,選擇"搜尋目錄"選項卡。
  3. 在"編譯器"選項卡下,點選"新增"按鈕。
  4. 瀏覽到標頭文件所在的目錄(例如,C:\Program Files\wkhtmltopdf\include),然後選擇它。
  5. 最後,點選"確定"以關閉對話框。

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

連結程式庫

要對程式庫進行連結,請按照以下步驟操作:

  1. 再次點擊選單欄中的"Project"選單,然後選擇"Build options"。 確保選擇"除錯"。
  2. 在"構建選項"對話框中,選擇"連結器設置"選項卡。
  3. 在"連結程式庫"選項卡下,點選"新增"按鈕。
  4. 瀏覽到程式庫文件所在的目錄(例如,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-to-PDF轉換程式庫是一個強大的.NET和.NET Core C#程式庫,可讓開發人員輕鬆地將HTML內容生成PDF文件。 它提供了一個簡單且直觀的API,簡化了將HTML網頁轉換為PDF的過程,使其成為各種應用程式和使用案例的熱門選擇。

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

以下是使用IronPDF在C#中將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");
Imports IronPdf

' Instantiate Renderer
Private renderer = New ChromePdfRenderer()

' Create PDF content from an HTML string using C#
Private 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,從HTML內容生成PDF文件變成了一個在.NET Framework語言中的簡單任務。 其直觀的API和廣泛的功能集使其成為開發人員在其C#專案中需要轉換HTML到PDF時的寶貴工具。 無論是生成報告、發票,或任何其他需要準確HTML到PDF轉換的文件,IronPDF都是一個可靠且有效的解決方案。

IronPDF可免費用於開發目的,但商業用途需獲得授權。 它還提供IronPDF完整功能的免費試用,供商業用途測試其完整功能。 您可以從下載IronPDF獲得軟體。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話