J'ai mis en place un script local pour insérer des signatures numériques dans les fichiers locaux PDF récurrents Origami, mais ne savent pas tout à fait ce qui serait la meilleure façon de le faire dans un rails serveur, et avec amazon s3 fichiers stockés.Obtenir Origami-pdf travailler avec des fichiers Amazon S3
Je suppose que je devrais télécharger le fichier de s3 sur mon serveur (ou le capturer avant de le télécharger sur amazon, ce que je fais avec un trombone) insérer la signature, et l'envoyer de nouveau à s3.
Voici la méthode PDF.read dans le fichier pdf.rb de solution origami:
class << self
#
# Reads and parses a PDF file from disk.
#
def read(filename, options = {})
filename = File.expand_path(filename) if filename.is_a?(::String)
PDF::LinearParser.new(options).parse(filename)
end
Comment pourrais-je adapter cette façon que je traite un fichier binaire en mémoire?
Avez-vous des suggestions?
Vous pouvez trouver plus sur l'origami here
Et mon code ci-dessous
require 'openssl'
begin
require 'origami'
rescue LoadError
ORIGAMIDIR = "C:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\origami-1.2.4\lib"
$: << ORIGAMIDIR
require 'origami'
end
include Origami
INPUTFILE = "Sample.pdf"
@inputfile = String.new(INPUTFILE)
OUTPUTFILE = @inputfile.insert(INPUTFILE.rindex("."),"_signed")
CERTFILE = "certificate.pem"
RSAKEYFILE = "private_key.pem"
passphrase = "your passphrase"
key4pem=File.read RSAKEYFILE
key = OpenSSL::PKey::RSA.new key4pem, passphrase
cert = OpenSSL::X509::Certificate.new(File.read CERTFILE)
pdf = PDF.read(INPUTFILE)
page = pdf.get_page(1)
# Add signature annotation (so it becomes visibles in pdf document)
sigannot = Annotation::Widget::Signature.new
sigannot.Rect = Rectangle[:llx => 89.0, :lly => 386.0, :urx => 190.0, :ury => 353.0]
page.add_annot(sigannot)
# Sign the PDF with the specified keys
pdf.sign(cert, key,
:method => 'adbe.pkcs7.sha1',
:annotation => sigannot,
:location => "Portugal",
:contact => "[email protected]",
:reason => "Proof of Concept"
)
# Save the resulting file
pdf.save(OUTPUTFILE)
En fait, je ne faisais pas allusion à une chaîne, mais à une instance de fichier, comme celui exposé par ses processeurs à paperclip (https://github.com/thoughtbot/paperclip) – MrWater
PDF.save() semble attendre un chemin de fichier ... J'ai essayé d'entrer dans mon objet trombone, et j'ai eu une erreur en notant que l'entrée n'était pas une chaîne – MrWater
Il semble que ce n'est pas une instance de fichier afterall: 'ne peut pas convertir Paperclip :: UploadedFileAdapter into String' – MrWater