PDF 工具

如何在C++中創建PDF檔案

發佈 2023年7月5日
分享:

PDF(可攜式文件格式)檔案廣泛用於在不同平台間以一致的格式分享和保存文件。 在本文中,我們將探索如何使用 wkhtmltopdf 庫在 C++ 中生成 PDF 文件。 它是一個開源的命令列工具,用於將HTML內容轉換為PDF文件。 透過利用這個函式庫的威力,我們可以在 C++ 應用程式中以程式化方式從 HTML 內容建立 PDF 文件。

WkhtmltoPdf 庫

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

"wkhtmltopdf C++ 函式庫"(也稱為「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++ 程式設計的基本知識。

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

在 Code::Blocks 中創建一個專案,然後按照以下步驟連結庫文件夾和文件。如果您使用的是其他 IDE,選項可能會有所不同,但您需要在專案中引用已下載的庫才能使其正常運行。

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

為了確保 Code::Blocks 能夠找到必要的標頭檔,我們需要設置搜尋目錄。

  1. 點擊菜單欄中的「專案」選單,然後選擇「構建選項」。 確保您選擇「Debug」。

  2. 在「建置選項」對話框中,選擇「搜尋目錄」標籤。

  3. 在「編譯器」標籤下,點擊「添加」按鈕。

  4. 瀏覽到 wkhtmltox 標頭文件所在的目錄(例如,C:\Program Files\wkhtmltopdf\include),然後選擇它。

  5. 最後,點擊「確定」以關閉對話框。

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

2. 在連結設置中連結庫文件

若要連結 wkhtmltox 庫,請按照以下步驟進行:

  1. 再次點擊功能表列中的「專案」選單,然後選擇「建置選項」。 確保您選擇「Debug」。

  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 <iostream>
#include <fstream>
#include <string>
#include <wkhtmltox/pdf.h>
C++

2. 禁用圖形使用者介面元件

如果您不使用 GUI,則需要將其禁用以避免錯誤。 代碼如下:

wkhtmltopdf_init(false);
wkhtmltopdf_init(false);
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 文件中填入一些內容。 代碼如下:

string htmlString = "<html><body><h1>Create a PDF in C++ using WKHTMLTOPDF Library</h1></body></html>";
wkhtmltopdf_add_object(converter, os, htmlString.c_str());
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);
wkhtmltopdf_convert(converter);
C++

6. 獲取作為記憶體緩衝區的輸出

使用 wkhtmltopdf_get_output 函數,我們可以將 PDF 資料作為內存緩衝流獲取。 它還會返回 PDF 的長度。 以下範例將執行此任務:

const unsigned char* pdfData;
const int pdfLength = wkhtmltopdf_get_output(converter, &pdfData);
const unsigned char* pdfData;
const int pdfLength = wkhtmltopdf_get_output(converter, &pdfData);
C++

7. 儲存 PDF 檔案

pdfData 指標現在將擁有來自 wkhtmltopdf_converter 的字元流。 要儲存為 PDF 檔案,首先我們將指定要儲存 PDF 的檔案路徑。 然後,使用輸出文件流,以二進制模式打開文件,並使用 reinterpret_cast 函數將 pdfData 類型轉換後寫入其中。 最後,我們關閉文件。

const char* outputPath = "file.pdf";
ofstream outputFile(outputPath, ios::binary);
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength);
outputFile.close();
const char* outputPath = "file.pdf";
ofstream outputFile(outputPath, ios::binary);
outputFile.write(reinterpret_cast<const char*>(pdfData), pdfLength);
outputFile.close();
C++

8. 釋放記憶體

在成功創建 PDF 文件後,必須清理 Wkhtmltopdf 分配的資源,否則將導致記憶體洩漏。

wkhtmltopdf_destroy_converter(converter);
wkhtmltopdf_destroy_object_settings(os);
wkhtmltopdf_destroy_global_settings(gs);
wkhtmltopdf_deinit();

cout << "PDF created successfully." << endl;
wkhtmltopdf_destroy_converter(converter);
wkhtmltopdf_destroy_object_settings(os);
wkhtmltopdf_destroy_global_settings(gs);
wkhtmltopdf_deinit();

cout << "PDF created successfully." << endl;
C++

9. 執行代碼並生成 PDF 檔案

現在,建置專案並使用 F9 執行代碼。輸出將生成並保存在專案資料夾中。 生成的 PDF 如下:

如何在 C++ 中建立 PDF 檔案:圖 3

在 C# 中建立 PDF 文件

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 a 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 a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");

// Export to a file or Stream
pdf.SaveAs("output.pdf");
C++

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

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

如需了解更多如何進行的詳細資訊使用IronPDF從各種資源創建PDF文件,請訪問此IronPDF 程式碼範例頁面。

結論

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

使用 IronPDF,在 .NET Framework 語言中從 HTML 內容生成 PDF 檔案成為一項簡單的任務。 其廣泛的功能集使其成為需要轉換的開發人員的寶貴工具。HTML轉PDF在他們的 C# 專案中。 無論是生成報告、發票,還是任何其他需要精確HTML轉PDF轉換的文件,IronPDF都是一個可靠且高效的解決方案。

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

< 上一頁
如何在 C++ 中查看 PDF 文件
下一個 >
如何在C++中讀取PDF檔案

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >