C#でlibHaruを使ってPDFを出力してみよう。その2「libHaruビルド編」
さて、前回に続きC#でPDF作成できる手順を記載したいと思います。
libpngとzlibのビルドが完了している前提になります。
これらのビルド手順は、前回の記事を参照してください。
stone-book.hatenablog.com
大まかな流れは下記になります。
フォルダ構成
公式サイトからlibHaruのソースをダウンロードしてきます。
libHaru
ダウンロード後、適当にリネームして、libpngやzlibと同ディレクトリに格納します。
(コンパイルの際、相対パスで参照するためです。)
libpngとzlibをコピー
前回ビルドした「libpng16.lib」と「zlib.lib」をRelease LibraryからlibHaruのフォルダにコピーします。
これで、必要なファイルがそろいました。
各種ファイルの変更
スタートメニューからVisual Studioの中にある「VS2017用 x84 Native Toolコマンドプロンプト」を使ってビルドします。
このまま、ビルドしてみるといろいろ怒られました。一つ一つつぶしていきます。
VS2017を用いる場合は、下記のスクリプトを利用するため、環境に合わせて変更します。
libharu\script\Makefile.msvc_dll
まず、PREFIXのパスの部分をlibpngがzlibのバージョンに合わせて修正します。
(コマンドプロンプトのカレントを基準とした相対パスに変更。)
!IFNDEF PNG_PREFIX
PNG_PREFIX = ../lpng1632
!ENDIF!IFNDEF ZLIB_PREFIX
ZLIB_PREFIX = ../zlib-1.2.8
併せて、CFLAGSの箇所も修正します。libpngとzlibのincludeフォルダに指定のヘッダファイルはないので、次に変更。
CFLAGS=/MD -nologo -O2 -Iinclude -Iwin32\include -I"$(PNG_PREFIX)" -I"$(ZLIB_PREFIX)" -DHPDF_DLL_MAKE
また、LDFLAGSの箇所で、libpng13.libとなっているので、libpng16.libに変更
LDFLAGS= /LIBPATH:$(PNG_PREFIX)\lib /LIBPATH:$(ZLIB_PREFIX)\lib /LIBPATH:win32\msvc libpng16.lib zlib.lib
この状態でビルドしてみます。
しかし、HPDF_3DAnnot_Set3DViewの参照エラーが出てしまいました。
中国のサイトで、同様に対処例?が記載されていたので参考に・・
libharu\win32\msvc\libhpdf.def
にある EXPORTS から次を削除します。
HPDF_3DAnnot_Set3DView
これで設定が完了。
VS2017用 x84 Native Toolコマンドプロンプトでコンパイル
今回はx84ですが、libpng、zlibもwin32ではなくx64でビルドしている場合は、
VS2017用 x64 Native Toolを選択すれば良いと思います。
コマンドプロンプトにてlibHaruフォルダまで移動します。
(私の環境の場合、cd E:\build\libharu ですね。)
libHaruフォルダで次のコマンドを入力します。
nmake -f script\Makefile.msvc_dll
なんやかんや警告は出ますが、とりあえず完了します。
libhpdf.dllがlibHaruフォルダに出力されます。
私の環境では、731KB程度でした。
参考
基本的な手順は、githubに記載されています。
Installation · libharu/libharu Wiki · GitHub
ビルドに関して参考にした記事
PDFライブラリのlibHaru 2.3.0 RC2をビルドしてみる - terurouメモ
PDFライブラリ「libHaru」のDLLをビルドする : 日曜ゲームクリエータの日記
HPDF_3DAnnot_Set3DViewエラーを参考
libharu(1):windows下编译方法 - oldmtn的专栏 - CSDN博客