C++でPDFファイルを作成する方法
PDF(ポータブルドキュメントフォーマット)ファイルは、異なるプラットフォーム間で一貫した形式で文書を共有・保存するために広く使用されています。この記事では、wkhtmltopdfライブラリを使用してC++でPDFファイルを生成する方法を解説します。wkhtmltopdfは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ファイルを作成するには、以下が必要です:
- システムにGCCやClangなどのC++コンパイラがインストールされていること。 C++プログラミングをサポートする任意のIDEを使用できます。
- wkhtmltopdfライブラリをダウンロードしてインストールします。 公式のwkhtmltopdfウェブサイトから最新バージョンをダウンロードし、オペレーティングシステムの指示に従ってインストールしてください。
- C++プログラミングの基本的な知識。
Code::BlocksでC++のPDFプロジェクトを作成する
Code::Blocksでプロジェクトを作成し、以下の手順に従ってライブラリフォルダとファイルをリンクします。別のIDEを使っている場合、オプションが異なるかもしれませんが、ダウンロードしたライブラリをプロジェクトに参照する必要があります。
1. 検索ディレクトリにインクルードフォルダを追加する
Code::Blocksが必要なヘッダーファイルを見つけられるようにするため、検索ディレクトリを設定します。
- メニューバーの"プロジェクト"メニューをクリックして"ビルドオプション"を選択します。 "デバッグ"を選択していることを確認してください。
- "ビルドオプション"ダイアログボックスで"検索ディレクトリ"タブを選択します。
- "コンパイラ"タブの下、"追加"ボタンをクリックします。
- wkhtmltoxヘッダーファイルが格納されているディレクトリ(例:C:\Program Files\wkhtmltopdf\include)を参照し、選択します。
- 最後に、ダイアログボックスを閉じるために"OK"をクリックします。

2. リンカー設定でライブラリをリンクする
wkhtmltoxライブラリにリンクするには、以下のステップに従ってください。
- 再びメニューバーの"プロジェクト"メニューをクリックし、"ビルドオプション"を選択します。 "デバッグ"を選択していることを確認してください。
- "ビルドオプション"ダイアログボックスで"リンカー設定"タブを選択します。
- "リンクライブラリ"タブの下、"追加"ボタンをクリックします。
- wkhtmltoxライブラリファイルが格納されているディレクトリ(例:C:\Program Files\wkhtmltopdf\lib)を参照し、適切なライブラリファイルを選択します。
- "開く"をクリックしてライブラリをプロジェクトに追加します。
- 最後に、ダイアログボックスを閉じるために"OK"をクリックします。

Wkhtmltopdfを使用してC++でPDFを作成する手順
1. 必要なライブラリを含める
まず、wkhtmltopdfライブラリの機能をC++プログラムで利用するために必要なヘッダーファイルを含めます。 以下のヘッダーファイルをソースコードファイルの先頭に含めてください。
#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_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コンテンツの追加
新しく作成したPDF文書にコンテンツを埋めるためにHTML文字列を作成します。 コードは次の通りです:
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ファイルを保存する
pdfData ポインタには、wkhtmltopdf_converter からの文字ストリームが格納されます。 PDFファイルに保存するには、まずPDFを保存したいファイルパスを指定します。 次に、出力ファイルストリームを使用して、バイナリモードでファイルを開き、reinterpret_cast 関数を使用して型キャストすることで、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は次のようになります。

C#でPDFファイルを作成する
IronPDF
IronPDFは、HTMLからPDF文書を簡単に作成できる.NET C# PDFライブラリです。 これは、HTMLからPDFファイルを作成するプロセスを簡略化する直感的なAPIを提供します。
IronPDFは、PDFを操作する際に強力で多用途です。 単純なHTML文書からだけでなく、CSSスタイリング、JavaScriptの相互作用、および動的なコンテンツを持つ複雑なウェブページからもPDFを作成します。 さらに、変換メソッドへ迅速にアクセスして異なる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")
HTML コンテンツを PDF としてレンダリングするために、ChromePdfRenderer のインスタンスを作成します。 renderer オブジェクトに対して RenderHtmlAsPdf メソッドを呼び出し、HTML 文字列を渡します。 これにより PDF ドキュメントが生成され、その後、SaveAs メソッドを使用して PDF ドキュメントを保存します。

IronPDFを使ってさまざまなリソースからPDFを作成する方法についての詳細は、このIronPDFのコード例ページをご覧ください。
結論
この記事では、wkhtmltopdf C++ライブラリを使用してC++でPDFを生成する方法と、C#でPDF文書を生成するためにIronPDFを使用する方法を学びました。
IronPDFを使用すると、.NETフレームワークでHTMLコンテンツからのPDFファイル生成が非常に簡単になります。その豊富な機能セットは、C#プロジェクトでHTMLをPDFに変換する必要がある開発者にとって貴重なツールです。レポートや請求書など、正確なHTMLからPDFへの変換が必要なドキュメントを生成する場合でも、IronPDFは信頼性が高く効率的なソリューションです。
IronPDFは開発目的には無料ですが、商業利用にはライセンスが必要です。 商業利用のためのその完全な機能をテストするための無料トライアルも提供しています。 IronPDFをダウンロードして自分で試してみてください。

