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文件,我們需要以下內容:
- 在系統上安裝的C++編譯器,例如GCC或Clang。 您可以使用任何支持C++編程的IDE。
- 已下載並安裝的wkhtmltopdf程式庫。 您可以從官方wkhtmltopdf網站下載最新版本並按照操作系統的說明進行安裝。
- 基本的C++編程知識。
C++在Code::Blocks中建立PDF專案
在Code::Blocks中建立一個專案,然後按照以下步驟將程式庫資料夾和文件連結起來。如果您使用其他IDE,選項可能會有所不同,但您需要在專案中引用已下載的程式庫以使其正常工作。
1. 在搜尋目錄中新增include資料夾
為了確保Code::Blocks可以找到必要的標頭文件,我們需要設置搜尋目錄。
- 點選選單欄中的"專案"選單,然後選擇"構建選項"。 確保選擇"除錯"。
- 在"構建選項"對話框中,選擇"搜尋目錄"選項卡。
- 在"編譯器"選項卡下,點選"新增"按鈕。
瀏覽到<wkhtmltox>標頭文件所在的目錄(例如,C:\Program Files\wkhtmltopdf\include),然後選擇它。- 最後,點選"確定"以關閉對話框。

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

使用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
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
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);
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());
5. 將HTML字串轉換為PDF文件
wkhtmltopdf提供了一個轉換器方法來將HTML內容轉換為PDF。 這是程式碼片段:
wkhtmltopdf_convert(converter); // Converts HTML content to PDF
wkhtmltopdf_convert(converter); // Converts HTML content to PDF
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
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
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
9. 執行程式碼並生成PDF文件
現在,構建該專案並使用F9執行該程式碼。輸出被生成並保存在專案資料夾中。 生成的PDF如下:

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

有關如何使用IronPDF從各種資源建立PDF的更多詳細資訊,請存取這個IronPDF程式碼範例頁面。
結論
在本文中,我們探討了使用wkhtmltopdf C++ Library在C++中生成PDF,並學習了如何使用IronPDF在C#中生成PDF文件。
有了IronPDF,從HTML內容生成PDF文件變成了一個在.NET Framework語言中的簡單任務。 其豐富的功能集使其成為開發者在C#專案中需要HTML到PDF轉換的有價值工具。 無論是生成報告、發票,或任何其他需要準確HTML到PDF轉換的文件,IronPDF都是一個可靠且有效的解決方案。
IronPDF在開發用途中是免費的,但若用於商業用途則需要授權。 它還提供了一個免費試用來測試其完整功能。 下載IronPDF並親自試用。




