如何在ROR(Ruby)中将此“字节数组”转换为PDF?

时间:2011-09-22 08:37:52

标签: ruby-on-rails ruby pdf

通过Web服务,我返回了一个字节数组。部分内容如下所示......如何将其恢复为文件? (它以pdf开头)

rg1uje94ppbarWm6azwlDCJeHFFJuXlMN532v46qiyi2u/WNVHCgl10DFe64oZVSFKHN7pZ6qaulNHULZJjix33PWhzPLBVwcbptx5Husx+a7Y4q3T76KBu7pfjvXeav1emibcBSG2mMFakTv0Ho7LvYsVf57hzUq8ptL752worpSKa3L0s9IJ6Z6qIlFzDaXW4ml+3WCWvaHhUW2H+6xfFSuhjHzL8pKmd5t3aI8vsun16YY1VwLw9ivAGX+GUPRVBOTYpVqgLikJhKB7Fkpn5SJSATFAQGoviYGsw7A+B2hA0dpVlisUf0mvC2LjYwfEhcUPGmvwG3sRpGJkUPtzXWx+5a2UaTOtytnLR9qwFbXKf8s2DxS9dR/p+/rwjb9mr24p7E2e8e/ZWNP7dpX7V7xJWpLAxu67lOYhixHFPRZff6063L5q8yGXtOc/J/YP5sSev6l8trGk+c+WNXSa5+b7PfpqY/WJbkefxp4Xe5RfaHqx6oqU/o9ObBdjn3MDm3MzkvFmrvWaXfPavC9s6/8gZZdMeI3cPyp8n/nBSnpjXYUwelZlyKm+ek7Pl8YfhXM4c6uTwxhPyJvZscfRnzaSd7cwWLTs3zj8ucXWe7TGzR+NGXumfk7HqVXCAkrJVS/T+uNDXKHSh5viMpPuTzW+vXu7vIj7eOXLT47XX1vYynzBdcaGx1qo0qrEijTL81UcSZRrFwS7Zv72L/paRvgswpPVdNKe/Qq9hT2R/XQXC8De/HaGVqkC1rkqFIxCto1vzFn1+1xGpOgu+fG/I7P7NBiqm+Ri823b7edVvMEvoIuVLjvjJ7Mv3nTRcV2ZKn+CeR06xqGtHnfN6XVCyyiRx8d2DdxbM0Whz19Imd928mSGz9KpLbXZ0NZhaNX7e08BjbR4fsO+fcdZ7fnhMz0FN2rEnplApbV+aLRt/zHFc15fDpt3/6Kz77vjM+aGNgjJ/eaCpseryirwPdcHuovZPLr3sVRnp2XZwpwH5hwrK0u3vB

我尝试了一些事情,最接近如下(虽然我不确定输出是否正确):

File.open(pdf_filename, 'w' ) do |output|
   byteArray.each_byte do | byte |
        output.print byte
        puts byte
   end
end

在控制台中返回以下但不创建有效文件(我假设这些数字是Integer(base10)形式的字节或什么?):

77
52
79
89
    57
   etc..

1 个答案:

答案 0 :(得分:2)

我不是专家..我现在正在学习红宝石(在SO上查看问题以改变技术; - )

但你试过了吗?

File.open(pdf_filename, 'wb' ) do |output|
   byteArray.each_byte do | byte |
       output.print byte
       puts byte
   end
end

或者甚至(我真的不知道这是否会起作用)我没有安装Ruby来测试:

File.open(pdf_filename, 'wb') { |output|
    output << byteArray
}

我从这里(以及其他地方)获得了这些信息:

http://strugglingwithruby.blogspot.com/2008/11/ruby-file-access.html

  

二进制文件是一样的;你只需在open方法的第二个参数中添加一个b。

根据您的字节数组格式,您可能需要使用unpack方法。

File.open(pdf_filename, 'wb' ) do |output|
   output << byteArray.unpack("m")
end

请参阅以下内容,了解unpack方法中的可能参数: http://www.codeweblog.com/ruby-string-pack-unpack-detailed-usage/