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