FrDeamon / EnseparHtml2pdfBundle

Html2pdf for Symfony 2 as a service.
MIT License
22 stars 22 forks source link

Notice: String offset cast occurred #20

Closed ghost closed 8 years ago

ghost commented 8 years ago

Hello,

I m tried to make works the exemple of html2pdf with the bundle, but i m stuck with the first exemple :

i have this error :

Symfony
Search on Symfony website
Exception detected!
Notice: String offset cast occurred
500 Internal Server Error - ContextErrorException
Stack Trace

    in vendor/ensepar/tcpdf/barcodes.php at line 1156  -
                    }
                    $seq .= '01010'; // center guard bar
                    for ($i = $half_len; $i < $len; ++$i) {
                        $seq .= $codes['C'][$code{$i}];
                    }
                    $seq .= '101'; // right guard bar
                }
    at ErrorHandler ->handleError ('8', 'String offset cast occurred', '/var/www/html_prod/demoPDF/vendor/ensepar/tcpdf/barcodes.php', '1156', array('code' => '0000000000451', 'len' => '13', 'upce' => false, 'data_len' => '12', 'code_len' => '12', 'sum_a' => '15', 'i' => '7', 'sum_b' => '4', 'r' => '1', 'codes' => array('A' => array('0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011'), 'B' => array('0100111', '0110011', '0011011', '0100001', '0011101', '0111001', '0000101', '0010001', '0001001', '0010111'), 'C' => array('1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100')), 'parities' => array(array('A', 'A', 'A', 'A', 'A', 'A'), array('A', 'A', 'B', 'A', 'B', 'B'), array('A', 'A', 'B', 'B', 'A', 'B'), array('A', 'A', 'B', 'B', 'B', 'A'), array('A', 'B', 'A', 'A', 'B', 'B'), array('A', 'B', 'B', 'A', 'A', 'B'), array('A', 'B', 'B', 'B', 'A', 'A'), array('A', 'B', 'A', 'B', 'A', 'B'), array('A', 'B', 'A', 'B', 'B', 'A'), array('A', 'B', 'B', 'A', 'B', 'A')), 'upce_parities' => array(array(array('B', 'B', 'B', 'A', 'A', 'A'), array('B', 'B', 'A', 'B', 'A', 'A'), array('B', 'B', 'A', 'A', 'B', 'A'), array('B', 'B', 'A', 'A', 'A', 'B'), array('B', 'A', 'B', 'B', 'A', 'A'), array('B', 'A', 'A', 'B', 'B', 'A'), array('B', 'A', 'A', 'A', 'B', 'B'), array('B', 'A', 'B', 'A', 'B', 'A'), array('B', 'A', 'B', 'A', 'A', 'B'), array('B', 'A', 'A', 'B', 'A', 'B')), array(array('A', 'A', 'A', 'B', 'B', 'B'), array('A', 'A', 'B', 'A', 'B', 'B'), array('A', 'A', 'B', 'B', 'A', 'B'), array('A', 'A', 'B', 'B', 'B', 'A'), array('A', 'B', 'A', 'A', 'B', 'B'), array('A', 'B', 'B', 'A', 'A', 'B'), array('A', 'B', 'B', 'B', 'A', 'A'), array('A', 'B', 'A', 'B', 'A', 'B'), array('A', 'B', 'A', 'B', 'B', 'A'), array('A', 'B', 'B', 'A', 'B', 'A'))), 'k' => '0', 'seq' => '10100011010001101000110100011010001101000110101010', 'bararray' => array('code' => '0000000000451', 'maxw' => '0', 'maxh' => '1', 'bcode' => array()), 'p' => array('A', 'A', 'A', 'A', 'A', 'A'), 'half_len' => '7'))
    in vendor/ensepar/tcpdf/barcodes.php at line 1156  +
    at TCPDFBarcode ->barcode_eanupc ('45', '13')
    in vendor/ensepar/tcpdf/barcodes.php at line 165  +
    at TCPDFBarcode ->setBarcode ('45', 'EAN13')
    in vendor/ensepar/tcpdf/barcodes.php at line 85  +
    at TCPDFBarcode ->__construct ('45', 'EAN13')
    in vendor/ensepar/tcpdf/tcpdf.php at line 13252  +
    at TCPDF ->write1DBarcode ('45', 'EAN13', '0', '0', '30', '6', '', array('position' => 'S', 'text' => true, 'fgcolor' => array('0', '0', '0'), 'bgcolor' => false), 'N')
    in vendor/ensepar/html2pdf/_class/myPdf.class.php at line 1227  +
    at HTML2PDF_myPdf ->myBarcode ('45', 'EAN13', '0', '0', '30', '6', '4', array('0', '0', '0'))
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 3091  +
    at HTML2PDF ->_tag_open_BARCODE (array('style' => array('width' => '30mm', 'height' => '6mm', 'font-size' => '4mm'), 'type' => 'EAN13', 'value' => '45', 'num' => '3'))
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 1254  +
    at HTML2PDF ->_executeAction (array('name' => 'barcode', 'close' => '0', 'autoclose' => '0', 'param' => array('style' => array('width' => '30mm', 'height' => '6mm', 'font-size' => '4mm'), 'type' => 'EAN13', 'value' => '45', 'num' => '3'), 'html_pos' => '2890'))
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 1225  +
    at HTML2PDF ->_makeHTMLcode ()
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 5439  +
    at HTML2PDF ->_tag_open_TD (array('style' => array('border' => 'solid 1px #000000'), 'border' => 'border: solid 1px #000000', 'num' => '3'))
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 1254  +
    at HTML2PDF ->_executeAction (array('name' => 'td', 'close' => '0', 'autoclose' => '0', 'param' => array('style' => array('border' => 'solid 1px #000000'), 'border' => 'border: solid 1px #000000', 'num' => '3'), 'html_pos' => '2875'))
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 1211  +
    at HTML2PDF ->_makeHTMLcode ()
    in vendor/ensepar/html2pdf/HTML2PDF.php at line 407  +
    at HTML2PDF ->writeHTML ('<style type="text/Css"> <!-- .test1 { border: solid 1px #FF0000; background: #FFFFFF; border-collapse: collapse; } --> </style> <page style="font-size: 14px"> <span style="font-weight: bold; font-size: 18pt; color: #FF0000; font-family: Times">Bonjour, voici quelques exemples<br></span> <br> Retours à la ligne autorisés : &lt;br&gt;, &lt;br &gt;, &lt;br/&gt;, &lt;br /&gt; <br /> <br> Barre horizontale &lt;hr&gt;<hr style="height: 4mm; background: #AA5500; border: solid 1mm #0055AA"> Exemple de lien : <a href="http://html2pdf.fr/" >le site HTML2PDF</a><br> <br> Image : <img src="./res/logo.gif" alt="Logo" width=150 /><br> <br> Alignement horizontal des DIVs et TABLEs<br /> <table style="text-align: center; border: solid 2px red; background: #FFEEEE;width: 40%" align="center"><tr><td style="width: 100%">Test 1</td></tr></table><br /> <table style="text-align: center; border: solid 2px red; background: #FFEEEE;width: 40%; margin: auto"><tr><td style="width: 100%">Test 2</td></tr></table><br /> <div style="text-align: center; border: solid 2px red; background: #FFEEEE;width: 40%; margin: auto">Test 3</div><br /> test de tableau imbriqué :<br> <table border="1" bordercolor="#007" bgcolor="#AAAAAA" align="center"> <tr> <td border="1"> <table style="border: solid 1px #FF0000; background: #FFFFFF; width: 100%; text-align: center"> <tr> <th style="border: solid 1px #007700;width: 50%">C1 € «</th> <td style="border: solid 1px #007700;width: 50%">C2 € «</td> </tr> <tr> <td style="border: solid 1px #007700;width: 50%">D1 &euro; &laquo;</td> <th style="border: solid 1px #007700;width: 50%">D2 &euro; &laquo;</th> </tr> </table> </td> <td border="1">A2</td> <td border="1">AAAAAAAA</td> </tr> <tr> <td border="1">B1</td> <td border="1" rowspan="2"> <table class="test1"> <tr> <td style="border: solid 2px #007700">E1</td> <td style="border: solid 2px #000077; padding: 2mm"> <table style="border: solid 1px #445500"> <tr> <td> <img src="./res/logo.gif" alt="Logo" width=100 /> </td> </tr> </table> </td> </tr> <tr> <td style="border: solid 2px #770000">F1</td> <td style="border: solid 2px #007777">F2</td> </tr> </table> </td> <td border="1"><barcode type="EAN13" value="45" style="width: 30mm; height: 6mm; font-size: 4mm"></barcode></td> </tr> <tr> <td border="1"><barcode type="C39" value="HTML2PDF" label="none" style="width: 35mm; height: 8mm"></barcode></td> <td border="1">A2</td> </tr> </table> <br> Exemple avec border et padding : <br> <table style="border: solid 5mm #770000; padding: 5mm;" cellspacing="0" > <tr> <td style="border: solid 3mm #007700; padding: 2mm;"><img src="./res/off.png" alt="" style="width: 20mm"></td> </tr> </table> <img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><br> <br> <table style="border: solid 1px #440000; width: 150px" cellspacing="0"><tr><td style="width: 100%">Largeur : 150px</td></tr></table><br> <table style="border: solid 1px #440000; width: 150pt" cellspacing="0"><tr><td style="width: 100%">Largeur : 150pt</td></tr></table><br> <table style="border: solid 1px #440000; width: 100mm" cellspacing="0"><tr><td style="width: 100%">Largeur : 100mm</td></tr></table><br> <table style="border: solid 1px #440000; width: 5in" cellspacing="0"><tr><td style="width: 100%">Largeur : 5in</td></tr></table><br> <table style="border: solid 1px #440000; width: 80%" cellspacing="0"><tr><td style="width: 100%">Largeur : 80% </td></tr></table><br> </page>')
    in src/AppBundle/Controller/DefaultController.php at line 24  +
    at DefaultController ->indexAction (object(Request))
    at call_user_func_array (array(object(DefaultController), 'indexAction'), array(object(Request)))
    in app/bootstrap.php.cache at line 3109  +
    at HttpKernel ->handleRaw (object(Request), '1')
    in app/bootstrap.php.cache at line 3071  +
    at HttpKernel ->handle (object(Request), '1', true)
    in app/bootstrap.php.cache at line 3222  +
    at ContainerAwareHttpKernel ->handle (object(Request), '1', true)
    in app/bootstrap.php.cache at line 2444  +
    at Kernel ->handle (object(Request))
    in web/app_dev.php at line 29  +

Logs  -
1 error

    INFO - Matched route "homepage".
    INFO - Populated the TokenStorage with an anonymous Token.
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DumpListener::configure".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
    DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
    INFO - Defining the initRuntime() method in the "form" extension is deprecated. Use the `needs_environment` option to get the Twig_Environment instance in filters, functions, or tests; or explicitly implement Twig_Extension_InitRuntimeInterface if needed (not recommended).
    CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Notice: String offset cast occurred" at /var/www/html_prod/demoPDF/vendor/ensepar/tcpdf/barcodes.php line 1156
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DumpListener::configure".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
    DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
    DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
    DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".

Stack Trace (Plain Text)  +
2.7.6
66f32e app dev
500 DefaultController indexAction on homepage
0
2
1793 ms
28.8 MB
0
Twig 1405 ms
Database 0
anon.

Andi used this twig :

<style type="text/Css">
<!--
.test1
{
    border: solid 1px #FF0000;
    background: #FFFFFF;
    border-collapse: collapse;
}
-->
</style>
<page style="font-size: 14px">
    <span style="font-weight: bold; font-size: 18pt; color: #FF0000; font-family: Times">Bonjour, voici quelques exemples<br></span>
    <br>
    Retours à la ligne autorisés : &lt;br&gt;, &lt;br &gt;, &lt;br/&gt;, &lt;br /&gt; <br />
    <br>
    Barre horizontale &lt;hr&gt;<hr style="height: 4mm; background: #AA5500; border: solid 1mm #0055AA">
    Exemple de lien : <a href="http://html2pdf.fr/" >le site HTML2PDF</a><br>
    <br>
    Image : <img src="./res/logo.gif" alt="Logo" width=150 /><br>
    <br>
    Alignement horizontal des DIVs et TABLEs<br />
    <table style="text-align: center; border: solid 2px red; background: #FFEEEE;width: 40%" align="center"><tr><td style="width: 100%">Test 1</td></tr></table><br />
    <table style="text-align: center; border: solid 2px red; background: #FFEEEE;width: 40%; margin: auto"><tr><td style="width: 100%">Test 2</td></tr></table><br />
    <div style="text-align: center; border: solid 2px red; background: #FFEEEE;width: 40%; margin: auto">Test 3</div><br />
    test de tableau imbriqué :<br>
    <table border="1" bordercolor="#007" bgcolor="#AAAAAA" align="center">
        <tr>
            <td border="1">
                <table style="border: solid 1px #FF0000; background: #FFFFFF; width: 100%; text-align: center">
                    <tr>
                        <th style="border: solid 1px #007700;width: 50%">C1 € «</th>
                        <td style="border: solid 1px #007700;width: 50%">C2 € «</td>
                    </tr>
                    <tr>
                        <td style="border: solid 1px #007700;width: 50%">D1 &euro; &laquo;</td>
                        <th style="border: solid 1px #007700;width: 50%">D2 &euro; &laquo;</th>
                    </tr>
                </table>
            </td>
            <td border="1">A2</td>
            <td border="1">AAAAAAAA</td>
        </tr>
        <tr>
            <td border="1">B1</td>
            <td border="1" rowspan="2">
                <table class="test1">
                    <tr>
                        <td style="border: solid 2px #007700">E1</td>
                        <td style="border: solid 2px #000077; padding: 2mm">
                            <table style="border: solid 1px #445500">
                                <tr>
                                    <td>
                                        <img src="./res/logo.gif" alt="Logo" width=100 />
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td style="border: solid 2px #770000">F1</td>
                        <td style="border: solid 2px #007777">F2</td>
                    </tr>
                </table>
            </td>
            <td border="1"><barcode type="EAN13" value="45" style="width: 30mm; height: 6mm; font-size: 4mm"></barcode></td>
        </tr>
        <tr>
            <td border="1"><barcode type="C39" value="HTML2PDF" label="none" style="width: 35mm; height: 8mm"></barcode></td>
            <td border="1">A2</td>
        </tr>
    </table>
    <br>
    Exemple avec border et padding : <br>
    <table style="border: solid 5mm #770000; padding: 5mm;" cellspacing="0" >
        <tr>
            <td style="border: solid 3mm #007700; padding: 2mm;"><img src="./res/off.png" alt="" style="width: 20mm"></td>
        </tr>
    </table>
    <img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><img src="./res/off.png" style="width: 10mm;"><br>
    <br>
    <table style="border: solid 1px #440000; width: 150px"  cellspacing="0"><tr><td style="width: 100%">Largeur : 150px</td></tr></table><br>
    <table style="border: solid 1px #440000; width: 150pt"  cellspacing="0"><tr><td style="width: 100%">Largeur : 150pt</td></tr></table><br>
    <table style="border: solid 1px #440000; width: 100mm"  cellspacing="0"><tr><td style="width: 100%">Largeur : 100mm</td></tr></table><br>
    <table style="border: solid 1px #440000; width: 5in"    cellspacing="0"><tr><td style="width: 100%">Largeur : 5in</td></tr></table><br>
    <table style="border: solid 1px #440000; width: 80%"    cellspacing="0"><tr><td style="width: 100%">Largeur : 80% </td></tr></table><br>
</page>

and this is my controler :

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
$name = "Yassin";
 //on stocke la vue à convertir en PDF, en n'oubliant pas les paramètres twig si la vue comporte des données dynamiques
$html = $this->renderView('AppBundle:Default:index.html.twig', array('name'=>$name));
//on appelle le service html2pdf
$html2pdf = $this->get('html2pdf_factory')->create();
//real : utilise la taille réelle
$html2pdf->pdf->SetDisplayMode('real');
//writeHTML va tout simplement prendre la vue stocker dans la variable $html pour la convertir en format PDF
$html2pdf->writeHTML($html);
//Output envoit le document PDF au navigateur internet
return new Response($html2pdf->Output('nom-du-pdf.pdf'), 200, array('Content-Type' => 'application/pdf'));   

    }   
}

and of cours i add all image on the folder :

/var/www/html_prod/demoPDF/web/res

can u help me please

ghost commented 8 years ago

j'ai trouvé la réponse ici --> http://www.yaronet.com/board/topic/167705

Avec la version 5.5 de php, j'ai la notice suivante qui est affichée :

Notice: String offset cast occurred in C:\www\html2pdf_v4.03\_tcpdf_5.0.002\barcodes.php on line 1156

L'erreur vient de la ligne

$seq .= $codes['C'][$code{$i}];

et des lignes équivalentes dans l'ensemble du code de la page barcodes.php.

Elle vient du fait que

{$i}

a le type variable alors que le code attends un integer. Pour résoudre le problème, il faut écrire :

$seq .= $codes['C'][$code{(int)$i}];

Ce qui revient à remplacer tous les

{$i}

par

{(int)$i}
OwlyCode commented 8 years ago

Good catch ! Can you submit a pull request on https://github.com/OwlyCode/html2pdf to fix the example ?

Thank you !