add tool to merge pdf files

pull/349/head
Alex Turchyn 1 year ago committed by Pete Matsyburka
parent 286b8d7067
commit ab49af9bcb

@ -0,0 +1,18 @@
# frozen_string_literal: true
module Api
class ToolsController < ApiBaseController
skip_authorization_check
def merge
files = params[:files] || []
return render json: { error: 'Files are required' }, status: :unprocessable_entity if files.blank?
return render json: { error: 'At least 2 files are required' }, status: :unprocessable_entity if files.size < 2
render json: {
data: Base64.encode64(PdfUtils.merge(files.map { |base64| StringIO.new(Base64.decode64(base64)) }).string)
}
end
end
end

@ -41,6 +41,9 @@ Rails.application.routes.draw do
resources :clone, only: %i[create], controller: 'templates_clone'
resources :submissions, only: %i[index create]
end
resources :tools, only: %i[] do
post :merge, on: :collection
end
end
resources :verify_pdf_signature, only: %i[create]

@ -26,4 +26,19 @@ module PdfUtils
decrypted_io.tap(&:rewind).read
end
def merge(files)
merged_pdf = HexaPDF::Document.new
files.each do |file|
pdf = HexaPDF::Document.new(io: file)
pdf.pages.each { |page| merged_pdf.pages << merged_pdf.import(page) }
end
merged_content = StringIO.new
merged_pdf.write(merged_content)
merged_content.rewind
merged_content
end
end

Loading…
Cancel
Save