2011/07/25

cl-pdf はもともと日本語 True Type フォントが使えたよ

cl-pdf はもともと日本語 True Type フォントが使えたよ。

unicode-readme.txt に書かれているとおりフォントメトリクスファイルを使ってやれば使えた。でも、 TakaoExMincho の方は表示されないグリフがあったりいろいろおかしい。

(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload :cl-typesetting)
(ql:quickload :trivial-shell))

(defpackage :try-cl-typesetting
(:use :cl :typeset))

(in-package :try-cl-typesetting)

;; cl-pdf/unicode-readme.txt に書かれているとおり
;; ttf2pt1 を使ってフォントメトリクスファイルを作成する。
(defvar *ufm-dir* (ensure-directories-exist #p"/tmp/ufm/"))
(defvar *ttf2pt1* "/home/ancient/tmp/ttf2pt1-cl-pdf/ttf2pt1")
(let ((*default-pathname-defaults* (pathname *ttf2pt1*)))
(loop for font in '(#p"/usr/share/fonts/truetype/takao/TakaoExMincho.ttf"
#p"/usr/share/fonts/truetype/ttf-mplus/mplus-1m-regular.ttf")
for ufm = (merge-pathnames *ufm-dir* (pathname-name font))
do (trivial-shell:shell-command
(format nil "~a -a -F ~a ~a" *ttf2pt1* font ufm))
(pdf:load-ttu-font (merge-pathnames ufm "x.ufm") font)))
;; ↑ちょっと時間がかかる。


(defun foo (&optional (file #P"/tmp/hello.pdf"))
(pdf:with-document ()
(pdf:with-page ()
(let* ((text "羊獏駱駝 あいう 123 ABCDEFGHIJKLMN abcdefghijklmn. 第9条 日本国民は、正義と秩序を基調とする国際平和を誠実に希求し、国権の発動たる戦争と、武力による威嚇又は武力の行使は、国際紛争を解決する手段としては、永久にこれを放棄する。2 前項の目的を達するため、陸海空軍その他の戦力は、これを保持しない。国の交戦権は、これを認めない。")
(content
(compile-text ()
(vspace 100)
(paragraph (:h-align :left :font "TakaoExMincho" :font-size 18)
text)
(paragraph (:h-align :left :font "mplus-1m-regular" :font-size 18)
text))))
(typeset::draw-block content 20 800 500 700)))
(pdf:write-document file))
(trivial-shell:shell-command (format nil "evince ~a" file)))

(foo)

0 件のコメント: