Snappy は、wkhtmltopdf 変換ユーティリティの PHP ラッパーです。 Webkit エンジンを使用して、HTML ドキュメントから PDF または画像ファイルを生成できます。
KnpSnappyBundle は、Symfony プロジェクトにシンプルな統合を提供します。
JavaScript を使用してページをレンダリングする場合、wkhtmltopdf は ES6 API と完全な互換性がないため、いくつかの問題が発生する可能性があります。この問題を解決する唯一の方法は、最新の ES6 API と wkhtmltopdf レンダリング エンジンの間のギャップを修正するポリフィルを提供することです。
Composer を使用する場合は、次のものが必要です。
composer require knplabs/knp-snappy-bundle
Flex を使用していない場合は、カーネルでそれを有効にします。
// config/bundles.php
<?php
return [
//...
Knp Bundle SnappyBundle KnpSnappyBundle::class => [ ' all ' => true ],
//...
];
バイナリを変更したり、インスタンス オプションを変更したり、一方または両方のサービスを無効にしたりする必要がある場合は、構成を通じて行うことができます。
# config/packages/knp_snappy.yaml
knp_snappy :
pdf :
enabled : true
binary : /usr/local/bin/wkhtmltopdf # ""C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"" for Windows users
options : []
image :
enabled : true
binary : /usr/local/bin/wkhtmltoimage # ""C:\Program Files\wkhtmltopdf\bin\wkhtmltoimage.exe"" for Windows users
options : []
デフォルトではsys_get_temp_dir()
である一時フォルダーを変更したい場合は、次のように使用できます。
# config/packages/knp_snappy.yaml
knp_snappy :
temporary_folder : " %kernel.cache_dir%/snappy "
process_timeout
を使用して、ジェネレーターによって使用されるタイムアウトを構成することもできます。
# config/packages/knp_snappy.yaml
knp_snappy :
process_timeout : 20 # In seconds
バンドルは 2 つのサービスを登録します。
knp_snappy.image
サービスを使用すると、画像を生成できます。knp_snappy.pdf
サービスを使用すると、PDF ファイルを生成できます。 // @var KnpSnappyImage
$ knpSnappyImage -> generate ( ' http://www.google.fr ' , ' /path/to/the/image.jpg ' );
// @var KnpSnappyPdf
$ knpSnappyPdf -> generate ( ' http://www.google.fr ' , ' /path/to/the/file.pdf ' );
// @var KnpSnappyPdf
$ knpSnappyPdf -> generate ( array ( ' http://www.google.fr ' , ' http://www.knplabs.com ' , ' http://www.google.com ' ), ' /path/to/the/file.pdf ' );
// @var KnpSnappyPdf
$ knpSnappyPdf -> generateFromHtml (
$ this -> renderView (
' MyBundle:Foo:bar.html.twig ' ,
array (
' some ' => $ vars
)
),
' /path/to/the/file.pdf '
);
use Knp Bundle SnappyBundle Snappy Response JpegResponse ;
use Symfony Bundle FrameworkBundle Controller AbstractController ;
class SomeController extends AbstractController
{
public function imageAction ( Knp Snappy Image $ knpSnappyImage )
{
$ html = $ this -> renderView ( ' MyBundle:Foo:bar.html.twig ' , array (
' some ' => $ vars
));
return new JpegResponse (
$ knpSnappyImage -> getOutputFromHtml ( $ html ),
' image.jpg '
);
}
}
use Knp Bundle SnappyBundle Snappy Response PdfResponse ;
use Symfony Bundle FrameworkBundle Controller AbstractController ;
class SomeController extends AbstractController
{
public function pdfAction ( Knp Snappy Pdf $ knpSnappyPdf )
{
$ html = $ this -> renderView ( ' MyBundle:Foo:bar.html.twig ' , array (
' some ' => $ vars
));
return new PdfResponse (
$ knpSnappyPdf -> getOutputFromHtml ( $ html ),
' file.pdf '
);
}
}
use Knp Bundle SnappyBundle Snappy Response PdfResponse ;
use Symfony Bundle FrameworkBundle Controller AbstractController ;
class SomeController extends AbstractController
{
public function pdfAction ( Knp Snappy Pdf $ knpSnappyPdf )
{
$ pageUrl = $ this -> generateUrl ( ' homepage ' , array (), true ); // use absolute path!
return new PdfResponse (
$ knpSnappyPdf -> getOutput ( $ pageUrl ),
' file.pdf '
);
}
}
KNPLabs はメンテナーを募集しています (理由をご覧ください)。
ご興味がございましたら、お気軽に PR を開いてメンテナーとしての追加をリクエストしてください。
ぜひご連絡ください:)
SnappyBundle と Snappy は、素晴らしい wkhtmltopdf に基づいています。 SnappyBundle は KnpLabs によって開発されました。