2024/06/03 電子書籍「電子書籍出版・技術文書作成を劇的に加速!秀丸エディタ + Markdown + Pandocの驚異」を出版

PDF用 libHaru ライブラリィの作成

プログラム

ibHaru(Haru Free PDF Library)は、PDF文書を生成するためのオープンソースのライブラリです。C言語で記述されており、様々なプラットフォームで利用することができます。以下は、libHaruの主な特徴や機能についての概要です。

  1. PDF生成機能: libHaruは、PDF文書の生成をサポートしています。基本的な機能としては、テキスト、画像、図形、アノテーション(注釈)、リンクなどを含むPDFページの構築が可能です。
  2. フォントサポート: TrueTypeやOpenTypeなどのフォント形式をサポートしており、異なるフォントを使用したテキストの描画が可能です。また、フォント埋め込みもサポートされています。
  3. 図形やイメージの描画: libHaruは、線、円、矩形、パスなどの基本的な図形を描画するための機能を提供します。また、JPEGやPNGなどの画像を挿入して文書に組み込むこともできます。
  4. エンコーディングサポート: libHaruはさまざまなテキストエンコーディングをサポートしており、国際化対応が可能です。
  5. ドキュメントのメタデータ設定: PDF文書のメタデータ(作成者、タイトル、作成日時など)を設定するための機能が提供されています。
  6. アーキテクチャのポータビリティ: C言語で実装されているため、libHaruは多くのプラットフォームで利用できます。Linux、Windows、macOSなど、さまざまな環境でコンパイルおよび使用が可能です。


libHaru は、C/C++ で記述されたライブラリであるため、直接的には C/C++ でのみ使用できます。

しかし、C/C++ から他の言語へのインターフェースを提供するライブラリやフレームワークを利用することで、他の言語でも libHaru を使用できます。

具体的には、以下の言語で libHaru を使用できます。

  • Python
  • Ruby
  • Java
  • JavaScript
  • PHP

libHaru ライブラリィとは

ibHaru ライブラリィの概要は上述しましたが、実はこのライブラリィは、日本人の菅野健氏により開発されたものです。

2005年度下期未踏ソフトウェア創造事業で採択されたフリーでクロスプラットフォームなPDF生成ライブラリとのことです。以下のURLを参照ください。

Haru Free PDF Library

オープンソースPDFライブラリの作成 ―ライセンスフリーな高性能PDF出力エンジンの開発―

v2.3.0-RC2 以降のlibHaru ライブラリィ

v2.3.0-RC2 以降のlibHaru ライブラリィはコードの見直しがあったようで、Clangベースのbcc32cでコンパイルする必要があるようです。zlib, libpng も、bcc32c を使用したライブラリの作成方法についても説明します。

C++Builderで、libHaruライブラリィを使用する

C++Builderから、libHaruライブラリィを使用してみましょう。

libHaruライブラリィは、ZLIB, LINPNG を使用していますので、

  1. ZLIB
  2. LIBPNG
  3. libHaru

のソースを入手(Github から)して、LIBファイルを作成して使用します。

libHaruライブラリィは、DLLの作成もできるようですが、静的リンクが出来るLIBファイルを作成します。

尚、libHaruライブラリィは、色々なプラットフォームで動作します。以下のプラットフォーム用のmakefileが用意されています。

Supporting platforms

  • Supporting platforms
    • Cygwin + GCC (Microsoft Windows)
    • Cygwin + MinGW (Microsoft Windows)
    • MSYS + MinGW (Microsoft Windows)
    • Microsoft VC++ (Microsoft Windows)
    • Borland C++ (Microsoft Windows)
    • GCC (Linux, FreeBSD, NetBSD, Solaris…)

ソースファイルの解凍及びフォルダ名の変更

  1. 同一フォルダで、それぞれのZIPファイルを解凍します。
    • zlib-develop.zip
    • libpng-libpng16.zip
    • libharu-2.4.4.zip
  2. フォルダ名の変更
    • zlib-develop —> zlib
    • libpng-libpng16 —> libpng
    • libharu-2.4.4 変更してもしなくても良い

ZLIB のコンパイル

zlib フォルダの win32 フォルダに、C++Builder(正確には、BCC32)用の makefile Makefile.bor があります。

このファイルを確認すると、以下のコメントがあり、make -f win32/Makefile.bor を実行すればよいことがわかります。

# Makefile for zlib
# Borland C++ for Win32
#
# Usage:
#  make -f win32/Makefile.bor

RAD Studio(C++Builder)をインストールしていれば、makeファイルにパスが通っていると思いますので、 zlib フォルダで、コマンドプロンプト(DOS窓)から、以下のコマンドを実行します。

make -f win32/Makefile.bor

幾つか警告は出ますが、zlibフォルダに、zlib.lib ができます。

bcc32c でコンパイルするには

Makefile.bor を以下のように変更すれば、bcc32cでコンパイルできます。

  • コンパイラを、bcc32c に変更
  • CFLAGS に、パス(.\)を追加

CC = bcc32
AS = bcc32
LD = bcc32

CFLAGS  = -a -d -k- -O2 $(LOC)

bcc32 を bcc32cに変更します。

CC = bcc32c
AS = bcc32c
LD = bcc32c

CFLAGS  = -a -d -k- -O2  -I .\ $(LOC)

LIBPNG のコンパイル


libpng フォルダの scripts フォルダに、C++Builder(正確には、BCC32)用の makefile :makefile.bc32 があります。

このファイルを確認すると、以下のコメントがあり、make -f win32/Makefile.bor を実行すればよいことが分かります。

# Makefile for libpng
# 32-bit Borland C++ (Note: All modules are compiled in C mode)
# To build the library, do:
#       "make -fmakefile.bc32"
#
# -------------------- 32-bit Borland C++ --------------------

コンパイルの手順

  1. makefile.bc32 ファイルを、libpng フォルダにコピーする
  2. libpng フォルダで、コマンドプロンプトを開き、make -fmakefile.bc32 を実行する
make -fmakefile.bc32

※ LIBPNG は、zlibのソースファイルを使用しています。zlibライブラリィのフォルダ名は、zlibに変更しておいてください。

幾つか警告は出ますが、libpng フォルダに、libpng.lib ができます。

bcc32c でコンパイルするには

makefile.bc32 のコンパイラーの指定を bcc32c に変更すれば、bcc32cでコンパイルできます。

CC=bcc32
LD=bcc32

以下のように、bcc32cに変更します。

CC=bcc32c
LD=bcc32c

libHaru のコンパイル

提供されているmakefileを少し修正する必要がありましたので、その点も含め説明します。

libHaru ライブラリィのソースファイルは、以下のHPから入手できます。

libHaru
libHaru free PDF library
  • Latest stable release: v2.3.0
  • Latest development release: v2.3.0-RC3

libharu-RELEASE_2_3_0(Latest stable release: v2.3.0)

bcc32 でコンパイル

コンパイル手順:

  1. script フォルダにあるメイクファイル Makefile.bcc32 を一つ上の解凍フォルダにコピーする。
  2. メイクファイル Makefile.bcc32 を修正する。
    • zlib, libpng 用のパスを追加
  3. make -f Makefile.bcc32 を実行する

Makefile.bcc32 の修正内容:

CFLAGS=-WM -O2 -d -q -w-8057 -w-8012 -Iinclude -Iwin32\include -nsrc 

以下のように、インクルードパスを追加します。
CFLAGS=-WM -O2 -d -q -w-8057 -w-8012 -Iinclude -Iwin32\include -I..\zlib -I..\zlib\contrib\minizip -I..\libpng  -nsrc 

bcc32c でコンパイル

コンパイル手順:

  1. script フォルダにあるメイクファイル Makefile.bcc32 を一つ上の解凍フォルダにコピーする。
  2. メイクファイル Makefile.bcc32を修正する。
    • コンパイラーをbcc32c に変更する
    • zlib, libpng 用のパスを追加
  3. make -f Makefile.bcc32 を実行する

Makefile.bcc32 の修正内容:

CC=bcc32

CFLAGS=-WM -O2 -d -q -w-8057 -w-8012 -Iinclude -Iwin32\include -nsrc 

以下のように、インクルードパスを追加します。
CC=bcc32c

CFLAGS=-WM -O2 -d -q -w-8057 -w-8012 -Iinclude -Iwin32\include -I..\zlib -I..\zlib\contrib\minizip -I..\libpng  -nsrc 

libharu-master(v2.3.0-RC2), libharu-2.4.4(v2.4.4)

v2.3.0-RC2 以降のコードは、bcc32ではコンパイル出来ず、bcc32cでコンパイルする必要があるようです。それから、ライブラリ作成時にはエラーは出ないのですが、ソースファイルが2つ増えているのですが、Makefile.bcc32 には追加されていません。その2つのファイルをリンクリストに追加する必要があります。

コンパイル手順:

  1. script フォルダにあるメイクファイル Makefile.bcc32 を一つ上の解凍フォルダにコピーする。
  2. メイクファイル Makefile.bcc32 を修正する。
    • コンパイラーをbcc32c に変更する
    • zlib, libpng 用のパスを追加
    • src\hpdf_direct.obj, src\hpdf_shading.obj をリンクリストに追加
  3. make -f Makefile.bcc32 を実行する

Makefile.bcc32 の修正内容:

CC=bcc32

CFLAGS=-WM -O2 -d -q -w-8057 -w-8012 -Iinclude -Iwin32\include -nsrc 

以下のように修正します。
CC=bcc32c

CFLAGS=-WM -O2 -d -q -w-8057 -w-8012 -Iinclude -Iwin32\include -I ..\zlib -I ..\zlib\contrib\minizip -I ..\libpng -nsrc 

	src\hpdf_exdata.obj \
	src\hpdf_direct.obj \    <--- 追加
	src\hpdf_shading.obj \   <--- 追加
	src\hpdf_u3d.obj 

参考資料

ドキュメント

APIの説明や、サンプルコード等の情報は、ここにあります。

サンプルコード

ここに色々なサンプルがあります。

Hello, Haru Free PDF Library! にも、参考となるサンプルコードがありました。

参考プログ&HP

  • 64ビットのライブラリィの作成方法を説明しているプログです。
  • zlib 関係
  • libpng 関係
  • libHaru 関係

MakeFile, バッチファイルは、以下からダウンロード出来ます。

ファイル名説明
mk_bcc32.batbcc32用のバッチファイル
mk_bcc32c.batbcc32c用のバッチファイル
win32\Makefile.borbcc32用のMakeFile
win32\Makefile.bcc32cbcc32c用のMakeFile
フォルダ:zlib
ファイル名説明
mk_bcc32.batbcc32用のバッチファイル
mk_bcc32c.batbcc32c用のバッチファイル
makefile.bc32bcc32用のMakeFile
makefile.bc32cbcc32c用のMakeFile
フォルダ:libpng
ファイル名説明
mk_bcc32c.batbcc32c用のバッチファイル
Makefile.bcc32cbcc32c用のMakeFile
フォルダ:libharu-2.4.4

タイトルとURLをコピーしました