PDFium とは
PDFium は chrome で利用されている PDF レンダリングエンジンです。
Apache ライセンスなので、商用利用 も可能です。
レンダリングエンジンですが、新規PDFの作成、PDFのマージ、PDFのページ追加/削除なども可能です。
ビルド環境
Windows 10 Pro バージョン2004
Visual Studio 2019
Windows SDK 10.0.19041.0
ビルド手順
一応、この手順でビルドできましたが、冗長な部分があるかもしれません。
depot_tools ツールのダウンロード
depot_tools をダウンロードして、解凍します。
depot_tools ツールフォルダの python_bin_reldir.txt を編集
各自の python 実行ファイルがある場所を示すようにします。
私は anaconda でインストールしているので、以下のようにしました。
..\..\Anaconda
環境変数の追加
- Path 環境変数に depot_tools のパスを追加
- DEPOT_TOOLS_WIN_TOOLCHAIN=0
- vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional
PDFium ビルドフォルダの作成
コマンドプロンプトを開き、新規フォルダを作成して、そこに移動します。
c:\
mkdir hoge
cd hoge
gclient の実行
まずは引数無しで
gclient
次に引数ありで
gclient config https://pdfium.googlesource.com/pdfium.git
生成された .gclient ファイルを開き、"managed" を False にして、保存します。
最後に
gclient sync -vv
最後は少し時間がかかりますので、お風呂でも入るか、テレビでも見ていてください。
作成された pdfium フォルダに移動
cd pdfium
BUILD.gn の変更
以下を修正し、保存します。(右が修正後)
public\fpdfview.h" の変更
以下を修正し、保存します。(右が修正後)
ビルドファイルの生成
out\Custom_x86_Release 以下にビルドファイルを生成します。フォルダ名はお好きに指定してください。
以下は x86/Release の設定です。x64 にしたり、debug にしたい場合、その他オプションは該当箇所を書き換えてください。
gn gen –-ide=vs out\Custom_x86_Release -–args="target_cpu=\"x86\" pdf_is_standalone=true is_component_build=false is_official_build=true is_debug=false pdf_enable_xfa=false pdf_enable_v8=false chrome_pgo_phase=0 pdf_use_skia=false pdf_use_skia_paths=false clang_use_chrome_plugins=false"
ビルド
out\Custom_x86_Release に all.sln があるので、Visual Studio で開いて、pdfium を右クリックからビルドすれば、DLLが生成されます。
設定にも拠りますが、ビルドにもかなり時間がかかります。
私は、Visual Studio からよりも手軽にビルドできる、以下のコマンドを実行しました。
ninja -C out\Custom_x86_Release pdfium
# 以下のような出力でビルドが完了します。
ninja: Entering directory `out\Custom_x86_Release'
[981/981] LINK(DLL) pdfium.dll pdfium.dll.lib pdfium.dll.pdb
DLL 利用時
C/C++ | 全般 | 追加のインクルードディレクトリ : pdfium\public
C/C++ | プリプロセッサ | プリプロセッサの定義 : FPDFSDK_EXPORTS
リンカー | 入力 | 追加の依存ファイル:pdfium.dll.lib
レンダリングで必要なヘッダは以下です。
#include "fpdfview.h" // pdfium\public
Tips
できあがった sln ファイルを開いて、Visual Studio 上 でビルドの構成を新規に作ろうとしたら、単に時間がかかっているだけなのか、固まってしまいました。
なので、新規構成を作りたければ、gn gen
のコマンドで出力フォルダを変えて、--args
の内容も変えて、別なフォルダに作るようにしましょう。