Module: PDF::Core

### Home Classes Methods

### In Files

- lib/pdf/core.rb
- lib/pdf/core/annotations.rb
- lib/pdf/core/byte_string.rb
- lib/pdf/core/destinations.rb
- lib/pdf/core/document_state.rb
- lib/pdf/core/filter_list.rb
- lib/pdf/core/filters.rb
- lib/pdf/core/graphics_state.rb
- lib/pdf/core/literal_string.rb
- lib/pdf/core/name_tree.rb
- lib/pdf/core/object_store.rb
- lib/pdf/core/outline_item.rb
- lib/pdf/core/outline_root.rb
- lib/pdf/core/page.rb
- lib/pdf/core/page_geometry.rb
- lib/pdf/core/pdf_object.rb
- lib/pdf/core/reference.rb
- lib/pdf/core/renderer.rb
- lib/pdf/core/stream.rb

### Namespace

- MODULE PDF::Core::Errors
- MODULE PDF::Core::Filters
- MODULE PDF::Core::PageGeometry
- CLASS PDF::Core::FilterList
- CLASS PDF::Core::GraphicState
- CLASS PDF::Core::GraphicStateStack
- CLASS PDF::Core::Renderer
- CLASS PDF::Core::Stream

### Methods

- #PdfObject
- #real
- #real_params
- #string_to_hex
- #utf8_to_utf16

### Class/Module Index

Quicksearch

- PDF
- PDF::Core
- PDF::Core::Errors
- PDF::Core::FilterList
- PDF::Core::Filters
- PDF::Core::Filters::DCTDecode
- PDF::Core::Filters::FlateDecode
- PDF::Core::GraphicState
- PDF::Core::GraphicStateStack
- PDF::Core::PageGeometry
- PDF::Core::Renderer
- PDF::Core::Stream

No matching classes.

# PDF::Core

### Public Instance Methods

PdfObject(obj, in_content_stream = false) click to toggle source

Serializes Ruby objects to their PDF equivalents. Most primitive objects will work as expected, but please note that Name objects are represented by Ruby Symbol objects and Dictionary objects are represented by Ruby hashes (keyed by symbols)

    Examples:

       PdfObject(true)      #=> "true"
       PdfObject(false)     #=> "false"
       PdfObject(1.2124)    #=> "1.2124"
       PdfObject("foo bar") #=> "(foo bar)"
       PdfObject(:Symbol)   #=> "/Symbol"
       PdfObject(["foo",:bar, [1,2]]) #=> "[foo /bar [1 2]]"

    # File lib/pdf/core/pdf_object.rb, line 47
    def PdfObject(obj, in_content_stream = false)
      case(obj)
      when NilClass   then "null"
      when TrueClass  then "true"
      when FalseClass then "false"
      when Numeric
        obj = real(obj) unless obj.kind_of?(Integer)

        String(obj) # NOTE: this can fail on huge floating point numbers,
                    # but it seems unlikely to ever happen in practice.
      when Array
        "[" << obj.map { |e| PdfObject(e, in_content_stream) }.join(' ') << "]"
      when PDF::Core::LiteralString
        obj = obj.gsub(/[\\\n\r\t\b\f\(\)]/) { |m| "\\#{m}" }
        "(#{obj})"
      when Time
        obj = obj.strftime("D:%Y%m%d%H%M%S%z").chop.chop + "'00'"
        obj = obj.gsub(/[\\\n\r\t\b\f\(\)]/) { |m| "\\#{m}" }
        "(#{obj})"
      when PDF::Core::ByteString
        "<" << obj.unpack("H*").first << ">"
      when String
        obj = utf8_to_utf16(obj) unless in_content_stream
        "<" << string_to_hex(obj) << ">"
       when Symbol
         "/" + obj.to_s.unpack("C*").map { |n|
          if n < 33 || n > 126 || [35,40,41,47,60,62].include?(n)
            "#" + n.to_s(16).upcase
          else
            [n].pack("C*")
          end
         }.join
      when ::Hash
        output = "<< "
        obj.each do |k,v|
          unless String === k || Symbol === k
            raise PDF::Core::Errors::FailedObjectConversion,
              "A PDF Dictionary must be keyed by names"
          end
          output << PdfObject(k.to_sym, in_content_stream) << " " <<
                    PdfObject(v, in_content_stream) << "\n"
        end
        output << ">>"
      when PDF::Core::Reference
        obj.to_s
      when PDF::Core::NameTree::Node
        PdfObject(obj.to_hash)
      when PDF::Core::NameTree::Value
        PdfObject(obj.name) + " " + PdfObject(obj.value)
      when PDF::Core::OutlineRoot, PDF::Core::OutlineItem
        PdfObject(obj.to_hash)
      else
        raise PDF::Core::Errors::FailedObjectConversion,
          "This object cannot be serialized to PDF (#{obj.inspect})"
      end
    end

real(num) click to toggle source

    # File lib/pdf/core/pdf_object.rb, line 14
    def real(num)
      num.to_f.round(4)
    end

real_params(array) click to toggle source

    # File lib/pdf/core/pdf_object.rb, line 18
    def real_params(array)
      array.map { |e| real(e) }.join(" ")
    end

string_to_hex(str) click to toggle source

encodes any string into a hex representation. The result is a string with only 0-9 and a-f characters. That result is valid ASCII so tag it as such to account for behaviour of different ruby VMs

    # File lib/pdf/core/pdf_object.rb, line 29
    def string_to_hex(str)
      str.unpack("H*").first.force_encoding(::Encoding::US_ASCII)
    end

utf8_to_utf16(str) click to toggle source

    # File lib/pdf/core/pdf_object.rb, line 22
    def utf8_to_utf16(str)
      "\xFE\xFF".force_encoding(::Encoding::UTF_16BE) + str.encode(::Encoding::UTF_16BE)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.