フッターコンテンツにスキップ
PDF ツール

C++でPDFファイルを作成する方法

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. システムにGCCやClangなどのC++コンパイラがインストールされていること。 C++プログラミングをサポートする任意のIDEを使用できます。
  2. wkhtmltopdfライブラリをダウンロードしてインストールします。 公式のwkhtmltopdfウェブサイトから最新バージョンをダウンロードし、オペレーティングシステムの指示に従ってインストールしてください。
  3. C++プログラミングの基本的な知識。

Code::BlocksでC++のPDFプロジェクトを作成する

Code::Blocksでプロジェクトを作成し、以下の手順に従ってライブラリフォルダとファイルをリンクします。別のIDEを使っている場合、オプションが異なるかもしれませんが、ダウンロードしたライブラリをプロジェクトに参照する必要があります。

1. 検索ディレクトリにインクルードフォルダを追加する

Code::Blocksが必要なヘッダーファイルを見つけられるようにするため、検索ディレクトリを設定します。

  1. メニューバーの"プロジェクト"メニューをクリックして"ビルドオプション"を選択します。 "デバッグ"を選択していることを確認してください。
  2. "ビルドオプション"ダイアログボックスで"検索ディレクトリ"タブを選択します。
  3. "コンパイラ"タブの下、"追加"ボタンをクリックします。
  4. wkhtmltoxヘッダーファイルが格納されているディレクトリ(例:C:\Program Files\wkhtmltopdf\include)を参照し、選択します。
  5. 最後に、ダイアログボックスを閉じるために"OK"をクリックします。

C++でPDFファイルを作成する方法:図1

2. リンカー設定でライブラリをリンクする

wkhtmltoxライブラリにリンクするには、以下のステップに従ってください。

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

C++でPDFファイルを作成する方法:図2

Wkhtmltopdfを使用してC++でPDFを作成する手順

1. 必要なライブラリを含める

まず、wkhtmltopdfライブラリの機能をC++プログラムで利用するために必要なヘッダーファイルを含めます。 以下のヘッダーファイルを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コンテンツの追加

新しく作成した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());
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ファイルを保存する

pdfDataポインターは、wkhtmltopdf_converterからの文字のストリームを持つようになります。 PDFファイルに保存するには、まずPDFを保存したいファイルパスを指定します。 その後、出力ファイルストリームを使用してファイルをバイナリモードで開き、pdfDatareinterpret_cast関数を使用してタイプキャストしながら書き込みます。 最後にファイルを閉じます。

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

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");
$vbLabelText   $csharpLabel

ChromePdfRendererのインスタンスを作成し、HTMLコンテンツをPDFとしてレンダリングします。 HTML文字列をrendererオブジェクトに渡してRenderHtmlAsPdfメソッドを呼び出します。 これによりPDF文書が生成され、その後SaveAsメソッドを使用してPDF文書を保存します。

C++でPDFファイルを作成する方法:図4

IronPDFを使ってさまざまなリソースからPDFを作成する方法についての詳細は、このIronPDFのコード例ページをご覧ください。

結論

この記事では、wkhtmltopdf C++ライブラリを使用してC++でPDFを生成する方法を探り、C#でPDF文書を生成するためにIronPDFを使用する方法も学びました。

IronPDFを使用すると、.NET Framework 言語でHTMLコンテンツからのPDFファイル生成が簡単な作業になります。 その広範な機能セットは、C#プロジェクトでHTMLをPDFに変換する必要がある開発者にとって貴重なツールです。 レポートや請求書など、正確なHTMLからPDFへの変換を必要とする他のドキュメントを生成する場合でも、IronPDFは信頼性が高く効率的なソリューションです。

IronPDFは開発目的には無料ですが、商業利用にはライセンスが必要です。 商業利用のためのその完全な機能をテストするための無料トライアルも提供しています。 IronPDFをダウンロードして自分で試してみてください。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。