2010-06-24 13 views
5

मैं एक रेल एप्लिकेशन पर काम कर रहा हूं जो पीडीएफ उत्पन्न करने के लिए प्रोन का उपयोग करता है। लंबी कहानी छोटी है, हम डिजिटल रूप से जेनरेट किए गए पीडीएफ पर हस्ताक्षर करने में सक्षम होना चाहते हैं। मुझे यकीन नहीं है कि कहां पढ़ना शुरू करना है। बस पूछना चाहता था कि कोई और इससे पहले इसे पूरा करने में सक्षम है, और यदि ऐसा है, तो मुझे ऐसा करने के लिए किस तरह के संसाधनों का उपयोग करना चाहिए।रेल पर रूबी या रूबी का उपयोग करके हस्ताक्षर के साथ पीडीएफ उत्पन्न करना

धन्यवाद!

उत्तर

3

मैं आपको https://github.com/joseicosta/odf-report पर एक नज़र डालने का सुझाव दूंगा। यह ओडीएफ उत्पन्न करने के लिए एक मणि है, लेकिन उन्हें आसानी से पीडीएफ में परिवर्तित किया जा सकता है, साथ ही यह टेम्पलेट का समर्थन करता है।

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है पुनः संदर्भ और संदर्भ के लिए लिंक प्रदान करते हैं। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – nalply

2

हालांकि इस प्रश्न का उत्तर और काफी पुराना है, मैं जानकारी के लिए प्रासंगिक लिंक जोड़ना चाहता हूं।

MrWater ने अपना कोड Insert digital signature into existing pdf file पर साझा किया है।

संस्करण 1 - एक पीडीएफ दस्तावेज़

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) 
हस्ताक्षर करने के लिए उपयोग में मौजूदा प्रमाणपत्रों - प्रमाणपत्र और कुंजी फ़ाइल पैदा करता है और

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 

# Code below is based on documentation available on 
# http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL.html 
key = OpenSSL::PKey::RSA.new 2048 

open 'private_key.pem', 'w' do |io| io.write key.to_pem end 
open 'public_key.pem', 'w' do |io| io.write key.public_key.to_pem end 

cipher = OpenSSL::Cipher::Cipher.new 'AES-128-CBC' 
pass_phrase = 'Origami rocks' 

key_secure = key.export cipher, pass_phrase 

open 'private_key.pem', 'w' do |io| 
    io.write key_secure 
end 

#Create the certificate 

name = OpenSSL::X509::Name.parse 'CN=nobody/DC=example' 

cert = OpenSSL::X509::Certificate.new 
cert.version = 2 
cert.serial = 0 
cert.not_before = Time.now 
cert.not_after = Time.now + 3600 

cert.public_key = key.public_key 
cert.subject = name 


OUTPUTFILE = "test.pdf" 

contents = ContentStream.new.setFilter(:FlateDecode) 
contents.write OUTPUTFILE, 
    :x => 350, :y => 750, :rendering => Text::Rendering::STROKE, :size => 30 

pdf = PDF.read('Sample.pdf') 


# Open certificate files 

#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) 

संस्करण 2 उन्हें दस्तावेज़ में सीधे सम्मिलित

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। – nalply

+0

मूल कोड @nalply और http://stackoverflow.com/help/referencing के अनुसार जोड़ा गया था – twnaing

संबंधित मुद्दे