No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 

60 líneas
1.6 KiB

  1. class ContentGenerationJob < ApplicationJob
  2. require 'docsplit'
  3. @document_id = nil
  4. @document = nil
  5. @content = nil
  6. queue_as :default
  7. # after_perform :generate_tags
  8. def perform(document_id)
  9. @document_id = document_id
  10. @document = Document.find(document_id)
  11. @content = @document.build_content
  12. generate_metadata
  13. generate_text
  14. generate_page_previews
  15. end
  16. private
  17. def generate_metadata
  18. length = Docsplit.extract_length(@document.doc.path, output: 'tmp/raw_content')
  19. @content.pagecount = length
  20. @content.save
  21. end
  22. def generate_text
  23. Docsplit.extract_text(@document.doc.path, output: 'tmp/raw_content')
  24. file_path = 'tmp/raw_content/' + File.basename(@document.doc.path, 'pdf') + 'txt'
  25. text = IO.read(file_path)
  26. @content.text = text
  27. @content.save!
  28. File.delete(file_path) if File.exist?(file_path)
  29. end
  30. def generate_page_previews
  31. file_basename = File.basename(@document.doc.path, '.pdf')
  32. folder_path = 'tmp/raw_content/' + file_basename
  33. Docsplit.extract_images(@document.doc.path, output: folder_path, size: '200x', format: :png)
  34. @content.pagecount.times do |page|
  35. i = page + 1
  36. page_preview = @content.page_previews.build
  37. puts 'build fine'
  38. file = File.open(folder_path + '/' + File.basename(@document.doc.path, '.pdf') + '_' + i.to_s + '.png', 'rb')
  39. puts 'opened fine'
  40. page_preview.preview = file
  41. page_preview.pagenumber = i
  42. file.close
  43. page_preview.save
  44. end
  45. end
  46. def generate_tags
  47. TagGenerationJob.perform_now @document_id
  48. end
  49. end