跳至頁尾內容
.NET幫助

Azure Tables(對開發者如何理解的工作)

PDF(可攜式文件格式)文件被廣泛用於在不同平台上以一致的格式分享和保存文件。 在本文中,我們將探討如何使用wkhtmltopdf程式庫在C++中生成PDF文件。 這是一個開源命令行工具,用於將HTML內容轉換成PDF文件。 藉由利用這個程式庫的力量,我們可以在C++應用程式中從HTML內容程式化建立PDF文件。

wkhtmltopdf程式庫

wkhtmltopdf是一個開源命令行工具和渲染引擎,將HTML網頁或HTML內容轉換為PDF文件。 它利用WebKit渲染引擎解析和渲染HTML、CSS和JavaScript,然後根據渲染的內容生成PDF文件。

"wkhtmltopdf C++ Library"(也稱為"wkhtmltopdf C API")。 這個程式庫為wkhtmltopdf命令行工具提供了C++介面,使您能夠直接在C++應用程式中從HTML內容建立PDF文件。 讓我們挖掘一下使用wkhtmltopdf程式庫在C++中將HTML轉換為PDF的逐步過程。

先決條件

要在C++中建立PDF文件,我們需要以下內容:

  1. 在系統上安裝的C++編譯器,例如GCC或Clang。 您可以使用任何支持C++編程的IDE。
  2. 已下載並安裝的wkhtmltopdf程式庫。 您可以從官方wkhtmltopdf網站下載最新版本並按照操作系統的說明進行安裝。
  3. 基本的C++編程知識。

C++在Code::Blocks中建立PDF專案

在Code::Blocks中建立一個專案,然後按照以下步驟將程式庫資料夾和文件連結起來。如果您使用其他IDE,選項可能會有所不同,但您需要在專案中引用已下載的程式庫以使其正常工作。

1. 在搜尋目錄中新增include資料夾

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

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

 如何在C++中建立PDF文件:圖1

2. 在連結設置中連結程式庫

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

  1. 再次點選選單欄中的"專案"選單,然後選擇"構建選項"。 確保選擇"除錯"。
  2. 在"構建選項"對話框中,選擇"連結器設置"選項卡。
  3. 在"連結程式庫"選項卡下,點選"新增"按鈕。
  4. 瀏覽到<wkhtmltox>程式庫文件所在的目錄(例如,C:\Program Files\wkhtmltopdf\lib),然後選擇適當的程式庫文件。
  5. 點選"開啟"將程式庫新增到專案中。
  6. 最後,點選"確定"以關閉對話框。

 如何在C++中建立PDF文件:圖2

使用wkhtmltopdf在C++中建立PDF的步驟

1. 包含必要的程式庫

開始之前,首先我們將包括必要的標頭文件以在C++程式中利用wkhtmltopdf程式庫的功能。 在您的main.cpp源程式碼文件的開頭包括以下標頭文件:

#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h> // Include wkhtmltopdf library headers
#include <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h> // Include wkhtmltopdf library headers
C++

2. 禁用GUI組件

如果您不使用GUI,則需要禁用它以避免錯誤。 程式碼如下所示:

wkhtmltopdf_init(false); // Initialize the wkhtmltopdf library in non-GUI mode
wkhtmltopdf_init(false); // Initialize the wkhtmltopdf library in non-GUI mode
C++

3. 初始化設置和轉換器

接下來,我們需要初始化全域和物件設置指標,然後初始化wkhtmltopdf轉換器。

wkhtmltopdf_global_settings* gs = wkhtmltopdf_create_global_settings();
wkhtmltopdf_object_settings* os = wkhtmltopdf_create_object_settings();
wkhtmltopdf_converter* converter = wkhtmltopdf_create_converter(gs);
wkhtmltopdf_global_settings* gs = wkhtmltopdf_create_global_settings();
wkhtmltopdf_object_settings* os = wkhtmltopdf_create_object_settings();
wkhtmltopdf_converter* converter = wkhtmltopdf_create_converter(gs);
C++

4. 新增PDF內容

現在,讓我們建立一個HTML字串以填充一些內容到我們新建立的PDF文件中。 程式碼如下所示:

std::string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
std::string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
C++

5. 將HTML字串轉換為PDF文件

wkhtmltopdf提供了一個轉換器方法來將HTML內容轉換為PDF。 這是程式碼片段:

wkhtmltopdf_convert(converter); // Converts HTML content to PDF
wkhtmltopdf_convert(converter); // Converts HTML content to PDF
C++

6. 以記憶體緩衝讀取輸出

使用wkhtmltopdf_get_output函式,我們可以獲得PDF資料作為記憶體緩衝流。 它還會返回PDF的長度。 以下範例將執行此操作:

const unsigned char* pdfData;
int pdfLength = wkhtmltopdf_get_output(converter, &pdfData); // Get PDF data and length
const unsigned char* pdfData;
int pdfLength = wkhtmltopdf_get_output(converter, &pdfData); // Get PDF data and length
C++

7. 保存PDF文件

現在wkhtmltopdf_converter的字元流。 要保存為PDF文件,首先,我們將指定我們希望保存PDF的文件路徑。 然後,使用輸出文件流,我們用二進制模式打開該文件,並通過使用pdfData寫入其中。 最後,我們關閉該文件。

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

8. 釋放記憶體

在成功建立PDF文件後,清理wkhtmltopdf分配的資源非常重要,否則會導致記憶體洩漏。

wkhtmltopdf_destroy_converter(converter); // Destroy the converter
wkhtmltopdf_destroy_object_settings(os);  // Destroy object settings
wkhtmltopdf_destroy_global_settings(gs);  // Destroy global settings
wkhtmltopdf_deinit();                     // Deinitialize the library

std::cout << "PDF created successfully." << std::endl; // Inform the user
wkhtmltopdf_destroy_converter(converter); // Destroy the converter
wkhtmltopdf_destroy_object_settings(os);  // Destroy object settings
wkhtmltopdf_destroy_global_settings(gs);  // Destroy global settings
wkhtmltopdf_deinit();                     // Deinitialize the library

std::cout << "PDF created successfully." << std::endl; // Inform the user
C++

9. 執行程式碼並生成PDF文件

現在,構建該專案並使用F9執行該程式碼。輸出被生成並保存在專案資料夾中。 生成的PDF如下:

 如何在C++中建立PDF文件:圖3

Create PDF File in C

IronPDF

IronPDF是一個.NET C# PDF程式庫,允許開發者輕鬆地從HTML建立PDF文件。 它提供了直觀的API,簡化了從HTML生成PDF文件的過程。

IronPDF在處理PDF方面顯得非常強大和多功能。 它不僅能從簡單的HTML文件建立PDF,還能處理包含CSS樣式、JavaScript交互,甚至動態內容的複雜網頁。 此外,您可以快速存取其轉換方法來開發不同的PDF轉換器。

這是一段使用IronPDF建立PDF的範例程式碼,利用HTML字串到PDF轉換

using IronPdf;

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

// Create a PDF 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 a PDF 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 a PDF 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

我們建立一個ChromePdfRenderer實例來將HTML內容渲染為PDF。 我們在RenderHtmlAsPdf方法並傳入HTML字串。 這會生成PDF文件,然後我們使用SaveAs方法保存PDF文件。

 如何在C++中建立PDF文件:圖4

有關如何使用IronPDF從各種資源建立PDF的更多詳細資訊,請存取這個IronPDF程式碼範例頁面。

結論

在本文中,我們探討了使用wkhtmltopdf C++ Library在C++中生成PDF,並學習了如何使用IronPDF在C#中生成PDF文件。

有了IronPDF,從HTML內容生成PDF文件變成了一個在.NET Framework語言中的簡單任務。 其豐富的功能集使其成為開發者在C#專案中需要HTML到PDF轉換的有價值工具。 無論是生成報告、發票,或任何其他需要準確HTML到PDF轉換的文件,IronPDF都是一個可靠且有效的解決方案。

IronPDF在開發用途中是免費的,但若用於商業用途則需要授權。 它還提供了一個免費試用來測試其完整功能。 下載IronPDF並親自試用。

Curtis Chau
技術作家

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

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

Iron 支援團隊

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