Index: pdf.lisp
===================================================================
--- pdf.lisp	(revision 6)
+++ pdf.lisp	(working copy)
@@ -4,6 +4,8 @@
 
 (in-package #:pdf)
 
+(defparameter *version* 2.03)
+
 (defparameter +pdf-header+ "%PDF-1.4")
 
 (defvar *document* nil)
@@ -47,20 +49,39 @@
    (fonts :accessor fonts :initform '())
    (gstates :accessor gstates :initform '())
    (encodings :accessor encodings :initform '())
-   (last-object-number :accessor last-object-number :initform 0)))
+   (last-object-number :accessor last-object-number :initform 0)
+   (docinfo :accessor docinfo :initform nil)
+   (author :accessor author :initarg :author :initform nil)
+   (title  :accessor title :initarg :title :initform nil)
+   (keywords :accessor keywords :initarg :keywords :initform nil)
+   (subject :accessor subject :initarg :subject :initform nil)))
 
 (defmethod initialize-instance :after ((doc document) &rest init-options
-				       &key empty &allow-other-keys)
+				       &key empty author title subject keywords &allow-other-keys)
+  (declare (ignore init-options))
   (unless empty
     (let ((*document* doc))
       (setf (objects doc) (make-array 10 :fill-pointer 0 :adjustable t))
       (setf (catalog doc) (make-instance 'indirect-object))
+      (setf (docinfo doc) (make-instance 'indirect-object))
       (setf (root-page doc) (make-instance 'page-node))
       (setf (outline-root doc)(make-instance 'outline))
       (setf (content (catalog doc))
 	    (make-instance 'dictionary
 			   :dict-values `(("/Type" . "/Catalog")
-					  ("/Pages" . ,(root-page doc))))))))
+					  ("/Pages" . ,(root-page doc)))))
+      (setf (content (docinfo doc))
+            (make-instance 'dictionary
+                           :dict-values `(("/Creator" . ,(format nil "(cl-pdf version ~A)" *version*))
+                                          ,@(when author `(("/Author" . ,(format nil "(~A)" author))))
+                                          ,@(when title `(("/Title" . ,(format nil "(~A)" title))))
+                                          ,@(when subject `(("/Subject" . ,(format nil "(~A)" subject))))
+                                          ,@(when keywords `(("/Keywords" . ,(format nil "(~A)" keywords))))
+                                          ("/CreationDate" .
+                                            ,(multiple-value-bind (second minute hour date month year)
+                                                 (get-decoded-time)
+                                              (format nil "(D:~D~2,'0D~2,'0D~2,'0D~2,'0D~2,'0D)"
+                                                      year month date hour minute second)))))))))
 
 (defclass indirect-object ()
   ((obj-number :accessor obj-number :initform (incf (last-object-number *document*)) :initarg :obj-number)
@@ -426,6 +447,8 @@
 	   do (write-line xref s))
      (format s "trailer~%<< /Size ~d~%/Root " (length *xrefs*));(1- (length (objects document))))
      (write-object (catalog document))
+     (format s "/Info ")
+     (write-object (docinfo document))
      (format s "~%>>~%startxref~%~d~%%%EOF~%" startxref)))
 
 (defmethod write-document ((filename pathname) &optional (document *document*))
Index: chart.lisp
===================================================================
--- chart.lisp	(revision 6)
+++ chart.lisp	(working copy)
@@ -50,6 +50,7 @@
    ))
 
 (defmethod initialize-instance :after ((axis value-axis) &rest init-options &key &allow-other-keys)
+  (declare (ignore init-options))
   (compute-scale axis))
 
 (defclass histo-axis (axis)
@@ -251,21 +252,23 @@
 
 (defmethod initialize-instance :after ((histo histogram) &rest init-options &key
 				       x-axis-options y-axis-options legend-options &allow-other-keys)
+  (declare (ignore init-options))
   (setf (y-axis histo)
 	(apply #'make-instance 'vertical-value-axis
 	       :x (x histo) :y (y histo) :height (height histo)
-	       :min-value (reduce #'min (mapcar #'(lambda (values)
-						    (reduce #'min values))
-						(series histo)))
-	       :max-value (reduce #'max (mapcar #'(lambda (values)
-						    (reduce #'max values))
-						(series histo)))
-	       y-axis-options))
+               (append y-axis-options
+                       (list
+                        :min-value (reduce #'min (mapcar #'(lambda (values)
+                                                             (reduce #'min values))
+                                                         (series histo)))
+                        :max-value (reduce #'max (mapcar #'(lambda (values)
+                                                             (reduce #'max values))
+                                                         (series histo)))))))
   (setf (x-axis histo)
 	(apply #'make-instance 'horizontal-histo-axis
-	       :x (x histo) :y (y histo) :width (width histo)
-	       :label-names (label-names histo)
-	       x-axis-options))
+               :x (x histo) :y (y histo) :width (width histo)
+               :label-names (label-names histo)
+               x-axis-options))
   (when (> (length (series histo)) 1)
     (setf (legend histo)
 	(apply #'make-instance 'legend
@@ -330,6 +333,7 @@
 
 (defmethod initialize-instance :after ((obj pie-chart) &rest init-options &key no-legend
 				       legend-options &allow-other-keys)
+  (declare (ignore init-options))
   (unless no-legend
     (setf (legend obj)
 	  (apply #'make-instance 'legend
@@ -411,6 +415,7 @@
 
 (defmethod initialize-instance :after ((plot plot-xy) &rest init-options &key
 				       x-axis-options y-axis-options legend-options &allow-other-keys)
+  (declare (ignore init-options))
   (setf (y-axis plot)
 	(apply #'make-instance 'vertical-value-axis
 	       :x (x plot) :y (y plot) :height (height plot)
