[PHP-users 14773]Re: レイアウト表現

Osamu Shigematsu m5issige @ mr.hitachi-medical.co.jp
2003年 4月 22日 (火) 16:21:00 JST


重松です。こんにちは。

> PHP & PostgreSQL + platex & dvipdfm を使って、アンケートの集
> 計、版下出力を行うシステムです。TeX は自由度が高いのはいいの
> ですが、アンケートのような案件の場合、文字量によって表組みの
> レイアウトが著しく乱れたり、画像を思うとおりの場所に置けなかっ
> たりと結構苦しみました。
> 
> 私は TeX に触れたのは初めてだったため文法を学ぶのに結構時間
> が掛かったことも付け加えておきます。

TeX が融通が利かないと勘違いされそうなので:

(1) 画像を思うとおりの場所に置けない
そんなことはありません。
もともと pdflib と同じように、全体を picture 環境にして、
その中に自由に配置すればよいですし、それ自体を .sty にしておけば、
同じレイアウトのものを作るときには、データのみを記述するだけですみます。

実例)
Tama Communications Corporation が配布している履歴書スタイルファイル

(2) 文字量によって表組みのレイアウトが著しく乱れる
表の大きさを正しく計算すればいいですし、tabular 環境では、
p{10zw} とすると、幅全角 10 文字分で、自動折り返しになり、
横に間延びしません。

たとえば、実例で紹介した履歴書 PDF を、ユーザが HTML form で入力して、
がんがん量産することを考えましょう。

.tex ファイルの雛形を用意します。具体的に書かないといけないところ、
たとえば、印刷する人の名前などを PHP で記述に変更します。

こうです:

\姓{<?= $familyName ?>} % 姓
\名{<?= $firstName ?>} % 名

こうしてできた、.tex ファイルを include により処理します。

$familyName = sanitizeForTex($_PUT['familyName']);
$firstName = sanitizeForTex($_PUT['lastName']);
// 以下必要な変数の無害化, TeX の特殊文字をエスケープ処理する
ob_start();
include('resume.tex'); // 変数の埋め込み
$tex = ob_get_contents();
ob_end_clean();

そうすることで、$tex に、処理すべき文字列が入りますので、
一時ファイル置き場に出力して、あとは、exec などで、処理します。
処理が終われば、出来上がった pdf を適切なヘッダを header 文で出力して、
垂れ流せば、おしまいです。
# 複雑なものは、タイムアウトに注意する必要がありますが。。。

-- 
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>




PHP-users メーリングリストの案内