ошибка вывода cl-pdf - PullRequest
       41

ошибка вывода cl-pdf

4 голосов
/ 19 октября 2010

Я пытаюсь использовать cl-pdf для некоторой довольно простой генерации PDF, но я запутался в примерах (что по меньшей мере стыдно).

Когда я запускаю первый пример, включенный в пакет

(defun example1 (&optional (file #P"/tmp/ex1.pdf"))
  (pdf:with-document ()
    (pdf:with-page ()
      (pdf:with-outline-level ("Example" (pdf:register-page-reference))
        (let ((helvetica (pdf:get-font "Helvetica")))
          (pdf:in-text-mode
           (pdf:set-font helvetica 36.0)
           (pdf:move-text 100 800)
           (pdf:draw-text "cl-pdf: Example 1"))
          (pdf:translate 230 500)
          (loop repeat 150
         for i = 0.67 then (* i 1.045)
         do (pdf:in-text-mode
             (pdf:set-font helvetica i)
             (pdf:set-rgb-fill (/ (random 255) 255.0)
                               (/ (random 255) 255.0)
                               (/ (random 255) 255.0))
             (pdf:move-text (* i 3) 0)
             (pdf:show-text "cl-typesetting"))
           (pdf:rotate 13)))))
    (pdf:write-document file)))

, запустив (example1 #P"/home/inaimathi/Desktop/ex1.pdf"), я получаю эту ошибку

#<SB-SYS:FD-STREAM for "file /home/inaimathi/Desktop/test.pdf" 
{CF9D931}> is not a binary output stream. 
    [Condition of type SIMPLE-TYPE-ERROR]

Restarts:
 0: [ABORT] Exit debugger, returning to top level.

То же самое происходит, когда я звоню (example1) или когда я звоню

(with-open-file 
     (test-file #P"/home/inaimathi/Desktop/ex1.pdf" 
     :direction :output :if-does-not-exist :create) 
   (example1 test-file))

Наконец, если я попытаюсь

(with-open-file 
     (test-file #P"/home/inaimathi/Desktop/ex1.pdf" 
     :direction :output :if-does-not-exist :create 
     :element-type '(unsigned-byte 8)) 
   (example1 test-file))

Я получаю ошибку

#<SB-SYS:FD-STREAM for "file /home/inaimathi/Desktop/test.pdf" 
{D197C99}> is not a character output stream.
   [Condition of type SIMPLE-TYPE-ERROR]

Restarts:
 0: [ABORT] Exit debugger, returning to top level.

Есть ли способ объявить binary character stream? Как получить простой вывод из cl-pdf? Я использую SBCL прямо из репозиториев Debian (я думаю, что это 1.0.29), на случай, если это имеет значение.

Ответы [ 2 ]

3 голосов
/ 20 октября 2010

(setf pdf:*compress-streams* nil) должно помочь.Он пытается записать двоичные данные в символьный поток, и хотя он работает на LispWorks и некоторых других системах, он не работает везде, особенно в SBCL.

1 голос
/ 20 октября 2010

РЕДАКТИРОВАТЬ: Это то, что я в итоге сделал. Решение по xach выше также будет работать.

В конце концов мне пришлось git svn clone <a href="http://www.fractalconcept.com:8000/public/open-source/cl-pdf" rel="nofollow">http://www.fractalconcept.com:8000/public/open-source/cl-pdf</a> и установить его.

Для новичков (так как я помню, как расстраивает кого-то новичка в Common Lisp услышать «просто сделайте заказ и установите его»):

1. Выполните оформление заказа, как указано выше (я полагаю, что вы уже сделали это в своем домашнем каталоге)

2.Введите tar -czvf ~/cl-pdf.tar.gz ~/cl-pdf (дело в том, чтобы получить тарбол из папки. Вы также можете сделать это через графический интерфейс, без разницы)

3.Введите запрос SBCL и введите

(require 'asdf)
(require 'asdf-install)

4.Если вы уже установили cl-pdf, используя (asdf-install:install 'cl-pdf), вам нужно будет ввести (asdf-install:uninstall 'cl-pdf)

5.Тип (asdf-install:install "/home/[your home folder name]/cl-pdf.tar.gz")

В течение этого процесса я получил одну ошибку компиляции, для которой я только что выбрал [Accept]. Кажется, все еще работает нормально.

Надеемся, что предстоящий выпуск quicklisp уменьшит потребность в такого рода поиске пакетов.

...