class Nguyen::Fdf
Map keys and values to Adobe's FDF format.
Straight port of Perl's PDF::FDF::Simple by Steffen Schwigon. Parsing FDF files is not supported (yet).
Constants
- FOOTER
Attributes
options[R]
Public Class Methods
new(data = {}, options = {})
click to toggle source
# File lib/nguyen/fdf.rb, line 11 def initialize(data = {}, options = {}) @data = data @options = { file: nil, ufile: nil, id: nil }.merge(options) end
Public Instance Methods
save_to(path)
click to toggle source
write fdf content to path
# File lib/nguyen/fdf.rb, line 39 def save_to(path) File.write(path, to_fdf) end
to_fdf()
click to toggle source
generate FDF content
# File lib/nguyen/fdf.rb, line 21 def to_fdf fdf = header @data.each do |key, value| if Hash === value value.each do |sub_key, sub_value| fdf << field("#{key}_#{sub_key}", sub_value) end else fdf << field(key, value) end end fdf << footer return fdf end
Protected Instance Methods
field(key, value)
click to toggle source
# File lib/nguyen/fdf.rb, line 59 def field(key, value) "<</T(#{key})/V" + (Array === value ? "[#{value.map{ |v|"(#{quote(v)})" }.join}]" : "(#{quote(value)})") + ">>\n" end
header()
click to toggle source
# File lib/nguyen/fdf.rb, line 45 def header header = "%FDF-1.2\n\n1 0 obj\n<<\n/FDF << /Fields 2 0 R" # /F header << "/F (#{options[:file]})" if options[:file] # /UF header << "/UF (#{options[:ufile]})" if options[:ufile] # /ID header << "/ID[" << options[:id].join << "]" if options[:id] header << ">>\n>>\nendobj\n2 0 obj\n[" return header end
quote(value)
click to toggle source
# File lib/nguyen/fdf.rb, line 65 def quote(value) value.to_s.strip. gsub( /\\/, '\\' ). gsub( /\(/, '\(' ). gsub( /\)/, '\)' ). gsub( /\n/, '\r' ) end