About
October-fied wrapper around the wkhtmltopdf and wkhtmltoimage conversion libraries provided through the barryvdh/laravel-snappy package.
Like this plugin?
Did this plugin save you some time? Do you enjoy the plug and play superpowers of PDF and Image generation this plugin grants you? If so, then consider making a donation so I can continue building plugins that will make your life easier
The following plugins extend or depend on the plugin

Room Booking Pro
The best Room Booking plugin for October CMS (accept online payments & synchronise bookings)
Room Booking Pro
The best Room Booking plugin for October CMS (accept online payments & synchronise bookings)

Invoice Pro
Create invoices that you can email or download as PDF and pay online
Invoice Pro
Create invoices that you can email or download as PDF and pay online

Easy Forms PDF
Generate & attach PDFs to your Easy Forms notifications
Easy Forms PDF
Generate & attach PDFs to your Easy Forms notifications
Installation
To install from the Marketplace, click on the "Add to Project" button and then select the project you wish to add it to before updating the project to pull in the plugin.
To install from the backend, go to Settings -> Updates & Plugins -> Install Plugins and then search for LukeTowers.SnappyPDF
.
To install from the repository, clone it into plugins/luketowers/snappypdf and then run composer update
from your project root in order to pull in the dependencies.
To install it with Composer, run composer require luketowers/oc-snappypdf-plugin
from your project root.
NOTE: On some Linux systems you may need to install the following dependencies (generally when the process fails with "The exit status code 127 says something went wrong"). Pulled from https://github.com/barryvdh/laravel-snappy/issues/68.
sudo apt-get install -y \
libxrender1 \
libfontconfig1 \
libx11-dev \
libjpeg62 \
libxtst6
If you get "The exit status code 1 says something went wrong" you may need to install the following dependencies. Pulled from https://github.com/wkhtmltopdf/wkhtmltopdf/issues/3001#issuecomment-309673453
sudo apt-get install -y \
libssl1.0-dev
NOTE: You might not be able to install
libssl1.0-dev
in Homestead, make sure you runsudo apt-get update
first.
Configuration
The main configuration values that you may wish to change would be the paths to the executable binaries for wkhtmltopdf
and wkhtmltoimage
. These binaries are pulled into plugins/luketowers/snappypdf/vendor/bin by default (when installing from the marketplace) and the default configuration reflects this. Also supported by default is installing by cloning the repository and loading the dependencies with composer update
(where the binaries will be located in your project's vendor/bin).
If you need to change the path used to locate those binaries, then you have a few options. If you are already using .env
files for environment level configuration then you can simply add SNAPPY_PDF_BINARY
and SNAPPY_IMAGE_BINARY
with their respective paths to your .env
file and call it a day.
If you are not using .env
files, or you need to change a configuration value other than the binary paths; then you can override this plugin's configuration and change the necessary values by copying config/config.php from the plugin into your project's config/luketowers/snappypdf/config.php file (as specified in the OctoberCMS docs).
Usage
When using this plugin, it is highly recommended that you add a dependency on it to the plugin you are using it from.
In order to use the libraries provided by this plugin (SnappyPDF
and SnappyImage
), simply import them with use
statements at the top of your PHP files.
Stream PDF to browser
The example below will render a record from a controller and stream it to the browser for downloading or viewing.
<?php namespace MyVendor\MyPlugin\Controllers;
use File;
use Twig;
use Response;
use SnappyPDF;
use Backend\Classes\Controller;
use MyVendor\MyPlugin\Models\Example as ExampleModel;
class Examples extends Controller
{
public function download($id)
{
// Load the example record
$example = ExampleModel::find($id);
// Load the template
$template = File::get(plugins_path('myvendor/myplugin/views/example-record-template.htm'));
// Render the template
$renderedHtml = Twig::parse($template, [
'example' => $example,
]);
// Render as a PDF
$pdf = SnappyPDF::loadHTML($renderedHtml)
->setOption('margin-top', 0)
->setOption('margin-bottom', 0)
->setOption('margin-left', 0)
->setOption('margin-right', 0)
->setPaper('letter')
->output();
return Response::make($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => "filename={$example->name}.pdf",
]);
}
}
Return a PDF to the AJAX framework for downloading
<?php namespace MyVendor\MyPlugin\Controllers; use File; use Twig; use Backend; use Response; use SnappyPDF; use Backend\Classes\Controller; use MyVendor\MyPlugin\Models\Example as ExampleModel; class Examples extends Controller { public function onDownloadPDF() { $recordId = input('recordId'); return Backend::redirect("myvendor/myplugin/examples/download/$recordId"); } public function download($id) { // Load the example record $example = ExampleModel::find($id); // Load the template $template = File::get(plugins_path('myvendor/myplugin/views/example-record-template.htm')); // Render the template $renderedHtml = Twig::parse($template, [ 'example' => $example, ]); // Render as a PDF $pdf = SnappyPDF::loadHTML($renderedHtml)->output(); return Response::make($pdf, 200, [ 'Content-Type' => 'application/pdf', 'Content-Transfer-Encoding' => 'binary', 'Content-Disposition' => "attachment; filename=\"{$example->name}.pdf\"", ]); } }
More information on utilizing the libraries is available at the barryvdh/laravel-snappy repository and the wkhtmltopdf manual.
-
Wiego Bergsma
Found the plugin useful on 18 Dec, 2018
Justin Patterson said it once and said it best. Great plugin :)
-
Justin Patterson
Found the plugin useful on 6 Feb, 2018
Having used Snappy & wkhtmltopdf for the last few years in their manual capacities, I nearly fell out of my chair when I first saw this plugin avilable. Is it simple? Heck yeah it is. Does it work? That's an affirmative. Is it so much easier than me bringing in everything manually? YES! No bells and whistles, no bloat, no bs... just a fantastic plugin if you need some simple PDF output!
-
Luke Towers author
Replied on 6 Feb, 2018
Glad you enjoyed it!
-
1.0.6 |
Fix for v1.1.1 of October Nov 24, 2020 |
---|---|
1.0.5 |
Added windows binaries Aug 22, 2019 |
1.0.4 |
Made available on Packagist Oct 09, 2017 |
1.0.3 |
Fixed the wkhtmltoX binaries not being executable upon first install from the marketplace May 16, 2017 |
1.0.2 |
Fixed one of the alternative locations the wkhtmltopdf binaries could be loaded from Apr 25, 2017 |
1.0.1 |
First version of SnappyPDF Apr 18, 2017 |