Class: ActiveStorage::Previewer::PopplerPDFPreviewer
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: |
ActiveStorage::Previewer
|
| Defined in: | activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb |
Class Attribute Summary
- .pdftoppm_exists? ⇒ Boolean readonly
Class Method Summary
::ActiveStorage::Previewer - Inherited
Instance Attribute Summary
::ActiveStorage::Previewer - Inherited
Instance Method Summary
::ActiveStorage::Previewer - Inherited
| #preview | Override this method in a concrete subclass. |
| #capture, | |
| #download_blob_to_tempfile | Downloads the blob to a tempfile on disk. |
| #draw | Executes a system command, capturing its binary output in a tempfile. |
| #instrument, #logger, #open_tempfile, #service_name, #tmpdir | |
Constructor Details
This class inherits a constructor from ActiveStorage::Previewer
Class Attribute Details
.pdftoppm_exists? ⇒ Boolean (readonly)
[ GitHub ]
# File 'activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb', line 18
def pdftoppm_exists? return @pdftoppm_exists unless @pdftoppm_exists.nil? @pdftoppm_exists = system(pdftoppm_path, "-v", out: File::NULL, err: File::NULL) end
Class Method Details
.accept?(blob) ⇒ Boolean
# File 'activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb', line 6
def accept?(blob) pdf?(blob.content_type) && pdftoppm_exists? end
.pdf?(content_type) ⇒ Boolean
# File 'activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb', line 10
def pdf?(content_type) Marcel::Magic.child? content_type, "application/pdf" end
.pdftoppm_path
[ GitHub ]# File 'activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb', line 14
def pdftoppm_path ActiveStorage.paths[:pdftoppm] || "pdftoppm" end
Instance Method Details
#draw_first_page_from(file, &block) (private)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb', line 34
def draw_first_page_from(file, &block) # use 72 dpi to match thumbnail dimensions of the PDF draw self.class.pdftoppm_path, "-singlefile", "-cropbox", "-r", "72", "-png", file.path, &block end
#preview(**options)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rb', line 25
def preview(**) download_blob_to_tempfile do |input| draw_first_page_from input do |output| yield io: output, filename: "#{blob.filename.base}.png", content_type: "image/png", ** end end end