Autor Zpráva
Majkelju
Profil
Dobrý den,

potřebuji exportovat stránku s vygeneroanými daty z databáze do formátu PDF. Skouknul jsem tutoriály, ale všude v příkladech uvádějí jen jednoduché tabulky. Když tabulku hodím do proměnné $html, tak, jak to všude ukazují, tak to nejede. Asi tomu vadí php kód uvnitř tabulky??? Přikládám onen kód... Předem děkuji za rady a připomínky...

<?php
include("../mpdf/mpdf.php");
$mpdf=new mPDF('c','A4','','' , 0 , 0 , 0 , 0 , 0 , 0); 
$mpdf->SetDisplayMode('fullpage');
$mpdf->list_indent_first_level = 0;  // 1 or 0 - whether to indent the first level of a list

$html= ' ?>
<form id="obj_form" name="obj_form" method="post" action="?menu1=1&IDstavba= <? echo $IDstavba;?>&IdStStupen=<?echo $IdStStupen;?>">  

    <table cellpadding="0" cellspacing="0" border="0" class="display" id="tabulka_objekty_stavby_stupne">
           <thead>
               <tr>
                <th></th>
                <th></th>
                <?if($stupen > 2){echo "<th></th>";}?>
                <th>Zatřídění</th>
                   <th>Značka</th>
                   <th>Název</th>
                   <th>od KM</th>
                   <th>do KM</th>
                <th>Množství</th>
                <th>mj</th>
                <th>JC<br /><p class="mensi"><?if(VratStupen($IdStStupen) == 1){echo '[ tis. Kč ]';}else{echo '[ Kč ]';}?></p></th>
                <th class="cena_min">Cena MIN<br /><p class="mensi">[ tis. Kč ]</p></th>
                <th class="cena_ex">Cena<br /><p class="mensi">[ tis. Kč ]</p></th>
                <th class="cena_max">Cena MAX<br /><p class="mensi">[ tis. Kč ]</p></th> 
               </tr>
           </thead>
           <tbody>
           <?php
            $_SESSION["navstiveny_stupen"] = $IdStStupen;
            $navstiveny_objekt = $_SESSION["navstiveny_objekt"];
            $cislo_radku=0;
            $counting = true;
            $result = $db->query("
            SELECT
            `objekty`.`id` AS `id`,
            `objekty`.`znacka` AS `znacka`,
            `objekty`.`nazev` AS `nazev`,
            `objekty`.`k_zatrideni` AS `k_zatrideni`,
            `mnozstvi`,
            `priznak`,           
            `km_od`,
            `km_do`,          
            `objekty`.`cena` AS `cena`,
            `objekty`.`cena_min` AS `cena_min`,
            `objekty`.`cena_max` AS `cena_max`,
            `zatrideni`.`znacka` AS `zn_zatrideni`,
            `mj`.`znacka` AS `mj`
            FROM `objekty` 
            JOIN `zatrideni` 
            ON `zatrideni`.`id` = `objekty`.`k_zatrideni`
            JOIN `mj`
            ON `mj`.`id` = `zatrideni`.`k_mj`
            JOIN `stavby_stupen`
            ON `stavby_stupen`.`id` = `objekty`.`k_stavba_stupen`
            JOIN `stavby`
            ON `stavby`.`id` = `stavby_stupen`.`k_stavba`
            JOIN `stavby_uzivatele`
            ON `stavby_uzivatele`.`k_stavby` = `stavby`.`id`
            WHERE `objekty`.`k_stavba_stupen` = '$IdStStupen'  
            AND `stavby_uzivatele`.`k_uzivatele` = '$userID'
            ORDER BY  `objekty`.`znacka` ASC, 
            `objekty`.`nazev` ASC");
            while($row = $result->fetch_assoc()){
                if($counting) $cislo_radku++;
                if($row['id']==$navstiveny_objekt){
                    $counting = false;
                }
                ?>
            <tr <?if($row['id']==$navstiveny_objekt) echo 'class="vybrany_radek"';?>>
            <?if($stupen == 1){$Cena = SectiCenu_IZ_A ($IdStStupen);?>
                <td class="stred">
                    <? if((substr($row['zn_zatrideni'], 0, 2))!="B." && $row['zn_zatrideni'] != "A.4"){?>
                        <?if($auth->get_prava_stavby($IDstavba, 'd')){?>
                            <input name="objekt_checkbox[]" type="checkbox" value="<? echo $row['id']; ?>">
                        <?}?>
                    <?}?>
                </td> 
                <td class="stred">
                    <?if($auth->get_prava_stavby($IDstavba, 'e')){?>
                        <?if((substr($row['zn_zatrideni'], 0, 2))!="B."){
                            if ($row['zn_zatrideni'] == "A.4"){?>
                                <img class="rucka" src="./obrazky/stavby/Actions-document-edit-icon3.png"  onclick="javascript:EditObjektMUK(<? echo $row['id']; ?>);" />
                            <?}else{?>
                                <img class="rucka" src="./obrazky/stavby/Actions-document-edit-icon3.png"  onclick="javascript:A_E_Objekt(<? echo $row['id']; ?>, 'EDIT');" />
                            <?}
                        } else {?>
                            <img class="rucka" src="./obrazky/stavby/Actions-document-edit-icon3.png"  onclick="javascript:EditObjektIZ_B(<? echo $row['id']; ?>);" />
                        <?}
                    }?>
                </td>
            <?}elseif($stupen == 2){?>
                <?if ($auth->get_prava_stavby($IDstavba, 'd')) {?>
                    <td class="stred"><input name="objekt_checkbox[]" type="checkbox" value="<? echo $row['id']; ?>"></td> 
                <?} else {?>
                    <td></td> 
                <?} if ($auth->get_prava_stavby($IDstavba, 'e')) {?>
                    <td class="stred"><img class="rucka" src="./obrazky/stavby/Actions-document-edit-icon3.png"  onclick="javascript:A_E_Objekt(<? echo $row['id']; ?>,'EDIT');" /></td>
                <?} else {?>
                    <td></td> 
                <?}?>
            <?}elseif($stupen == 3){?>
                <?if ($auth->get_prava_stavby($IDstavba, 'd')) {?>
                    <td class="stred"><input name="objekt_checkbox[]" type="checkbox" value="<? echo $row['id']; ?>"></td> 
                <?} else {?>
                    <td></td> 
                <?} if ($auth->get_prava_stavby($IDstavba, 'e')) {?>
                    <td class="stred"><img class="rucka" src="./obrazky/stavby/Actions-document-edit-icon3.png"  onclick="javascript:A_E_Objekt(<? echo $row['id']; ?>, 'EDIT');" /></td>
                <?} else {?>
                    <td></td> 
                <?}?>
                <td class="stred">
                <?if($row['k_zatrideni'] != 0){?>
                    <a href="?menu1=1&IDstavba=<?echo $IDstavba;?>&IdStStupen=<?echo $IdStStupen;?>&IDobjekt=<? echo $row['id'];?>"><img src="./obrazky/stavby/Continue2.png"></a>
                <?}?>
                </td>
            <?}?> 
                <td><? echo $row['zn_zatrideni'];?></td>                                       
                <td><? echo $row['znacka'];?></td>   
                <td><? echo $row['nazev'];?></td> 
                <td class="vpravo"><? echo $row['km_od'];?></td>
                <td class="vpravo"><? echo $row['km_do'];?></td>                   
                <td class="vpravo">
                    <?if(($row['zn_zatrideni'][0])=="B"){
                        if($row['priznak'] == 3){                            
                            echo number_format((($row['cena']/$Cena[1])*100) ,2 ,'.' ,$oddelovac_tisicu);
                        }else{
                            echo number_format($row['cena'] ,2 ,'.' ,$oddelovac_tisicu);
                        }
                    }
                    else{
                        switch(VratStupen($IdStStupen)){
                            case 1:{
                                if ($row['zn_zatrideni'] == "A.4"){
                                    echo number_format($row['mnozstvi'] ,1 ,'.' ,$oddelovac_tisicu);
                                }else{
                                    echo number_format($row['mnozstvi'] ,3 ,'.' ,$oddelovac_tisicu);
                                }
                            } break;
                            case 2:{
                                echo number_format($row['mnozstvi'] ,2 ,'.' ,$oddelovac_tisicu);
                            } break;
                            case 3:{
                                echo number_format($row['mnozstvi'] ,2 ,'.' ,$oddelovac_tisicu);
                            } break;
                        }
                    }?>
                </td>
                <td><? echo $row['mj'];?></td>
                <td class="vpravo">
                    <?if(($row['zn_zatrideni'][0])=="B"){
                        if($row['priznak'] == 3){
                            echo number_format(($row['cena']/1000) ,0 ,'.' ,$oddelovac_tisicu );
                        }else{
                            echo number_format(((($row['cena']/100)*$Cena[1])/1000) ,0 ,'.' ,$oddelovac_tisicu);
                        }
                    }else{
                        if($row['mnozstvi']!=0){
                            $res=$row['cena']/$row['mnozstvi'];
                        }else{ 
                            $res=0; 
                        }
                        $del = 1;
                        if(VratStupen($IdStStupen) == 1){
                            $del = 1000;
                        }
                        echo number_format(($res/$del) ,0 ,'.' ,$oddelovac_tisicu );
                    }?>
                </td> 
                <td class="vpravo cena_min"><? if(($row['zn_zatrideni'][0])=="B"){if($row['priznak'] == 3){echo number_format(($row['cena_min']/1000) ,0 ,'.' ,$oddelovac_tisicu);}else{echo number_format(((($row['cena_min']/100)*$Cena[0])/1000) ,0 ,'.' ,$oddelovac_tisicu);}}else{echo number_format(($row['cena_min']/1000) ,0 ,'.' ,$oddelovac_tisicu);}?></td> 
                <td class="vpravo cena_ex"><? if(($row['zn_zatrideni'][0])=="B"){if($row['priznak'] == 3){echo number_format(($row['cena']/1000) ,0 ,'.' ,$oddelovac_tisicu);}else{echo number_format(((($row['cena']/100)*$Cena[1])/1000) ,0 ,'.' ,$oddelovac_tisicu);}}else{echo number_format(($row['cena']/1000) ,0 ,'.' ,$oddelovac_tisicu);}?></td> 
                <td class="vpravo cena_max"><? if(($row['zn_zatrideni'][0])=="B"){if($row['priznak'] == 3){echo number_format(($row['cena_max']/1000) ,0 ,'.' ,$oddelovac_tisicu);}else{echo number_format(((($row['cena_max']/100)*$Cena[2])/1000) ,0 ,'.' ,$oddelovac_tisicu);}}else{echo number_format(($row['cena_max']/1000) ,0 ,'.' ,$oddelovac_tisicu);}?></td>                                
            </tr>
        <?}?>
        </tbody>
    </table>
    <?$Celk_Cena = VratCenuStupne($IdStStupen, $oddelovac_tisicu);?>
    <table cellpadding="3" cellspacing="0" id="souhrn_ceny">
        <tr>
            <th id="shn_popis">Celková cena stupně: </th>
            <th class="cena_min shn_cena vpravo" id="shn_min"><?echo $Celk_Cena[0];?></th>
            <th class="cena_ex shn_cena vpravo" id="shn_ex"><?echo $Celk_Cena[1];?></th>
            <th class="cena_max shn_cena vpravo" id="shn_max"><?echo $Celk_Cena[2];?></th>
        </tr>
    </table>
    <input id="delete" name="delete" type="hidden" value="0">
    <input id="copy" name="copy" type="hidden" value="0">

</form>
';    

<?
$mpdf->WriteHTML($html);
$mpdf->Output(); 
exit;
?>
Joker
Profil
Majkelju:
Nejsou tam escapované apostrofy, viz i barvítko kódu tady na diskusi.
Majkelju
Profil
Ještě jsem zkoušel do mpdf načíst celou stránku, to sice skoro funguje, ale vypisuje to na tom pdfku nesmysly, a o formátování vůbec nemluvím.... :)


Joker: Díky.... takže stačí dosadit zpětná lomítka...
Majkelju
Profil
Ať escapuju jak escapuju, tak to nefachá...mohl by někdo názorně ukázat, jak to pořešit? Docela se v těch uvozokách a zpětných lomítkách ztrácím :(
Šéva
Profil
mPDF taky používám a moje zkušenost je:

$html='nejaký kod vše v php a můžes zde použít klasické apostrofy " a uazvřeš zase takhle ';
dále na co jsem přišel,tak

$mpdf=new mPDF('UTF-8','A4','','' , 0 , 0 , 0 , 0 , 0 , 0); 

potom si ten kód v případě že to nemáš psané v UTF-8 přes iconv(); převést do UTF-8 a kdyby ani to nešlo,tak ješte udělat

$html=str_replace('"','\"',$html);

tím nahradíš vššchny apostrofy escapovanými...
Joker
Profil
Majkelju:
Docela se v těch uvozokách a zpětných lomítkách ztrácím :(
Odkud kam sahá řetězec ukazuje zvýrazňovač syntaxe, takže stačí prostě escapovat tak dlouho, až řetězec bude končit tam kde má končit a případně nebude PHP editor hlásit, že na tom řádku je parse error.
Případně na zadání dlouhého řetězce ve kterém jsou speciální znaky se hodí nowdoc syntaxe (od PHP 5.3):
$html = <<<'EOD'
kód co má být v řetězci
EOD
Majkelju
Profil
Děkuji za rady, ještě bych měl dotaz jak umístit php tagy...
<?
$html = <<<'EOD' 
?>

kód co má být v řetězci

<?
EOD
?>
Takto? Měl bych to poznat podle zvýraznění, ale ono i když to vypadá správně, tak to stejně vyhodí chybu...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: