PicoPDF

カタログ構造 🔗

PDFのボディー部はカタログ(Catalog)を頂点とするツリー構造になっている。
ページツリー(Pages)には各ページ(Page)の配列を持っている。
ページにはフォントや画像などのリソース情報と、コンテンツ内容(Contents)を持っている。

graph TD;
    Catalog --> Pages;
    Pages --> Page1["Page[1]"];
    Pages --> Page2["Page[2]"];
    Pages --> Page3["Page[3]"];
    Page1 --> Contents1["Contents"];
    Page2 --> Contents2["Contents"];
    Page3 --> Contents3["Contents"];

1ページのみ、白紙のPDFのサンプルは次のようになる。

コンテンツストリーム 🔗

コンテンツにはストリームでページの内容が記載される。
スタックベースのコマンド後置き記法が使用される。
%以降がコメントとなる。
座標は左下を(0,0)とする。(数学の座標と同じ)

テキスト描画 🔗

BTETで囲んだ間にテキスト描画オペレータを記述する。

BT
  /F0 10 Tf        % フォント/F0をサイズ10で指定
  100 200 Td       % 左から100、下から200の位置にテキスト描画位置をセット
  (Hello World) Tj % "Hello World"を描画
ET

PicoPDFではOpenTypeフォントをGID指定するため、Tjオペレータで指定するのはGIDになる。

パス描画 🔗

qQで囲んだ間にパス描画オペレータを記述する。

q
  0 0.5 1 RG % 前景色をR=0、G=0.5、B=1で設定する、カラーコードであれば#0080FFである
  1 w        % 線の幅を1にする
  100 200 m  % 左から100、下から200の位置に描画位置をセット
  25 50 l    % 相対位置を左から25、下から50に移動しラインを設定
  S          % ラインを描画
Q