ClibPDFのススメ
ClibPDFTMは
FastIO Systems
が販売するPDFを直接作るANSI C のライブラリです。ただし、非商用に限って
は無料で使用することができます(詳しくはこちらを)。
一部使えない関数もありますが、日本語もOKです。
このClibPDFを使って、TeXのソースをPDFに変換するコンバータTeX2PDF
もどきを製作してみようと思います。もどきです。
まずはTeXの一握りの(笑)のコマンドに対応するところから始めてみます。
私の環境は、Win95+VC6.0(SP3)です。ただし、今後使用するであろう字句解析と
構文解析はCygnusのWin32ツール(flex,yacc)を使用するつもりです。
(*)AdobeもPDF作成用のSDKを用意しているようです。詳しくは
ここ。
- ライブラリの生成
- まずは簡単なPDFを作成
- Step1 テキストファイル→PDF変換
- Step2 オブジェクト指向設計
- ライブラリの生成
ClibPDFはソースで提供され、プラットフォームに合わせてコンパイルして
ライブラリを生成して使用します。VCでコンパイルする方法を説明します。
- 解凍
ダウンロードしたファイル(clibpdf202r1.zip)を適当なフォルダに
解凍します。ClibPDFというディレクトリが作成され、その下にも
複数のサブディレクトリが存在します。ClibPDF\source にソース
があります。
- ワークスペースを生成
VCを起動して、ファイル(F)→新規作成(N)で[プロジェクト]タブを
クリックします。「Win32 Static Library」を選択します。プロジェクト
名(N)は"cpdf"と入力しておきます。位置(C)はお好みの場所に。
- プロジェクトへファイルの挿入
プロジェクト(P)→プロジェクトへ追加(A)→ファイル(F)で、
先ほど解凍したClibPDF\source以下のファイル(testpdf.cを除く全ての
ファイル)を追加します。
- ビルド
ビルド(B)→ビルド(B) でライブラリを作成します。
Debugフォルダ下にライブラリcpdf.libが生成されています。
以下、このcpdf.libを使用します。PATHを把握しておいて下さい。
(注)Debugモードでビルドしていることを忘れないで下さい。必要に応じて
Releaseモードでリビルドして下さい。
- まずは簡単なPDFを作成
ClibPDF\examples\Cjk\japanese に日本語のサンプルソース(jpntest.c)があります。
これをコンパルしてみましょう。
- ワークスペースを生成
VCを起動して、ファイル(F)→新規作成(N)で[プロジェクト]タブを
クリックします。「Win32 Console Application」を選択します。プロジェクト
名(N)は"jpntest"と入力しておきます。位置(C)はお好みの場所に。
- ファイルコピー
上記で指定した位置(フォルダ)に、jpntest.c と
ClibPDF\source\cpdflib.h をコピーしておきます。
- ライブラリcpdf.libをプロジェクトに追加
プロジェクト(P)→プロジェクトへ追加(A)→ファイル(F)で、
ファイルの種類(T)を「ライブラリファイル(.lib)」にして
ClibPDF\cpdf\Debug\cpdf.lib
(ライブラリの生成で作成したライブラリ)を選択します。
- ビルド
ビルド(B)→ビルド(B) で実行ファイルを作成します。
- 実行
[F5]で実行してみて下さい。こんなPDFファイル
が生成されます。
(注)事前にAcrobat Readerをインストールしておく必要があります
- Step1 テキストファイル→PDF変換
第1段階としてテキストファイルを入力して、それをPDFに変換する
プログラムを作成してみます。最初なので簡単にしています。
ソースが汚いのですが気にせずアップします(苦笑)。
VC6のソース(27KB)です。
尚、ライブラリcpdf.libと、ヘッダファイルcpdflib.h の2ファイル
は同梱しておりません。再配布の問題もあろうかと思いますので、
各自ダウンロードしてビルドして獲得して下さい。
Releaseモードでビルドしたバイナリ(128KB)
もアップします。実用には程遠いですが。
ClibPDF\examples にも同様な例題text2pdfが
ありますが、TextBox関数を使用しているので日本語が使えません。
- Step2 オブジェクト指向設計
Step1でClibPDFを実際に使用してみてPDFファイルを生成することろまで
体験できたと思います。
折角ですがここで、TeX2PDFを目指してもっと基本的なところに戻って設計からやり直します。
GoFのデザインパターンより、Compositeパターン、Strategyパターンを
御手本にして設計します。将来、図や表も考慮に入れたい、TeXのコマンドを
解釈する必要がある、TeXではなくPlaneText も食わせたい等々あるので、
それらを考慮しておきます。と言うか後で容易に変更・追加できるように
設計しておきます。現在この設計中です。設計が完了したら
そのクラス図でもアップしようと思います。
いい考えがありましたら、メールでも下さい。
(*)ClibPDFに関する日本語サイトは少ないのですが、
ここに
ClibPDF関数の日本語マニュアルがあります。貴重ですね。どうもです。
by masu
e-mail: massun.masumoto@nifty.ne.jp
URL : http://member.nifty.ne.jp/~masumoto/