Description
A library for PDF generation.
Author
Marc Battyani and Bruce Butterfield
Repository
This egg is hosted on the CHICKEN Subversion repository:
https://anonymous@code.call-cc.org/svn/chicken-eggs/release/5/pdf
If you want to check out the source code repository of this egg and you are not familiar with Subversion, see this page.
Requirements
srfi-1, regex, format
Documentation
Examples
(import scheme (chicken base) (chicken random) (prefix pdf pdf:))
(define random pseudo-random-integer)
(define-constant pi 3.14159)
(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)