README.md in alego_pdf-2.0.1 vs README.md in alego_pdf-3.0.0

- old
+ new

@@ -30,55 +30,85 @@ ``` require 'hexapdf' require 'open-uri' module AlegoPdf - class Merging - attr_reader :ids, :model, :attribute, :filename + class Merging + attr_reader :ids, :model, :attribute, :filename, :urls, :orderize, :target - def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf') - @ids = ids - @model = model - @attribute = attribute - @filename = filename - end + def initialize(ids, model, attribute, filename = 'tmp/merge_files.pdf', urls = [], orderize = 'url') + @ids = ids + @model = model + @attribute = attribute + @filename = filename + @urls = urls + @orderize = orderize + @target = HexaPDF::Document.new + end - def call - array = model.is_a?(String) ? model.camelize.constantize.where(id: ids) : model.where(id: ids) - target = HexaPDF::Document.new + def call + if orderize == 'url' + join_urls + join_array + else + join_array + join_urls + end - array.each do |object| - file = object[attribute] - filepath = file.try(:url) || object.try(:arquivo_url) + target.write(filename, optimize: true) + end - next if filepath.blank? + def join_urls + urls.each do |filepath| + next if filepath.blank? - uri = URI.parse(filepath).open(&:read) - tempfile = Tempfile.new - tempfile.write(uri.force_encoding('UTF-8')) - tempfile.close + uri = URI.parse(filepath).open(&:read) + tempfile = Tempfile.new + tempfile.write(uri.force_encoding('UTF-8')) + tempfile.close - pdf = HexaPDF::Document.open(tempfile) - pdf.pages.each { |page| target.pages << target.import(page) } - end + pdf = HexaPDF::Document.open(tempfile) + pdf.pages.each { |page| target.pages << target.import(page) } + end + end - target.write(filename, optimize: true) - end + def join_array + array = model.is_a?(String) ? model.camelize.constantize.where(id: ids) : model.where(id: ids) + + array.each do |object| + file = object[attribute] + filepath = file.try(:url) || object.try(:arquivo_url) + + next if filepath.blank? + + uri = URI.parse(filepath).open(&:read) + tempfile = Tempfile.new + tempfile.write(uri.force_encoding('UTF-8')) + tempfile.close + + pdf = HexaPDF::Document.open(tempfile) + pdf.pages.each { |page| target.pages << target.import(page) } + end end + end end ``` Obs.: Os parâmetros 'ids', 'model' e 'attribute' são obrigatórios. O parâmetro 'filename' é por default 'tmp/merge_files.pdf', porém pode-se atribuir um caminho pré-definido. o atributo 'filename' será o local e nome onde será salvo o arquivo temporário. -Após instalar a gem 'alego_pdf', deve criar uma rota '/merge_arquivos' e deve buscar os ids dos arquivos e passá-los como parâmetro junto com o model e o atributo que onde é guardado os metadados dos arquivos. A gem procura também por um atributo chamado 'arquivo_url', caso não encontre a 'url' (ex.: attribute.try(:url)) Veja o exemplo a seguir: +O parâmetro 'urls' é um array de url's e serve para ler PDF's a partir de url e juntá-los num mesmo arquivo. Default = []. Utilizar os 'ids' e as 'urls', serve para juntar arquivos além de um model apenas, como acontece no projeto 'emendas-rails' da Alego. +Após instalar a gem 'alego_pdf', deve criar uma rota '/merge_arquivos' em seu projeto e deve buscar os ids dos arquivos e passá-los como parâmetro junto com o model, o atributo e as urls que onde é guardado os metadados dos arquivos. A gem procura também por um atributo chamado 'arquivo_url', caso não encontre a 'url' (ex.: attribute.try(:url)). +Ainda no método call, com o atributo 'orderize' podemos ordenar por urls ou ids no arquivo PDF. Default = 'url'. +Veja o exemplo a seguir: ``` # organogramas_controller.rb def merge_arquivos organograma_ids = ::Transparencia::Organograma.order('data desc').map(&:id) respond_to do |format| format.html format.pdf do + url = 'https://teste.com/teste.pdf' # url precisa ser um PDF filename = 'tmp/organogramas.pdf' # nome e local onde será salvo o arquivo temporário - AlegoPdf::Merging.new(organograma_ids, ::Transparencia::Organograma, :arquivo, filename).call + AlegoPdf::Merging.new(organograma_ids, ::Transparencia::Organograma, :arquivo, filename, [url].compact).call pdf_filename = File.join(Rails.root, filename) send_file(pdf_filename, filename: 'organogramas.pdf', type: 'application/pdf') end end