<return>

<T>$Args{title}</T>

</return>
<objects>

Perlだけで作る日本語PDF

日本語組版ルールを組み込んだPDF生成モジュール PDFJ

中島 靖（Kansai.pm、(株)ネットストック） <nakajima@netstock.co.jp>

2002年12月6日 関西オープンソース＋フリーウェア2002
2003年10月7日、2004年8月20日、2005年2月17日加筆修正

<NewBlock/>

日本語PDFを作成するためのPerlのライブラリモジュール

1. 日本語の組版ルール（禁則、行の詰め伸ばし、ルビ、添え字、縦書き中の欧文、縦中横、下線・傍線、圏点など）
2. フォントは標準Type1とTrueType（TrueTypeは埋め込み）
3. テキスト中の画像や線画図形、線画図形中のテキストや画像
4. 箇条書きのためのラベル付き段落
5. 段落、画像、図形などを並べたブロック。入れ子のブロックによる表
6. ページをまたぐ段落やブロックの分割配置
7. PDFのアウトラインやハイパーリンク
8. XMLで原稿が書けます

2002年5月に初公開の、発展途上のソフトウェアです

<NewBlock/>

Webアプリケーションに印刷機能を持たせるためにサーバーで動的に日本語PDFを生成したい

TeX+dvipdfm

- サーバー側の仕掛としてはちょっと大げさ
- 複雑な数式を扱うならこれしかないが、ビジネスアプリには不要だろう

PDFLib

- レイアウト機能が弱く、かなりのプログラミングが必要
- 日本語対応の細かなところまでは無理
- 商用の場合ライセンスが必要

FOP

- うーん、JAVAかぁ…(^^;;;)
- XSLは魅力だけどXSLTを書くのは…(^^;;;)

→Perlだけでちょいちょいっとやりたいなぁ

<NewBlock/>

本を書くのにLaTeXのマクロの代わりにPerlスクリプトでレイアウトできたらラクだなぁ

LaTeXで複雑なマクロを書いたら不安定で困った…（すみません、TeXnicianじゃないもので）

自作モジュールなら日本語組版ルールもきちんと組み込めるだろう

TeXでは難しい、ルビの配置とか、追い込みの時の空白の詰め方とか…（すみません、TeXnicianじゃないもので）

<NewBlock/>

1. Perlだけで書く（Cのコンパイルができないサーバーでも使えるように）
2. 日本語組版ルール（JIS X 4051）を組み込む（ただし厳密な準拠にはこだわらない）
3. 縦書きもOK
4. 段落、表、箇条書き、図といったレイアウト要素のページへの適切な配置
5. アウトラインやハイパーリンクなどのPDFの便利な機能はできるだけ利用できるようにする
6. できる限りフリーにする

<NewBlock/>

JIS X 4051「日本語文書の行組版方法」(1995)を採用

JIS X 4051のうち概ね次のものをサポート

- 約物の基本的な用法
- 行頭禁則処理
- 行末禁則処理
- 分離禁止処理
- 和欧文の混植処理
- 縦中横処理
- ルビ処理

- 添え字処理
- 圏点処理
- 下線・傍線処理
- 段落整形処理
- そろえ（中央、行頭、行末、均等割）
- 行の調整処理
- 表処理

<NewBlock/>

JIS X 4051と異なる点

- 文字間の間隔はすべて後ろの文字のサイズに従う
- 欧文スペースは三分空きでなくフォントに従う

不完全または未サポートの処理

- 連数字の配置法
- 割注
- 段落末尾処理（段落の最終行を所定の文字数以上に）
- タブ処理
- 表処理における行間隔の均等割

<NewBlock/>

□□□□□□□□□□□□ 　「約物の、（幅と間隔）」 ゴシックGothic明朝MinchouゴシックHankaku明朝Hankaku色文字 下線 下破線 圏点 網掛け 日本語斜体 添え字1）中島文字位置曙大親分大親分fifteen | □□□□□□□□□□□□ 　「約物の、（幅と間隔）」 ゴシックGothic明朝MinchouゴシックHankaku明朝Hankaku色文字 傍線 傍破線 圏点 網掛け 日本語斜体 (1)縦中横 添え字中島文字位置曙大親分大親分fifteen

<NewBlock/>

納品書

2002年9月1日

<T>PDFJ社 御中</T>

（株）ネットストック 東京都大田区蒲田XX-YYY 03-XXXX-YYYY

名称 | 数量 | 摘要
--- | --- | ---
ノートパソコン | 20 | Windows XP Professional、Office XP Personal
スイッチングハブ | 3 |

<NewBlock/>

XMLでマークアップされたテキストからPDFJを用いてPDFを生成するPerlモジュール

- PDFJを直接使うと自由度は高いがいちいちプログラミングが必要
- とりあえずこのスライドが作れる程度まで来たが、まだ仕様が動いている段階。近日公開→かなり実用的になってきました
- XMLライク？→自動化のためはXMLだが、今のところ書きやすさを優先→結局XML準拠にしました
- 最終的には本を丸ごと一冊書けるように…→目次と索引付きの小冊子程度は書けます。論文用マクロも

さきほどの帳票デモを生成するXPDFJのソーステキストは次のようになる→現時点のソースにしてあります

<NewBlock/>

<NewBlock/>

当面は、XPDFJを含むバージョン0.7の公開→しました

今後の大きな展開としては

1. XPDFJを充実させて本を一冊書いてみる
2. PDFのフォーム、スライドショー、注釈、暗号化、電子署名などへの対応→暗号化とスライドショーは一応できます
3. 既存のPDFの編集機能
4. MathMLによる数式記述
5. SVGによる線画図形記述

PDFJは次の場所にあります

http://hp1.jonex.ne.jp/~nakajima.yasushi/

メーリングリストがあります

mailto:nakajima.yasushi-pdfj-subscribe@jonex.ne.jp

</objects> <call> <call> <eval>print "page",$page->pagenum,"\n"</eval> <Shape> <call> </call> </Shape> </call> </call>