php - CANNOT RENDER A PDF FILE,OBTAINING TEXT FILE INSTEAD OF A PDF -


in cakephp 3.x , using plugin cakepdf

i tried wkhtmltopdf , dompdf , both of them had same problem>>> cannot download real pdf file, downloads plain text file.

my bootstrap.php:

plugin::load('cakepdf', array('bootstrap' => true, 'routes' => true)); routes.php: .......  router::scope('/users/view', function ($routes) {     $routes->extensions('pdf');     $routes->connect('/view/*', ['controller' => 'users', 'action' => 'view']);     $routes->fallbacks('inflectedroute'); });  router::scope('/', function ($routes) { ...... 

everything ok, when click in browser this:

/cakephp/users/view/5.pdf

i dont proper pdf file, instead of download text file (the view ctp seems work)...any idea??? :

 <!doctype html> <html> <head>     <meta http-equiv="content-type" content="text/html; charset=utf-8"/>    <title>         users\pdf    </title>     <link rel="stylesheet" href="http://localhost/fct/css/style.css"/></head> <body> <h2>informe pdf</h2>     <div id="container">         <div id="content">             <div class="users view"> <h2>user</h2>     <dl>         <dt>id</dt>         <dd>             2            &nbsp;         </dd>          <dt>username</dt>         <dd>             tutor666            &nbsp;         </dd>         <dt>created</dt>         <dd>             8/5/16, 7:34 pm            &nbsp;         </dd>         <dt>modified</dt>         <dd>             8/5/16, 7:34 pm            &nbsp;         </dd>     </dl> </div>          </div>     </div> </body> </html> 

so maybe router.php wrong?... router::scope('/users/view', function ($routes) { $routes->extensions('pdf'); $routes->connect('/view/*', ['controller' => 'users', 'action' => 'view']); $routes->fallbacks('inflectedroute'); –

reviewing cakepdf docs seems "/cakephp/users/view/5.pdf" right way....but stills download text file instead of pdf file. feel desperate!!! –

the file should 'user_15.pdf' '15.pdf, maybe code not working: userscontroller:view(): $this->viewbuilder()->options([ 'pdfconfig' => [ 'orientation' => 'portrait', 'filename' => 'user_' . $id . '.pdf' ] ]);

i @ debug history , says "get 200 application/pdf " can see above download text/text header.

here how implement cakepdf. use dompdf can installed via composer.

step 1. install cakepdf plugin

composer require friendsofcake/cakepdf 

step 2. install dompdf engind

composer require dompdf/dompdf 

step 3. make sure have requesthandler component loaded in appcontroller.php ([rootdir]/src/appcontroller.php)

public function initialize() {     parent::initialize();      $this->loadcomponent('requesthandler'); } 

step 4. enable cakepdf plugin in bootstrap.php

plugin::load('cakepdf', ['bootstrap' => true]); 

step 5. setup appropriate routes in routes.php

router::scope('/', function (routebuilder $routes) {     $routes->extensions(['pdf']);     /** other route setup **/     $routes->fallbacks(dashedroute::class); }); 

step 6. create pdf folder under templates/layouts folder , create pdf.ctp file contain following

<?= $this->fetch('content'); ?> 

the above acts blank layout pdf. can use whatever markup appropriate case

step 7. in template folder want generate pdfs in cases users (i'm assuming [rootdir]/templates/users/), create pdf folder , create view file in pdf folder (i.e [rootdir]/templates/users/pdf/view.ctp). contain markup view. example use

<?= $show;?> 

step 8. in controller function (assuming view also). should contain following

public function view () {     /** i'm displaying "text" on pdf file **/     $show = "text";      $this->viewbuilder()->options([         'pdfconfig' => [             'engine' => 'cakepdf.dompdf',             'orientation' => 'portrait',             'filename' => 'pdf view'             /** other config options can go here**/         ]     ]);      $this->set(compact('show'));     $this->set('_serialize', ['show']); } 

step 9. point browser [webpath]/users/view.pdf , should have pdf file showing "text"

you can adapt needs

cheers.


Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -