((section 2 "Outdated egg!" (p "This is an egg for CHICKEN 4, the unsupported old release.  You're almost certainly looking for " (int-link "/eggref/5/pdf" "the CHICKEN 5 version of this egg") ", if it exists.") (p "If it does not exist, there may be equivalent functionality provided by another egg; have a look at the " (link "https://wiki.call-cc.org/chicken-projects/egg-index-5.html" "egg index") ". Otherwise, please consider porting this egg to the current version of CHICKEN.")) (section 2 "pdf" (toc) (section 3 "description" (p "An egg for PDF generation")) (section 3 "author" (p "Marc Battyani and Bruce Butterfield")) (section 3 "requirements" (p "None")) (section 3 "examples" (highlight scheme "(require-library pdf)\n(import (prefix pdf pdf:))\n(define-constant pi 3.14159) ; Maybe use mathh egg?\n\n(define-syntax dotimes\n  (syntax-rules ()\n    ((_ (index maxval) body ...)\n     (do ((index 0 (+ index 1)))\n       ((= index maxval))\n       body ...))))\n\n(define (ex1)\n  (pdf:with-document-to-file \"ex1.pdf\"\n   (let ((helvetica (pdf:build-font \"Helvetica\"))\n         (courier (pdf:build-font \"Courier\")))\n     (pdf:with-page\n      (pdf:in-text-mode\n       (pdf:set-font (pdf:font-name helvetica) 36)\n       (pdf:move-text 100 750)\n       (pdf:draw-text \"scm-pdf: Example 1\"))\n      (pdf:in-text-mode\n       (dotimes (i 25)\n                    (pdf:set-font (pdf:font-name helvetica) (* i 1.5))\n                    (pdf:move-text (+ i 5) (+ i 10))\n                    (pdf:draw-text \"Helvetica\")))\n      (pdf:in-text-mode\n       (dotimes (i 25)\n                    (pdf:set-font (pdf:font-name courier) (* i 1.5))\n                    (pdf:move-text (+ i 5) (- 50 (+ i 10)))\n                    (pdf:draw-text \"Courier\")))))))\n\n(define (ex2)\n  (pdf:with-document-to-file \"ex2.pdf\"\n   (let ((helvetica (pdf:build-font \"Helvetica\")))\n     (pdf:with-page\n      (pdf:in-text-mode\n       (pdf:set-font (pdf:font-name helvetica) 36)\n       (pdf:move-text 100 750)\n       (pdf:draw-text \"scm-pdf: Example 2\"))\n      (pdf:translate 230 500)\n      (do ((j 0 (+ j 1))\n           (i 0.67 (* i 1.045)))\n        ((= j 101))\n        (pdf:in-text-mode\n         (pdf:set-font (pdf:font-name helvetica) i)\n         (pdf:move-text (* i 3) 0)\n         (pdf:draw-text \"rotation\"))\n        (pdf:rotate 18)))\n     (pdf:with-page\n      (pdf:in-text-mode\n       (pdf:set-font (pdf:font-name helvetica) 40)\n       (pdf:move-text 230 500)\n       (pdf:draw-text \"That's All, Folks!\"))))))\n\n(define (ex3)\n  (pdf:with-document-to-file \"ex3.pdf\"\n   (let ((helvetica (pdf:build-font \"Helvetica\")))\n     (pdf:with-page (800 1000)\n      (pdf:in-text-mode\n       (pdf:set-font (pdf:font-name helvetica) 36.0)\n       (pdf:move-text 100 900)\n       (pdf:draw-text \"scm-pdf: Example 3\"))\n      (pdf:move-to (+ 10 (random 500))(+ 10 (random 400)))\n      (pdf:set-gray-fill 0.5)\n      (dotimes (i 50)\n               (pdf:line-to (+ 50 (random 500)) (+ 50 (random 400))))\n      (pdf:close-even-odd-fill-and-stroke)\n      (pdf:move-to (+ 50 (random 500))(+ 400 (random 400)))\n      (pdf:set-rgb-fill 0.5 0.5 0.8)\n      (pdf:set-rgb-stroke 0.9 0.5 0.1)\n      (dotimes (i 50)\n               (pdf:bezier2-to (+ 50 (random 500)) (+ 400 (random 400))\n                           (+ 50 (random 500)) (+ 400 (random 400))))\n      (pdf:close-even-odd-fill-and-stroke)))))\n\n(define (ex4)\n  (pdf:with-document-to-file \"ex4.pdf\"\n   (let ((helvetica (pdf:build-font \"Helvetica\")))\n     (pdf:with-page\n       (pdf:in-text-mode\n        (pdf:set-font (pdf:font-name helvetica) 36.0)\n        (pdf:move-text 100 750)\n        (pdf:draw-text \"scm-pdf: Example 4\"))\n       (pdf:set-rgb-stroke 0.1 0.1 0.1)\n       (pdf:set-rgb-fill 0.8 0.8 0.8)\n       (let ((x 50) (y 600))\n         (dotimes (i 2)\n                  (pdf:rectangle x y 500 140 10)\n                  (pdf:close-fill-and-stroke)\n                  (set! y (- y 180))))\n       (pdf:translate 50 670)\n       (let ((x 50) (y 0))\n         (do ((i 0 (+ i 1))\n              (j 8 (* j 1.05)))\n           ((= i 4))\n           (pdf:set-rgb-fill (* 0.1 j) (* 0.01 j) (* 0.02 j))\n           (pdf:circle x y (* 4 j))\n           (pdf:close-fill-and-stroke)\n           (pdf:ellipse (+ x 250) y (* 5 j) (* 4 j))\n           (pdf:close-fill-and-stroke)\n           (set! x (+ x 50))))\n       \n       (pdf:translate 0 -180)\n       (pdf:regular-polygon 150 0 50 7 8)\n       (pdf:close-fill-and-stroke)\n       (pdf:star 350 0 50 30 6 5)\n       (pdf:close-fill-and-stroke)\n       \n       (pdf:set-rgb-fill 0.8 0.6 0.2)\n       (pdf:regular-polygon 150 0 30 5 4)\n       (pdf:close-fill-and-stroke)\n       (pdf:star 350 0 40 20 4 6)\n       (pdf:close-fill-and-stroke)\n       \n       (pdf:set-rgb-fill 0.4 0.8 0.7)\n       (pdf:regular-polygon 150 0 15 3 3)\n       (pdf:close-fill-and-stroke)\n       (pdf:star 350 0 35 10 12 1)\n       (pdf:close-fill-and-stroke)\n       \n       (pdf:set-line-width 0.5)\n       (do ((r 2 (+ r 2)))\n         ((= r 100))\n         (pdf:set-rgb-stroke (* 0.01 (random 100))\n                             (* 0.01 (random 100))\n                             (* 0.01 (random 100)))\n         (pdf:arc 250 -230 r (* pi 0.001 (random 2000))\n                             (* pi 0.001 (random 2000)))\n         (pdf:stroke))))))\n\n\n(ex1)\n(ex2)\n(ex3)\n(ex4)"))))