Convenção de nomes utilizada no Laravel
Tabela para consulta rápida a convenção de nomes utilizadas em projetos Laravel: Leia mais
Desenvolvedor de Software
Neste tutorial, vamos aprender como exportar uma lista de cadastros de clientes para uma planilha Excel, incluindo as fotos dos clientes que estão armazenadas como strings base64. Usaremos o pacote Laravel Excel para realizar essa exportação, integrando dados e imagens de forma eficaz.
Primeiro, certifique-se de que o pacote Laravel Excel está instalado no seu projeto. Se ainda não o instalou, você pode fazer isso com o seguinte comando:
composer require maatwebsite/excel
Mais informações sobre a instalação do Laravel excel consulte : https://docs.laravel-excel.com/3.1/getting-started/installation.html
Agora, vamos criar a classe de exportação. Esta classe será responsável por organizar os dados da lista de clientes e adicionar as imagens correspondentes de cada cliente.
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithDrawings;
use PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing;
class ClientesExport implements FromArray, WithHeadings, WithDrawings
{
protected $clientes;
protected $drawings = [];
public function __construct($clientes)
{
$this->clientes = $clientes;
}
// Função para montar os dados em array
public function array(): array
{
$data = [];
foreach ($this->clientes as $cliente) {
$data[] = [
'id' => $cliente->id,
'nome' => $cliente->nome,
'email' => $cliente->email,
'foto' => '' // A imagem será adicionada via `drawings()`
];
}
return $data;
}
// Função para definir os cabeçalhos das colunas
public function headings(): array
{
return ['ID', 'Nome', 'Email', 'Foto'];
}
// Função que adiciona as imagens na planilha
public function drawings()
{
$drawings = [];
$rowIndex = 2; // As imagens começam na linha 2, após o cabeçalho.
foreach ($this->clientes as $cliente) {
if (!empty($cliente->foto_base64)) {
// Chama o método para criar o desenho da imagem
$drawing = $this->createMemoryDrawing($cliente->foto_base64, 'D' . $rowIndex);
$drawings[] = $drawing;
}
$rowIndex++;
}
return $drawings;
}
// Função para criar a imagem a partir da string base64 e ajustá-la proporcionalmente
private function createMemoryDrawing($base64Image, $coordinates)
{
// Cria o recurso de imagem a partir da string base64
$imageResource = $this->createImageFromBase64($base64Image);
// Obtém as dimensões originais da imagem
$originalWidth = imagesx($imageResource);
$originalHeight = imagesy($imageResource);
// Define a nova largura (80px) e calcula a altura proporcional
$newWidth = 80;
$newHeight = ($originalHeight / $originalWidth) * $newWidth;
// Cria a imagem na planilha com as novas dimensões
$drawing = new MemoryDrawing();
$drawing->setImageResource($imageResource);
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_PNG);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_PNG);
$drawing->setCoordinates($coordinates);
$drawing->setWidth($newWidth); // Define a largura como 80px
$drawing->setHeight($newHeight); // Define a altura proporcional
return $drawing;
}
// Função para converter a string base64 em um recurso de imagem
private function createImageFromBase64($base64Image)
{
// Remove a parte 'base64,' se estiver presente
if (strpos($base64Image, 'base64,') !== false) {
$imageParts = explode('base64,', $base64Image);
$base64Image = $imageParts[1];
}
// Decodifica a imagem
$imageData = base64_decode($base64Image);
$imageResource = imagecreatefromstring($imageData);
if (!$imageResource) {
throw new \Exception('A imagem base64 não pôde ser convertida em um recurso de imagem.');
}
return $imageResource;
}
}
ClientesExport
No terminal, execute o comando:
php artisan make:export ClientesExport --model=Cliente
Depois, edite o arquivo gerado em app/Exports/ClientesExport.php
para incluir as funcionalidades de imagens.
Agora, vamos criar o controlador para lidar com a exportação de clientes. No terminal, crie o controlador:
php artisan make:controller ClienteController
No controlador ClienteController.php
, adicione a função para exportar a lista de clientes com imagens:
<?php
namespace App\Http\Controllers;
use App\Exports\ClientesExport;
use App\Models\Cliente;
use Maatwebsite\Excel\Facades\Excel;
class ClienteController extends Controller
{
public function exportarClientes()
{
$clientes = Cliente::all(); // Pega todos os clientes do banco
return Excel::download(new ClientesExport($clientes), 'clientes.xlsx');
}
}
No arquivo routes/web.php
, adicione uma rota para acessar a funcionalidade de exportação:
use App\Http\Controllers\ClienteController;
Route::get('exportar-clientes', [ClienteController::class, 'exportarClientes']);
Agora que tudo está configurado, você pode testar a exportação. Basta acessar a rota http://localhost:8000/exportar-clientes
no seu navegador, e a planilha Excel será gerada para download, contendo as fotos dos clientes.
MemoryDrawing
, que converte as imagens base64 para o formato PNG.foto_base64
na tabela de clientes deve armazenar a imagem codificada em base64. Você pode usar bibliotecas JavaScript para capturar e converter a imagem diretamente no front-end.
Tabela para consulta rápida a convenção de nomes utilizadas em projetos Laravel: Leia mais
Go (ou Golang) é uma linguagem de programação eficiente e fácil de usar, conhecida por sua simplicidade, sendo ideal para... Leia mais
Para instalar o docker no ubuntu basta seguir os passos abaixo: Abra o terminal do Linux copie e cole os... Leia mais
Como todo mundo na programação já passou por este clichê, aqui não poderia ser diferente então o primeiro post desse... Leia mais