[cl-pdf-devel] Re: [cl-typesetting-devel] Unicode?

Peter Seibel peter at gigamonkeys.com
Sat Sep 8 02:47:08 UTC 2007


Dmitriy Ivanov wrote:
> Hello Peter,
> 
> | I've got this simple test program which, as you can see, attempts to
> | use one of the LatinModern unicode fonts and tries to render some text
> | that contains a unicode emdash (code-point #x2014).
> |
> | (defpackage :foo (:use :cl :cl-pdf))
> |
> | (in-package :foo)
> |
> | (defun test-unicode  (&optional (file #P"foo.pdf"))
> |    (pdf:with-document ()
> |      (pdf:with-page ()
> |        (pdf:with-outline-level ("Example"
> | (pdf:register-page-reference)) (let ((font (pdf:get-font
> | "LMRoman12-Regular")))   (pdf:in-text-mode
> |     (pdf:set-font font 14.0)
> |     (pdf:move-text 100 800)
> |     (pdf:draw-text
> |               (format nil "This ~c is a test." (code-char #x2014)))))))
> |      (pdf:write-document file)
> |      file))
> |
> |
> | When I run this function in generates a file without error but the
> | emdash is nowhere to be seen. Is this a problem with the font (which
> | was loaded from an .afm file not a .ufm) or with cl-pdf or with
> | something I'm doing wrong?
> 
> First, I believe that is a cl-pdf-devel question, not cl-typesetting-devel
> :-)

Hmmmm, I thought the lists had been collapsed into a single list. Guess 
I misremembered.

Anyway, after some more investigation, I think the problem goes much 
deeper than just a font metric issue. I looked at the PDF file generated 
when I made the text was (format nil "A~cB" (code-char #x2014). In the 
PDF there's a:

   (A?B) Tj

where the ? is actually the character #x14, i.e. the bottom byte of the 
#x2014 character. It conceivable that through some proper manipulation 
of external-formats somewhere I could fix that but it wouldn't help 
because, as far as I understand the PDF spec, (...) strings can only 
contain ASCII characters. There is obviously some way to include Unicode 
text (uncoded in UTF-16BE, I believe) in PDFs but it's much more 
involved than just throwing some text between ()'s. I think the relevant 
sections of the PDF spec may be 5.6 Composite Fonts and following.

-Peter

-- 
Peter Seibel                     : peter at gigamonkeys.com
A Billion Monkeys Can't be Wrong : http://www.gigamonkeys.com/blog/
Practical Common Lisp            : http://www.gigamonkeys.com/book/
Coders at Work                   : http://www.codersatwork.com/



More information about the cl-pdf-devel mailing list