ruby 使用Ruby进行快速而脏的PDF签名(使用Origami)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 使用Ruby进行快速而脏的PDF签名(使用Origami)相关的知识,希望对你有一定的参考价值。
#!/usr/bin/env ruby
require "openssl"
require "time"
begin
require "origami"
rescue LoadError
abort "origami not installed: gem install origami"
end
include Origami
CERT_FILE = "certificate.crt"
KEY_FILE = "private_key.pem"
input_files = ARGV
if input_files.empty?
abort "Usage: sign-pdf input.pdf [...]"
end
key = OpenSSL::PKey::RSA.new(File.read(KEY_FILE))
cert = OpenSSL::X509::Certificate.new(File.read(CERT_FILE))
input_files.each do |file|
output_filename = file.dup.insert(file.rindex("."), "_signed")
pdf = PDF.read(file)
page = pdf.get_page(1)
width = 200.0
height = 50.0
x = page.MediaBox[2].to_f - width - height
y = height
size = 8
now = Time.now
text_annotation = Annotation::AppearanceStream.new
text_annotation.Type = Origami::Name.new("XObject")
text_annotation.Resources = Resources.new
text_annotation.Resources.ProcSet = [Origami::Name.new("Text")]
text_annotation.set_indirect(true)
text_annotation.Matrix = [ 1, 0, 0, 1, 0, 0 ]
text_annotation.BBox = [ 0, 0, width, height ]
text_annotation.write("Signed at #{now.iso8601}", x: size, y: (height/2)-(size/2), size: size)
# Add signature annotation (so it becomes visibles in PDF document)
signature_annotation = Annotation::Widget::Signature.new
signature_annotation.Rect = Rectangle[llx: x, lly: y+height, urx: x+width, ury: y]
signature_annotation.F = Annotation::Flags::PRINT
signature_annotation.set_normal_appearance(text_annotation)
page.add_annot(signature_annotation)
# Sign the PDF with the specified keys
pdf.sign(cert, key,
method: "adbe.pkcs7.sha1",
annotation: signature_annotation,
location: "Helsinki",
contact: "contact@kiskolabs.com",
reason: "Proof of Concept"
)
# Save the resulting file
pdf.save(output_filename)
end
以上是关于ruby 使用Ruby进行快速而脏的PDF签名(使用Origami)的主要内容,如果未能解决你的问题,请参考以下文章
Ruby 使用标头进行身份验证的方法?
使用 S/MIME 在 Ruby 中对电子邮件进行数字签名
ruby 快速而肮脏的脚本,以PDF格式从AT&T获取最新账单。
ruby 使用Base64和StringIO对PDF图像进行处理
使用 Ruby 为 CloudFront 创建签名 URL
如何使用 Ruby 在现有 PDF 上编辑或书写?