Class: PdfMerger
- Inherits:
-
Object
- Object
- PdfMerger
- Defined in:
- lib/majorsilence_pdf/pdf_native.rb
Overview
Merges multiple PDF documents into one. Call close when done.
Usage:
merger = PdfMerger.new(fns)
merger.add_bytes(File.binread('a.pdf'))
merger.add_bytes(File.binread('b.pdf'))
merger.save('/tmp/merged.pdf')
merger.close
Instance Method Summary collapse
-
#add_bytes(data) ⇒ Object
Add PDF bytes to the merge queue.
- #close ⇒ Object
-
#initialize(fns) ⇒ PdfMerger
constructor
A new instance of PdfMerger.
- #save(path) ⇒ Object
-
#save_to_memory ⇒ Object
Merge and return PDF bytes.
Constructor Details
#initialize(fns) ⇒ PdfMerger
Returns a new instance of PdfMerger.
421 422 423 424 425 426 427 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 421 def initialize(fns) @fns = fns h = fns[:pdf_merge_create].call raise "pdf_merge_create failed: #{PdfLibrary.last_error_str(fns)}" if h.nil? || h.zero? @handle = h end |
Instance Method Details
#add_bytes(data) ⇒ Object
Add PDF bytes to the merge queue.
430 431 432 433 434 435 436 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 430 def add_bytes(data) ptr = Fiddle::Pointer[data] ret = @fns[:pdf_merge_add_bytes].call(@handle, ptr, data.bytesize) raise "pdf_merge_add_bytes failed: #{PdfLibrary.last_error_str(@fns)}" unless ret.zero? self end |
#close ⇒ Object
456 457 458 459 460 461 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 456 def close return unless @handle @fns[:pdf_merge_close].call(@handle) @handle = nil end |
#save(path) ⇒ Object
438 439 440 441 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 438 def save(path) ret = @fns[:pdf_merge_save_file].call(@handle, c_str(path)) raise "pdf_merge_save_file failed: #{PdfLibrary.last_error_str(@fns)}" unless ret.zero? end |
#save_to_memory ⇒ Object
Merge and return PDF bytes.
444 445 446 447 448 449 450 451 452 453 454 |
# File 'lib/majorsilence_pdf/pdf_native.rb', line 444 def save_to_memory tmp = Tempfile.new(['pdfnative', '.pdf'], binmode: true) tmp_path = tmp.path tmp.close begin save(tmp_path) File.binread(tmp_path) ensure File.delete(tmp_path) if File.exist?(tmp_path) end end |