とあるSEの手順書

個人的な技術メモです。無保証ですが参考になりましたら幸いです。

C#でlibHaruを使ってPDFを出力してみよう。その2「libHaruビルド編」

さて、前回に続きC#でPDF作成できる手順を記載したいと思います。
libpngとzlibのビルドが完了している前提になります。
これらのビルド手順は、前回の記事を参照してください。
stone-book.hatenablog.com

大まかな流れは下記になります。

  1. ダウンロードしてフォルダ構成を整える
  2. libpngとzlibをコピー
  3. 各種ファイルの変更
  4. VS2017用 x84 Native Toolコマンドプロンプトコンパイル

フォルダ構成

公式サイトからlibHaruのソースをダウンロードしてきます。
libHaru

ダウンロード後、適当にリネームして、libpngやzlibと同ディレクトリに格納します。
コンパイルの際、相対パスで参照するためです。)

f:id:stone-book:20170910081022p:plain
フォルダ構成

libpngとzlibをコピー

前回ビルドした「libpng16.lib」と「zlib.lib」をRelease LibraryからlibHaruのフォルダにコピーします。

f:id:stone-book:20170910081656p:plain
ライブラリのコピー

これで、必要なファイルがそろいました。

各種ファイルの変更

スタートメニューからVisual Studioの中にある「VS2017用 x84 Native Toolコマンドプロンプト」を使ってビルドします。
このまま、ビルドしてみるといろいろ怒られました。一つ一つつぶしていきます。

f:id:stone-book:20170910082032p:plain
コンパイルエラー

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

この状態でビルドしてみます。

f:id:stone-book:20170910083104p:plain
変更後のファイル

しかし、HPDF_3DAnnot_Set3DViewの参照エラーが出てしまいました。

f:id:stone-book:20170910083213p:plain
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

なんやかんや警告は出ますが、とりあえず完了します。

f:id:stone-book:20170910085050p:plain
ビルド完了

libhpdf.dllがlibHaruフォルダに出力されます。
私の環境では、731KB程度でした。