#:g1: pdfの紹介

Posted 2014-09-27 21:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の271日目です。

pdfとはなにか

 pdfは、PDFをChickenで扱うためのライブラリです。Marc Battyani氏作のCommon LispのPDFライブラリであるcl-pdfをBruce Butterfield氏がCLOS部分を構造体を使うようにしてSchemeに移植したものをMatt Gushee氏がChickenに移植したもののようです。

パッケージ情報

パッケージ名pdf
Chicken eggs:pdf - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install pdf

すれば、

(use pdf)

(require-library pdf)

で使えます。

試してみる

 Bruce Butterfield氏のコメントによれば、当初CLOS部分の置き換えは、PLT Scheme(Racket)のクラスライブラリを使おうかと思ったそうですが、他の処理系でも使いたかったので移植性を考えて構造体を採用したそうです。

 こんな感じで書けば、

(define (Rotate-Demo)
  (with-document-to-file "Rotate-Demo.pdf"
   (let ((noto-sans (build-font "NotoSansJapanese")))
     (with-page
      (in-text-mode
       (set-font (font-name noto-sans) 36)
       (move-text 100 750)
       (draw-text "Rotate-Demo"))
      (translate 230 500)
      (do ((j 0 (+ j 1))
           (i 0.67 (* i 1.045)))
        ((= j 101))
        (in-text-mode
         (set-font (font-name noto-sans) i)
         (move-text (* i 3) 0)
         (draw-text "Rotate"))
        (rotate 18)))
     (with-page
      (in-text-mode
       (set-font (font-name noto-sans) 40)
       (move-text 230 500)
       (draw-text "That's All, Folks!"))))))

こんな感じのPDFが生成されます。

rotate-demo

まとめ

 今回は、pdfを紹介してみました。
他のSchemeの処理系にも移植とのことですが実際どうなんでしょう。ちらっと眺めた感じでは、確かにregexとfmtがあれば動きそうではあります。

comments powered by Disqus