diff --git a/Gemfile b/Gemfile index 1f5282cc..819e667c 100644 --- a/Gemfile +++ b/Gemfile @@ -53,3 +53,5 @@ end group :test do gem 'rspec-collection_matchers' end + +gem 'pdfcrowd' diff --git a/Gemfile.lock b/Gemfile.lock index 115ba6ab..9ff25bcf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -149,6 +149,7 @@ GEM parallel (1.21.0) parser (3.0.2.0) ast (~> 2.4.1) + pdfcrowd (5.10.0) pg (1.2.3) phonelib (0.6.54) prometheus-client (2.1.0) @@ -264,6 +265,7 @@ DEPENDENCIES jsonite jwt lograge + pdfcrowd pg phonelib prometheus-client diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb index 6e4848cd..3f6eaead 100644 --- a/app/controllers/services_controller.rb +++ b/app/controllers/services_controller.rb @@ -54,6 +54,23 @@ def show render json: ServicesWithResourcePresenter.present(service) end + def init_pdf_crowd_client + Pdfcrowd::HtmlToPdfClient.new(Rails.configuration.x.pdfcrowd.username, Rails.configuration.x.pdfcrowd.api_key) + end + + def html_to_pdf + if Rails.configuration.x.pdfcrowd.api_key && Rails.configuration.x.pdfcrowd.username + client = init_pdf_crowd_client + pdf = client.convertString(params[:html]) + send_data pdf, + { type: "application/pdf", + disposition: "attachment; filename*=UTF-8''#{ERB::Util.url_encode('result.pdf')} }" } + end + rescue Pdfcrowd::Error => e + puts "Failed to convert HTML to PDF: #{e}" + render plain: "There was an error getting the PDF. Please try again", status: 500 + end + def featured category_id = params[:category_id] featured_services = services.includes( diff --git a/config/environments/development.rb b/config/environments/development.rb index 52979d98..b5d6bc03 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -36,4 +36,8 @@ config.lograge.enabled = true config.hosts << 'askdarcel.lvh.me' + + # Public API key provided by PDF Crowd + config.x.pdfcrowd.api_key = 'ce544b6ea52a5621fb9d55f8b542d14d' + config.x.pdfcrowd.username = 'demo' end diff --git a/config/routes.rb b/config/routes.rb index 2f8ec9b0..c1d5e42a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -44,6 +44,7 @@ get :pending get :count get :search + post :html_to_pdf end end resources :notes do