def EncryptedPdfObject(obj, key, id, gen, in_content_stream=false)
case obj
when Array
"[" << obj.map { |e|
EncryptedPdfObject(e, key, id, gen, in_content_stream)
}.join(' ') << "]"
when Prawn::LiteralString
obj = obj.gsub(/[\\\n\(\)]/) { |m| "\\#{m}" }
"(#{obj})"
when Time
obj = obj.strftime("D:%Y%m%d%H%M%S%z").chop.chop + "'00'"
obj = obj.gsub(/[\\\n\(\)]/) { |m| "\\#{m}" }
"(#{obj})"
when String
PdfObject(
ByteString.new(Document::Security.encrypt_string(obj, key, id, gen)),
in_content_stream)
when Hash
output = "<< "
obj.each do |k,v|
unless String === k || Symbol === k
raise Prawn::Errors::FailedObjectConversion,
"A PDF Dictionary must be keyed by names"
end
output << PdfObject(k.to_sym, in_content_stream) << " " <<
EncryptedPdfObject(v, key, id, gen, in_content_stream) << "\n"
end
output << ">>"
when Prawn::NameTree::Value
PdfObject(obj.name) + " " +
EncryptedPdfObject(obj.value, key, id, gen, in_content_stream)
else
PdfObject(obj, in_content_stream)
end
end