SOMETHING ABOUT SNAPPY

Ha Nguyen

June 8, 2023

Snappy is a PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. It uses the excellent webkit-based wkhtmltopdf and wkhtmltoimage available on OSX, linux, windows.

You will have to download wkhtmltopdf 0.12.x in order to use Snappy.

Please, check FAQ before opening a new issue. Snappy is a tiny wrapper around wkhtmltox, so lots of issues are already answered, resolved or wkhtmltox ones.

Following integrations are available:

knplabs/knp-snappy-bundle, for Symfony

barryvdh/laravel-snappy, for Laravel

mvlabs/mvlabs-snappy, for Zend Framework

Installation using Composer

$ composer require knplabs/knp-snappy

Usage

Initialization

<?php

require _DIR_ . ‘/vendor/autoload.php’;

use Knp\Snappy\Pdf;

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

// or you can do it in two steps

$snappy = new Pdf();

$snappy->setBinary(‘/usr/local/bin/wkhtmltopdf’);

Display the pdf in the browser

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

header(‘Content-Type: application/pdf’);

echo $snappy->getOutput(‘http://www.github.com’);

Download the pdf from the browser

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

header(‘Content-Type: application/pdf’);

header(‘Content-Disposition: attachment; filename=”file.pdf”‘);

echo $snappy->getOutput(‘http://www.github.com’);

Merge multiple urls into one pdf

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

header(‘Content-Type: application/pdf’);

header(‘Content-Disposition: attachment; filename=”file.pdf”‘);

echo $snappy->getOutput(array(‘http://www.github.com’,’http://www.knplabs.com’,’http://www.php.net’));

Generate local pdf file

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

$snappy->generateFromHtml(‘<h1>Bill</h1><p>You owe me money, dude.</p>’, ‘/tmp/bill-123.pdf’);

Pass options to snappy

// Type wkhtmltopdf -H to see the list of options

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

$snappy->setOption(‘disable-javascript’, true);

$snappy->setOption(‘no-background’, true);

$snappy->setOption(‘allow’, array(‘/path1’, ‘/path2’));

$snappy->setOption(‘cookie’, array(‘key’ => ‘value’, ‘key2’ => ‘value2’));

$snappy->setOption(‘post’, array(‘key’ => ‘value’));

$snappy->setOption(‘cover’, ‘pathToCover.html’);

// .. or pass a cover as html

$snappy->setOption(‘cover’, ‘<h1>Bill cover</h1>’);

$snappy->setOption(‘toc’, true);

$snappy->setOption(‘cache-dir’, ‘/path/to/cache/dir’);

Reset options

Options can be reset to their initial values with resetOptions() method.

 

$snappy = new Pdf(‘/usr/local/bin/wkhtmltopdf’);

// Set some options

$snappy->setOption(‘copies’ => 4);

// ..

// Reset options

$snappy->resetOptions();

wkhtmltopdf binary as composer dependencies

If you want to download wkhtmltopdf and wkhtmltoimage with composer you add to composer.json:

 

$ composer require h4cc/wkhtmltopdf-i386 0.12.x

$ composer require h4cc/wkhtmltoimage-i386 0.12.x

or this if you are in 64 bit based system:

 

$ composer require h4cc/wkhtmltopdf-amd64 0.12.x

$ composer require h4cc/wkhtmltoimage-amd64 0.12.x

And then you can use it

 

<?php

 

use Knp\Snappy\Pdf;

 

$myProjectDirectory = ‘/path/to/my/project’;

 

$snappy = new Pdf($myProjectDirectory . ‘/vendor/h4cc/wkhtmltopdf-i386/bin/wkhtmltopdf-i386’);

 

// or

 

$snappy = new Pdf($myProjectDirectory . ‘/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64’);

N.B. These static binaries are extracted from Debian7 packages, so it might not be compatible with non-debian based linux distros

Some use cases

If you want to generate table of contents and you want to use custom XSL stylesheet, do the following:

<?php

$snappy = new Pdf(‘/path/to/binary’);

$snappy->setOption(‘toc’, true);

$snappy->setOption(‘xsl-style-sheet’, ‘http://path/to/stylesheet.xsl’) //or local file;

$snappy->generateFromHtml(‘<p>Some content</p>’, ‘test.pdf’);

 

Read more on: https://github.com/KnpLabs/snappy

 

 

 

 

WRITE A COMMENT
Save my information in this browser for the next time I comment
Comment anonymously
Vitex Vitex Vietnam Software., JSC

Service Request Form

Send us your service request and we will get back to you instantly

1 Contact Infomation
  • Name
  • Email
  • Phone
  • Company
  • Address
  • Skype/Telegram
2 Service Request
Website
Mobile Application
Website Application
Other
  • Start time
    icon time
  • End time
    icon time
  • What is your budget range?
    icon time
    Currency USD
  • Front-end
    Ex. React, VueS...
  • Back-end
    Ex. PHP, Java, Python...
  • Database
    Ex. MySQL, Mongo...
  • Advanced technologies
    Ex. Blockchain, AI...
yes
no
  • Select role
    icon time
  • Quantity
    icon time
  • Duration
    icon time
remove

Request Form Successfully !

We' ll contact you in the earliest time.