[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Aurélio Oliveira
Criador Aurélio Oliveira 29/04/2019

Bom dia Carlos,

Tenho a necessidade de criar um pdf e segui sua dica utilizando o DomPdf. O problema é que ao tentar chamar a view tenho seguinte erro:

 

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)

Class 'DOMDocument' not found

 

Estou fazendo assim: 

        return \PDF::loadView('ocorrencia.imprimir', compact('ocorrenciaSelecionada','tipoOcorrencia'))

                    ->setPaper('A4','portrait')

                    ->stream('teste.pdf');;

 

Manager Carlos Ferreira 29/04/2019

Olá, Aurélio!
Tudo bem?

Você seguiu esse tutorial?
https://blog.especializati.com.br/gerar-pdf-no-laravel-com-dompdf/

No seu arquivo composer.json tem essa dependência definida?

Me mostra esse código completo, porque assim fica mais fácil de analisar e te auxiliar na solução.

No aguardo.

Carlos Ferreira
Criador Aurélio Oliveira 29/04/2019

Ola, sim segui o tutorial.

Fiz a instalação e mesmo meu laravel sendo o 5.7.2 adicionei a classe no providers e no aliases, pois não tinha funcionado.

Também fiz o procedimento para gerar o arquivo de configuração padrão com o php artisan vendor:  publish --provider="Barryvdh\DomPDF\ServiceProvider".

 

composer.json

{

    "name": "laravel/laravel",

    "description": "The Laravel Framework.",

    "keywords": ["framework", "laravel"],

    "license": "MIT",

    "type": "project",

    "require": {

        "php": "^7.1.3",

        "barryvdh/laravel-dompdf": "^0.8.4",

        "fideloper/proxy": "^4.0",

        "laravel/framework": "5.7.*",

        "laravel/tinker": "^1.0",

        "laravelcollective/html": "^5.4.0"

    },

    "require-dev": {

        "beyondcode/laravel-dump-server": "^1.0",

        "filp/whoops": "^2.0",

        "fzaninotto/faker": "^1.4",

        "mockery/mockery": "^1.0",

        "nunomaduro/collision": "^2.0",

        "phpunit/phpunit": "^7.0"

    },

    "autoload": {

        "classmap": [

            "database/seeds",

            "database/factories"

        ],

        "psr-4": {

            "App\\": "app/"

        }

    },

    "autoload-dev": {

        "psr-4": {

            "Tests\\": "tests/"

        }

    },

    "extra": {

        "laravel": {

            "dont-discover": [

            ]

        }

    },

    "scripts": {

        "post-root-package-install": [

            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""

        ],

        "post-create-project-cmd": [

            "@php artisan key:generate"

        ],

        "post-autoload-dump": [

            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",

            "@php artisan package:discover"

        ]

    },

    "config": {

        "preferred-install": "dist",

        "sort-packages": true,

        "optimize-autoloader": true

    },

    "minimum-stability": "dev",

    "prefer-stable": true

}

 

Aurélio Oliveira
Manager Carlos Ferreira 29/04/2019

Nas versões do Laravel superiores a 5.5 não precisa registrar providers nem aliases, porque o autodescovery do Laravel isso automaticamente.

Testei aqui em uma versão 5.7, e deu certinho. Veja os passos que segui.

Primeiro instalei o pacote:
composer require barryvdh/laravel-dompdf

Não restriei nenhum provider, porque o autodescovery do Laravel já fez isso.

Depois disso rode esse teste nas rotas, e deu certo:
use App;

Route::get('pdf', function () {
    $pdf = App::make('dompdf.wrapper');
    $pdf->loadHTML('<h1>Test</h1>');
    return $pdf->stream();
});

Carlos Ferreira
Criador Aurélio Oliveira 29/04/2019

Bom dia Carlos obrigado pelo retorno.

Fiz o teste que você sugeriu e continua o problema. Será que se eu colocar o projeto no GitHub você pode me ajudar?

 

Desde já muito obrigado.

Aurélio Oliveira
Manager Carlos Ferreira 29/04/2019

Removeu os providers que você registrou manualmente? Porque pode ser isso o problema.

Pode sim, sobe o projeto para o GitHub, assim analiso e te dou um feedback preciso do problema.

Carlos Ferreira
Criador Aurélio Oliveira 29/04/2019

Boa tarde Carlos,

Desculpe a demora, voltei aos estudos. Segue um projeto teste para ver se consegue me ajudar.
Tanto nesse projeto teste quanto no meu projeto que já esta em produção esta com o mesmo erro.

GitHub: https://github.com/AurelioOliver/dompdf

 

Desde já muito obrigado pela ajuda.

 

Aurélio Oliveira
Manager Carlos Ferreira 29/04/2019

Olá Aurélio!

Baixei o seu projeto e testei.

O primeiro erro era no arquivo de rotas routes/web.php

Removi o use App; e deixei assim:
Route::get('pdf', function () {
    $pdf = \App::make('dompdf.wrapper');
    $pdf->loadHTML('<h1>Test</h1>');
    return $pdf->stream();
});

Depois notei que deu o erro "Class dompdf.wrapper does not exist". Conferi no arquivo composer.json e não tinha a dependencia definida.

Porntato, instalei o pacote:
composer require barryvdh/laravel-dompdf

Depois gerei o arquivo de configuração (opcional):
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

E por último testei novamente, e deu certo:
http://tests-students.local/pdf

Carlos Ferreira
Cláudio Mecenas 29/04/2019

Opa, professor. Tudo bem? Eu estou iniciando uma pesquisa aqui sobre como posso apresentar, internamente em minha aplicação Laravel, um arquivo PDF e acabei achando esse ticket. A ideia é a seguinte: 

O usuário precisa fazer um upload de uma arquivo PDF, contendo seu portifolio. E, o sistema precisa disponibilizar um link público com esse PDF incorporado na página, sendo possível navegar nas páginas. 

Você teria alguma sugestão de como posso iniciar uns estudos e testes nesse sentido? 

Grato desde já!

Cláudio Mecenas
Manager BOT EspecializaTi 29/04/2019

Claro, para implementar o upload de arquivos PDF e incorporar a visualização desses arquivos em uma página da sua aplicação Laravel, você pode considerar as seguintes etapas:

 

1. **Configurar o Upload de Arquivos**:

   Use o Laravel para configurar o upload de arquivos. Você pode usar o pacote `Laravel Filesystem` ou outros pacotes de terceiros, como `Laravel Media Library`, para facilitar o processo de upload e gerenciamento de arquivos.

 

2. **Armazenar o PDF**:

   Certifique-se de armazenar o arquivo PDF em um local seguro e acessível. Você pode armazenar os arquivos no sistema de arquivos local ou usar serviços de armazenamento em nuvem, como o Amazon S3 ou o Google Cloud Storage.

 

3. **Renderizar o PDF na Página**:

   Você pode usar bibliotecas JavaScript, como o PDF.js, para renderizar o PDF na página. O PDF.js é uma biblioteca JavaScript de código aberto que permite renderizar arquivos PDF diretamente no navegador. Você pode integrá-lo em sua aplicação Laravel para permitir que os usuários visualizem o PDF incorporado na página.

 

4. **Gerenciar Links Públicos**:

   Você pode gerar links públicos para os arquivos PDF armazenados e incorporar esses links em sua página. Certifique-se de configurar a segurança adequada para garantir que apenas os usuários autorizados tenham acesso aos arquivos.

 

5. **Implementar um Visualizador de PDF Personalizado**:

   Dependendo das necessidades específicas da sua aplicação, você pode precisar implementar um visualizador de PDF personalizado para fornecer uma experiência de usuário otimizada. Isso pode incluir recursos como navegação entre páginas, zoom e download do PDF.

 

Ao seguir essas etapas, você poderá configurar o upload de arquivos PDF e incorporar a visualização desses arquivos em sua aplicação Laravel de maneira segura e eficaz. Certifique-se de considerar os requisitos de segurança ao lidar com arquivos enviados pelos usuários.

BOT EspecializaTi
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!