]> source.dussan.org Git - redmine.git/commitdiff
Fix for ruby1.9.3.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 30 Jan 2012 22:53:53 +0000 (22:53 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 30 Jan 2012 22:53:53 +0000 (22:53 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8739 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/export/pdf.rb

index f6d6f8cb1c740a19b05a4a6bcb1a212fee437bb7..f44612c6fa9c93933784b82c36cefe06d4fc08fd 100644 (file)
@@ -98,7 +98,7 @@ module Redmine
 
         def textstring(s)
           # Format a text string
-          if s.chars.first == '<'  # This means the string is hex-dumped.
+          if s =~ /^</  # This means the string is hex-dumped.
             return s
           else
             return '('+escape(s)+')'
@@ -146,11 +146,21 @@ module Redmine
         end
 
         def Bookmark(txt, level=0, y=0)
-          utf16 = Iconv.conv('UTF-16', 'UTF-8', txt)
           if (y == -1)
             y = GetY()
           end
-          @outlines << {:t => utf16, :l => level, :p => PageNo(), :y => (@h - y)*@k}
+          @outlines << {:t => txt, :l => level, :p => PageNo(), :y => (@h - y)*@k}
+        end
+
+        def bookmark_title(txt)
+          txt = begin
+            utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt)
+            hextxt = "<FEFF"  # FEFF is BOM
+            hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join
+            hextxt << ">"
+          rescue
+            txt
+          end || ''
         end
 
         def putbookmarks
@@ -184,7 +194,7 @@ module Redmine
           n=self.n+1
           @outlines.each_with_index do |o, i|
             newobj()
-            out('<</Title '+textstring(o[:t]))
+            out('<</Title '+bookmark_title(o[:t]))
             out("/Parent #{n+o[:parent]} 0 R")
             if (o[:prev])
               out("/Prev #{n+o[:prev]} 0 R")