Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Dynamic text on TCPDF-Laravel footer

First of all I’m 90% sure this is me not knowing some basic stuff about how php static methods work, so please forgive my ignorance. I also could not find any info on this on SO, so hopefully this won’t be a duplicate.

I’m working on a project with laravel and using the TCPDF-Laravel extension, and I have a footer that needs to say different things based on a condidition:

   if ($someCondition) {
         $footerText = <<<EOD
                text if true
          EOD;
    } else {
         $footerText = <<<EOD
                text if false
          EOD;
     }

    PDF::setFooterCallback(function($pdf,$footerText){
        $pdf->SetY(-15);
        $pdf->Write(0, $footerText, '', 0, 'L', true, 0, false, false, 0);
    });

But for some reason, again probably my ignorance, this doesn’t run. It says ‘too few arguments given’, as if $footerText wasn’t defined or was null.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

I have already tried declaring the variable before the if bracket, declaring the function outside the setFooterCallBack, and using $this->footerText but it didn’t work.

>Solution :

Ok to make this simple.

PDF::setFooterCallback() requires a callable as a first argument. That’s where you pass in function($pdf) {}. In order to expand the functions scope for a variable like $footerText, you have to use use to inherit it like so: function($pdf) use($footerText).

The reason why you get this error is because you set $footerText as a second argument after $pdf, which setFooterCallback does not know of and therefor, it’s not set and calls a too few arguments exception which is normal.

// outputs "Howdy'ho!"
(function($what) {
    echo $what;
})("Howdy'ho!");


// will throw an exception `too few arguments`
(function($what) {
    echo $what;
})();

// will output null, because it can be called without an argument.
(function($what = null) {
    echo $what;
})();

So theoretically, setting $footerText to a default null would work, but this is of course not what you intended to do.

PDF::setFooterCallback(function($pdf, $footerText = null){
  $pdf->SetY(-15);
  $pdf->Write(0, $footerText, '', 0, 'L', true, 0, false, false, 0);
});

Just inherit the variable $footerText using use.

PDF::setFooterCallback(function($pdf) use(footerText) {
  $pdf->SetY(-15);
  $pdf->Write(0, $footerText, '', 0, 'L', true, 0, false, false, 0);
});
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading