Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 

55 righe
1.6 KiB

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