我正在尝试使用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),以防万一。
答案 0 :(得分:3)
(setf pdf:*compress-streams* nil)
应该有所帮助。它试图将二进制数据写入字符流,虽然它适用于LispWorks和其他一些系统,但它并不适用于所有地方,特别是在SBCL上无法使用。
答案 1 :(得分:1)
最后我不得不git svn clone http://www.fractalconcept.com:8000/public/open-source/cl-pdf
安装它。
对于newbs(因为我记得Common Lisp的新手听到“只是做结帐并安装它”是多么令人沮丧):
1.如上所述结帐(我假设您从现在开始在您的主目录中完成此操作)
2.在tar -czvf ~/cl-pdf.tar.gz ~/cl-pdf
中键入(关键是要获取文件夹的tarball。你也可以通过GUI完成这一点,它没有任何区别)
3.点击您的SBCL提示并输入
(require 'asdf) (require 'asdf-install)
4.如果您已使用cl-pdf
安装了(asdf-install:install 'cl-pdf)
,则需要输入(asdf-install:uninstall 'cl-pdf)
5.Type (asdf-install:install "/home/[your home folder name]/cl-pdf.tar.gz")
我在整个过程中遇到了一个编译错误,我刚刚选择了[Accept] for。它似乎仍然可以正常工作。
希望即将发布的quicklisp将减少对此类打包的需求。