chickadee » pdf

Outdated egg!

This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.

If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.

pdf

description

An egg for PDF generation

author

Marc Battyani and Bruce Butterfield

requirements

None

examples

(require-library pdf)
(import (prefix pdf pdf:))
(define-constant pi 3.14159) ; Maybe use mathh egg?

(define-syntax dotimes
  (syntax-rules ()
    ((_ (index maxval) body ...)
     (do ((index 0 (+ index 1)))
       ((= index maxval))
       body ...))))

(define (ex1)
  (pdf:with-document-to-file "ex1.pdf"
   (let ((helvetica (pdf:build-font "Helvetica"))
         (courier (pdf:build-font "Courier")))
     (pdf:with-page
      (pdf:in-text-mode
       (pdf:set-font (pdf:font-name helvetica) 36)
       (pdf:move-text 100 750)
       (pdf:draw-text "scm-pdf: Example 1"))
      (pdf:in-text-mode
       (dotimes (i 25)
                    (pdf:set-font (pdf:font-name helvetica) (* i 1.5))
                    (pdf:move-text (+ i 5) (+ i 10))
                    (pdf:draw-text "Helvetica")))
      (pdf:in-text-mode
       (dotimes (i 25)
                    (pdf:set-font (pdf:font-name courier) (* i 1.5))
                    (pdf:move-text (+ i 5) (- 50 (+ i 10)))
                    (pdf:draw-text "Courier")))))))

(define (ex2)
  (pdf:with-document-to-file "ex2.pdf"
   (let ((helvetica (pdf:build-font "Helvetica")))
     (pdf:with-page
      (pdf:in-text-mode
       (pdf:set-font (pdf:font-name helvetica) 36)
       (pdf:move-text 100 750)
       (pdf:draw-text "scm-pdf: Example 2"))
      (pdf:translate 230 500)
      (do ((j 0 (+ j 1))
           (i 0.67 (* i 1.045)))
        ((= j 101))
        (pdf:in-text-mode
         (pdf:set-font (pdf:font-name helvetica) i)
         (pdf:move-text (* i 3) 0)
         (pdf:draw-text "rotation"))
        (pdf:rotate 18)))
     (pdf:with-page
      (pdf:in-text-mode
       (pdf:set-font (pdf:font-name helvetica) 40)
       (pdf:move-text 230 500)
       (pdf:draw-text "That's All, Folks!"))))))

(define (ex3)
  (pdf:with-document-to-file "ex3.pdf"
   (let ((helvetica (pdf:build-font "Helvetica")))
     (pdf:with-page (800 1000)
      (pdf:in-text-mode
       (pdf:set-font (pdf:font-name helvetica) 36.0)
       (pdf:move-text 100 900)
       (pdf:draw-text "scm-pdf: Example 3"))
      (pdf:move-to (+ 10 (random 500))(+ 10 (random 400)))
      (pdf:set-gray-fill 0.5)
      (dotimes (i 50)
               (pdf:line-to (+ 50 (random 500)) (+ 50 (random 400))))
      (pdf:close-even-odd-fill-and-stroke)
      (pdf:move-to (+ 50 (random 500))(+ 400 (random 400)))
      (pdf:set-rgb-fill 0.5 0.5 0.8)
      (pdf:set-rgb-stroke 0.9 0.5 0.1)
      (dotimes (i 50)
               (pdf:bezier2-to (+ 50 (random 500)) (+ 400 (random 400))
                           (+ 50 (random 500)) (+ 400 (random 400))))
      (pdf:close-even-odd-fill-and-stroke)))))

(define (ex4)
  (pdf:with-document-to-file "ex4.pdf"
   (let ((helvetica (pdf:build-font "Helvetica")))
     (pdf:with-page
       (pdf:in-text-mode
        (pdf:set-font (pdf:font-name helvetica) 36.0)
        (pdf:move-text 100 750)
        (pdf:draw-text "scm-pdf: Example 4"))
       (pdf:set-rgb-stroke 0.1 0.1 0.1)
       (pdf:set-rgb-fill 0.8 0.8 0.8)
       (let ((x 50) (y 600))
         (dotimes (i 2)
                  (pdf:rectangle x y 500 140 10)
                  (pdf:close-fill-and-stroke)
                  (set! y (- y 180))))
       (pdf:translate 50 670)
       (let ((x 50) (y 0))
         (do ((i 0 (+ i 1))
              (j 8 (* j 1.05)))
           ((= i 4))
           (pdf:set-rgb-fill (* 0.1 j) (* 0.01 j) (* 0.02 j))
           (pdf:circle x y (* 4 j))
           (pdf:close-fill-and-stroke)
           (pdf:ellipse (+ x 250) y (* 5 j) (* 4 j))
           (pdf:close-fill-and-stroke)
           (set! x (+ x 50))))
       
       (pdf:translate 0 -180)
       (pdf:regular-polygon 150 0 50 7 8)
       (pdf:close-fill-and-stroke)
       (pdf:star 350 0 50 30 6 5)
       (pdf:close-fill-and-stroke)
       
       (pdf:set-rgb-fill 0.8 0.6 0.2)
       (pdf:regular-polygon 150 0 30 5 4)
       (pdf:close-fill-and-stroke)
       (pdf:star 350 0 40 20 4 6)
       (pdf:close-fill-and-stroke)
       
       (pdf:set-rgb-fill 0.4 0.8 0.7)
       (pdf:regular-polygon 150 0 15 3 3)
       (pdf:close-fill-and-stroke)
       (pdf:star 350 0 35 10 12 1)
       (pdf:close-fill-and-stroke)
       
       (pdf:set-line-width 0.5)
       (do ((r 2 (+ r 2)))
         ((= r 100))
         (pdf:set-rgb-stroke (* 0.01 (random 100))
                             (* 0.01 (random 100))
                             (* 0.01 (random 100)))
         (pdf:arc 250 -230 r (* pi 0.001 (random 2000))
                             (* pi 0.001 (random 2000)))
         (pdf:stroke))))))


(ex1)
(ex2)
(ex3)
(ex4)