[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 メーリングリストの案内