(16) 981791110 contato@policast.studio

O que é o KnpSnappyBundle?

O KnpSnappyBundle é uma biblioteca necessária para permitir que o Symfony gere arquivos PDF e outros formatos de arquivo dinamicamente a partir do conteúdo do seu aplicativo. É baseado na biblioteca Snappy que é uma interface para uma série de ferramentas de linha de comando que podem gerar PDFs e outros tipos de arquivos a partir de HTML ou URLs.

Como instalar o KnpSnappyBundle no Symfony?

Instalar o KnpSnappyBundle no Symfony é um processo simples. Primeiro, você precisa adicionar a biblioteca KnpSnappyBundle ao seu projeto, executando o seguinte comando:

composer require knplabs/knp-snappy-bundle

Em seguida, você precisa adicionar o pacote ao arquivo de configuração src/Kernel.php, o que informará o Symfony que o pacote deve ser inicializado com seu aplicativo:

public function registerBundles()
{
$bundles = [
new KnpBundleSnappyBundleKnpSnappyBundle(),
];
return $bundles;
}

Como usar o KnpSnappyBundle?

Para usar o KnpSnappyBundle, você deve instanciar o serviço de renderizador do KnpSnappyBundle na ação do controlador que deseja renderizar em PDF. Você pode então usar esse serviço para gerar seu PDF.

 public function generatePdfAction()
{
$snappy = $this->get('knp_snappy.pdf');
$html = $this->renderView('pdf_template.html.twig', [
'title' => 'My PDF',
'content' => 'This is my PDF content',
]);
$filename = sprintf('my_pdf_%s.pdf', date('Y-m-d'));

return new Response(
$snappy->getOutputFromHtml($html),
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename),
]
);
}

Como renderizar em outros tipos de arquivos?

Além de PDF, o KnpSnappyBundle pode ser usado para renderizar em outros tipos de arquivos, como JPG, PNG e HTML. Para renderizar em JPG ou PNG, basta alterar o tipo Content-Type. Para renderizar em HTML, use o método getOutput() ao invés de getOutputFromHtml().

 public function generateImageAction()
{
$snappy = $this->get('knp_snappy.image');
$html = $this->renderView('pdf_template.html.twig', [
'title' => 'My Image',
'content' => 'This is my image content',
]);
$filename = sprintf('my_image_%s.jpg', date('Y-m-d'));

return new Response(
$snappy->getOutputFromHtml($html),
200,
[
'Content-Type' => 'image/jpg',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename),
]
);
}

Como configurar opções de renderização?

O serviço de renderizador do KnpSnappyBundle tem várias opções que permitem controlar a maneira como os arquivos são renderizados. Essas opções podem ser definidas no arquivo de configuração config.yml ou diretamente no serviço.

knp_snappy:
pdf:
enabled: true
binary: /usr/local/bin/wkhtmltopdf
options:
page-size: A4
orientation: Landscape

Você também pode definir as opções diretamente no serviço:

$snappy = $this->get('knp_snappy.pdf');
$snappy->setOption('page-size', 'A4');
$snappy->setOption('orientation', 'Landscape');

Como usar modelos Twig para gerar PDFs?

O KnpSnappyBundle é compatível com o Twig, permitindo que você use modelos Twig para gerar os PDFs.

 public function generatePdfWithTwigAction()
{
$html = $this->renderView('pdf_template.html.twig', [
'title' => 'My PDF with Twig',
'content' => 'This is my PDF content generated with Twig',
]);
$snappy = $this->get('knp_snappy.pdf');
$filename = sprintf('my_pdf_%s.pdf', date('Y-m-d'));

return new Response(
$snappy->getOutputFromHtml($html),
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename),
]
);
}

Como usar parâmetros de consulta para gerar PDFs?

Você pode passar parâmetros de consulta na URL da ação do controlador para permitir que o usuário final personalize o documento gerado. Em seguida, você pode obter esses parâmetros usando o objeto Request:

 public function generatePdfWithQueryParamsAction(Request $request)
{
$title = $request->query->get('title');
$content = $request->query->get('content');
$html = $this->renderView('pdf_template.html.twig', [
'title' => $title,
'content' => $content,
]);
$snappy = $this->get('knp_snappy.pdf');
$filename = sprintf('my_pdf_%s.pdf', date('Y-m-d'));

return new Response(
$snappy->getOutputFromHtml($html),
200,
[
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename),
]
);
}

Como renderizar com cabeçalho e rodapé personalizados?

Para renderizar com cabeçalho e rodapé personalizados, você precisa criar os templates Twig e passar a opção correspondente para o serviço de renderização.

$snappy = $this->get('knp_snappy.pdf');
$headerHtml = $this->renderView('pdf_header.html.twig', [
'title' => 'Page header',
]);
$footerHtml = $this->renderView('pdf_footer.html.twig', [
'pageNumber' => 'Page {{ page }}',
]);
$snappy->setOption('header-html', $headerHtml);
$snappy->setOption('footer-html', $footerHtml);

Como renderizar com margens personalizadas?

Você pode configurar as margens do documento definindo a opção margin, que aceita uma matriz com os valores das margens superiores, direita, inferior e esquerda em milímetros.

 $snappy = $this->get('knp_snappy.pdf');
$snappy->setOption('margin', [10, 20, 10, 20]);

Como renderizar com fontes personalizadas?

Para usar fontes personalizadas em seus PDFs, você precisa especificar o caminho para a fonte usando a opção font-path e carregar a fonte com a opção user-style-sheet. Você também precisa ter a fonte instalada no servidor.

 $snappy = $this->get('knp_snappy.pdf');
$snappy->setOption('font-path', '/path/to/my/fonts');
$snappy->setOption('user-style-sheet', '/path/to/my/styles.css');