Защита документов с помощью Scribd, Ruby и Prawn не более, чем за 15 минут

в 12:02, , рубрики: prawn, ruby, метки: ,

scribd.com — многие знают что Scribd позволяет загружать до 50 000 файлов бесплатно и преобразует их в pdf + предостваляет неплохой виджет для показа файлов.

Но как сделать так, что бы, документ был виден только части пользователей, а другая часть могла видеть лишь небольшой кусок документа? Конечно все предельно просто, как это почти всегда и бывает с Ruby и Rails.

Весь процесс будет занимать 2 итерации, которые стоит запихнуть в Background job — любой по вашему выбору. Представим, что файл любого формата уже у вас на сервере — например вы использовали Carrierwave для загрузки файла или что нибудь, что вашей душе больше нравится.Здесь стоит уточнить, что файл может быть не совсем любого формата, а только — (.doc, .ppt, .xls, .docx, .pptx, .xlsx, .pdf, .txt). Далее Нам необходимо добавить в bundler:

  gem 'rscribd'
  gem 'prawn'

и не забыть bundle install.
После этого надо зарегистрироваться в Scribd и получить ключ и секрет, которые помещаются в initializers/scribd.rb(к примеру) в виде:

  Scribd::API.instance.key    = 'xxxxxxxxxxxxxx'
  Scribd::API.instance.secret = 'xxxxxxxxxxxxxx'

Все готово, теперь перейдем к основным итерациям.

1 итерация — загрузка на scribd документа, который вы получили в чистом виде:

  #path_to_document - путь к вашему файлу на сервере
  def scribd_upload path_to_document
    Scribd::Document.upload file: path_to_document, access: :private
  end
  scribd    = upload_document path_to_document

Выход функции записываем в переменную scribd, которая содержит doc_id и access_key
Эти переменные мы сохраняем и с помощью них можем потом показывать чистый документ пользователям.
scribd.doc_id
scribd.access_key

Отлично у нас есть чистый документ, загруженный на скрайбд. Теперь вторая итерация — создание документа с заглушками — для частичного показа.

Здесь вступает в силу во всей своей красе Prawn и вторая delay job. Ее вызов стоит добавить в конец первой.
Итак у нас есть scribd_id вашего файла. — найдем его в scribde —

  scribd = Scribd::Document.find scribd_id

Далее скачаем pdf вариант вашего документа к себе на сервер по ссылке, которую любезно предоставляет нам scribd:
scribd.download_url 'pdf'

После этого используем prawn для добавления файлу заглушки:

  Prawn::Document.generate(path_to_template_file, :template => path_to_real_file) do |doc|
    (1..doc.page_count).each do |page_number|
      doc.image(path_to_gap, :vposition => :center, :position => :center, :width => x, :height => y)
    end
  end

path_to_template_file — путь к файлу, который будет сохранен с заглушками(его пока нет, но prawn его создаст для нас)
path_to_real_file — путь к реально существующему чистому файлу, который мы скачали из scribd в формате pdf.
path_to_gap — путь к картинке заглушке

Ну и не забудьте поставить ширину и высоту этой заглушки (x,y)
Отлично теперь у нас есть файл с заглушками, который мы закачиваем в скрайбд и забираем id и secret_key, как и в случае с чистым файлом.
Теперь у нас есть 2 набора ключ/секрет для показа файла в чистом виде и с заглушками, и мы можем решать какой вариант кому показывать.
Наглядно сие выглядит следующим образом:
Защита документов с помощью Scribd, Ruby и Prawn не более, чем за 15 минут
Этот вариант работы со scribd мне лично видится, наверное, самым перспективным, т.к. пользователь увидит файл целиком, пусть и с заглушками, которые не покажут ему весь контент, и перекроют основную часть (размер части зависит от вашего выбора заглушки).

Автор: Railsmax

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js