PDFの理解を深めるため、PDFをもう少しだけ掘り下げようと思う。簡単なPDFをorg-tangleで生成できる事が今回のゴールだ。
PDFの構造
ヘッダ
ファイルの先頭にはPDFのバージョンを指定する。最新は2.0のようだった。
%PDF-2.0
ボディ
1 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<<
/Type /Pages
/Kids [4 0 R]
/Count 1
>>
endobj
フォントを設定する。フォントは埋め込む事もできるが、この場合は、埋め込まれている訳ではないため、指定したフォントが、PDFを表示するシステムにインストールされている必要がある。
3 0 obj
<<
/Font <<
/F0 <<
/Type /Font
/BaseFont /Arial
/Subtype /Type1
>>
>>
>>
endobj
ページを設定する。 /Parent
には、親となるページツリーの要素番号を指定する。 /Contents
には、そのページに表示するコンテンツの要素番号を指定する。
4 0 obj
<<
/Type /Page
/Parent 2 0 R
/Resources 3 0 R
/MediaBox [0 0 595 842]
/Contents 5 0 R
>>
endobj
ページに表示するためのコンテンツを設定する。ここでは「Hello, world!」という文字を表示している。要素番号を定義している行の直後に << >>
という所がある。これは後に続くストリームの長さを指定する。ここでは計算が面倒なので省略する。
5 0 obj
<< >>
stream
1. 0. 0. 1. 50. 720. cm
BT
/F0 36 Tf
(Hello, world!) Tj
ET
endstream
endobj
クロスリファレンステーブル
本来はクロスリファレンステーブルを挿入するべきだけれど、位置を計算する事が面倒だったので省略する。
xref
トレイラー
trailer
<<
/Size 6
/Root 1 0 R
>>
startxref
0
%%EOF
org-tangleでの出力とできあがったPDF
これは直接PDFとは関係ない。この文書はOrg-modeで記述している。org-babel-tangleを使うと、この記述をファイルに書き出す事ができる。
M-x org-babel-tangle
これで出力されたPDFはここから取得できる。
参考
- https://ayageman.blogspot.com/2020/01/emacs-org-babel-tangle.html
- https://aznote.jakou.com/prog/pdf/01_about.html
- https://blog.symdon.info/posts/1672220542/
- https://blog.symdon.info/posts/1672718254/
- https://codezine.jp/article/detail/84
- https://itchyny.hatenablog.com/entry/2015/09/16/100000#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%A7%8B%E9%80%A0
- https://orgmode.org/manual/Extracting-Source-Code.html
- https://qiita.com/zawawahoge/items/4312649f8d56f8983ffb
- https://rapidreport.systembase.co.jp/font.html
- https://techracho.bpsinc.jp/west/2018_12_07/65062
- https://wiki.suikawiki.org/n/.pem%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
- https://www.antenna.co.jp/pdf/reference/pdftext.html
- https://www.pdf-tools.trustss.co.jp/Syntax/catalog.html
- https://www.pdf-tools.trustss.co.jp/Syntax/catalog.html#contents
- https://www.pdf-tools.trustss.co.jp/Syntax/catalog.html#page
- https://www.pdf-tools.trustss.co.jp/Syntax/fileStruct.html
- https://www.pdf-tools.trustss.co.jp/Syntax/fileStruct.html#fileTrailer
- https://www.pdf-tools.trustss.co.jp/Syntax/font.html