代码之家  ›  专栏  ›  技术社区  ›  Inaimathi

cl pdf输出错误

  •  4
  • Inaimathi  · 技术社区  · 14 年前

    我想用 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 ?如何得到简单的输出 氯化钯 ?我直接从DebianRepos中使用sbcl(我想是1.0.29),以防它很重要。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Xach    14 年前

    (setf pdf:*compress-streams* nil) 应该帮助。它试图将二进制数据写入一个字符流,虽然它在LispWorks和其他一些系统上工作,但它不在任何地方工作,特别是在sbcl上。

        2
  •  1
  •   Inaimathi    14 年前

    编辑:这就是我最终要做的。上面Xach的解决方案也可以工作。

    最后我不得不 git svn clone http://www.fractalconcept.com:8000/public/open-source/cl-pdf 然后安装。

    对于新手(因为我记得对于一个刚接触普通Lisp的人来说,听到“只需结账并安装它”是多么令人沮丧):

    1.如上所述进行结账(我假设从现在起您已经在您的主目录中进行了结账)

    2、Type在 tar -czvf ~/cl-pdf.tar.gz ~/cl-pdf (重点是得到一个文件夹的tarball。你也可以通过图形用户界面来完成这项工作,这没什么区别)

    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")

    在整个过程中,我得到了一个编译错误,我只是选择了[接受]作为它的编译错误。它似乎仍然工作得很好。

    希望即将发布的 quicklisp 将减少这种包搜索的需要。