Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: ZAJDAN 12. 07. 2013, 12:05:13
-
Ahojte,
prosím Vás nemátě někdo zkušenosti s PHP knihovnou mPDF, která exportuje HTML,PHP stránky do PDF?....
nedaří se mi to rozhodit
-
abych to upresnil:
Debian 6 + LAMP
step 1) nakopiroval jsem slozku knihoven mPDF do /usr/share/php5/MPDF65
step 2) v souboru php.ini jsem zavedl cestu ke knihovne: include_path = ".:/usr/share/php5/MPDF56/"
step 3) v html strance jsem si vytvoril submit tlacitko:
<form action="/create-pdf.php" method="post" class="pdf" id="form-pdf">
<p><input type="submit" name="pdf" value="create PDF" /></p>
</form>
step 4) a nakonec vytvoril samotnou php stranku na kterou odkazuji v submitu(action), ktera obsahuje:
<?php
include('../mpdf.php');
$mpdf=new mPDF();
$mpdf->WriteHTML('<p>Hallo World</p>');
$mpdf->Output();
exit;
?>
step 5) restartoval LAMP server
step 6) vyzkoušel funkčnost, ale vygeneruje se mi blank (bílá) stránka
-
Pouzivame to v projektu postavenem na Nette, takze vlastni html stranky ziskame pomoci Latte sablony
Funguje mi tento postup:
$latte = Latte sablona
Naplneni sablony
$html = '<html><body>';
$html .= $latte->getHTML(); - tady si dej napr. to svoje '<p>Hallo World</p>' nebo jakykoliv jiny uzitecny obsah
$html .= '</body></html>';
$mpdf = ziskani instance mPDF (coz ti funguje, kdyz ziskas pdf ;-) )
$mpdf->resetMPDFInstance();
$mpdf->setCSS(file_get_contents(main.css'));
$mpdf->setHTML($html);
return $mpdf->getPDF();
Postup vymyslel kolega, ja to od nej pouze zkopiroval...
A nasledne ve volajici metode
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename=ha-loo_dobijeci_kupony_'.$this->customerCli->getCislo().'.pdf');
header("Content-Transfer-Encoding: binary");
header('Content-Type: '.$pdf->getContentType()); // $pdf obsahuje navratovou hodnotu z mpdf (tedy to $mpdf->getPDF(); )
echo $pdf->getData(); - tim poslu klientovi pdf dokument
Myslim si, ze ti tam proste chybi <html> a <body> :-)
-
Myslim si, ze ti tam proste chybi <html> a <body> :-)
To jsou odjakživa nepovinné HTML tagy a pokud mPDF není bazmek, tak by se měl s jejich nepřítomností vypořádat.
-
mpdf vypada jednoduseji ze sezere html, ale ja od nej dycky utekl ke "slozitejsimu" tcpdf. nebo druha varianta je wkhtmltopdf.
-
díky hoši...
já nesjem vůbec zkušený programátor naopak amatér, ale tipuji, že jsem to dělal špatně už z toho důvodu, že zápis volající mPDF jsem měl uplně oddělen od souboru kde se nachází html obsah který by se měl dostat do PDF.
V mém případě mám formulář který se odešlě sem:
<!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage">
<link href="images/ERKA-favIcon-64.png" rel="icon" type="image/png" />
<head>
<title>ERKA form</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<?php
?>
<style type="text/css">
.outputForm {
float:left;
margin-right:15px;
margin-left:15px;
margin-top:5px;
margin-bottom:5px;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 13px;
font-weight: bold;
}
.outputFormText {
float:left;
margin-left:5px;
margin-right:5px;
margin-top:5px;
margin-bottom:1px;
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
font-size: 16px;
}
.outputFormImage-type-1 {
float:left;
margin-left:50px;
margin-right:10px;
margin-bottom:5px;
}
</style>
<div style="max-width: 595px; height: 1600px; margin-left: auto; margin-right: auto; background-color:white; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<?php
$kunde = $_POST['kunde'];
$adresse = $_POST['adresse'];
$I = $_POST['I'];
$type = $_POST['cabinetType'];
$abteilen = $_POST['abteilen'];
$breite = $_POST['breite'];
$tiefe = $_POST['tiefe'];
$hoehe = $_POST['hoehe'];
$shelf = $_POST['facheinlage'];
$sockel = $_POST['sockel'];
$deckel = $_POST['deckel'];
$door = $_POST['turen'];
$doorDirection = $_POST['door-direction'];
$locking = $_POST['ArtVerriegelung'];
$lockwasher = $_POST['lockwasher'];
$lock = $_POST['lockType'];
$mainKey = $_POST['Haupt-Schlussel-Anlage'];
$centralLock = $_POST['ZentralschlossAnlage'];
$backside = $_POST['backSide'];
$colorKorpus = $_POST['colors-korpus'];
$colorDoor = $_POST['colors-door'];
$numeration = $_POST['numeration'];
$tob = $_POST['tob'];
$sheetKorpus = $_POST['sheet-korpus'];
$sheetDoor = $_POST['sheet-door'];
{
// *********************************************************************** CUSTOMER ************************************************************** \\
echo '<div id="output-customer" style=" background-color:red; width:auto; height:auto; padding-left: 10px; padding-top:10px; padding-bottom:10px; margin-bottom:10px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; ">
<div style="background-color:#E8E8E8 ; width:200px; height:auto; padding-left: 10px; border-width:thin; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; ">
<p style="font-size:20px; margin-left:1px; margin-top:0px; margin-bottom:0px; ">Customer:</p> </br>
<p style="font-size:20px; margin-left:1px; margin-top:0px; margin-bottom:0px; ">' . $kunde . ' </p>
<p style="font-size:20px; margin-left:1px; margin-top:0px; margin-bottom:1px; ">' . $adresse . ' </p>
</div>
<img src="../images/logo/ERKA-logo.svg" style="float:right; margin-top: -100px; margin-right:10px; "></img>
</div>';
// ******************************************************************** TYPE of CABINET ********************************************************* \\
if ($type == "Z1E_I30_100" && $abteilen == "1") {
echo '
<div style="font-size: 10px; margin-left: 15px; margin-right: 15px; padding-left: 3px; padding-right: 3px; border-width: 2px; border-style: solid; ">
' . $type. ',' . $I . ',' . $doorDirection . ',' . $abteilen . ',' . $breite . ',' . $tiefe . ',' . $hoehe . ',' . $door . ',' . $locking . ',' . $lockwasher . ',' . $lock . ',' . $mainKey . ',' . $centralLock . ',' . $sockel. ',' . $deckel . ' , ' . $colorKorpus . ' , ' . $colorDoor. ' , ' . $numeration. ' , ' . $tob. ', ' . $sheetKorpus. ', ' . $sheetDoor. '</div>
<div class="outputForm" style="width:560px; height:300px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">SCHRANKE TYPE: </br>
<p style="font-size: 13px; margin-left: 1px; ">Garderobe Z1E I30 geschweiste</p>
<p style="font-size: 13px; margin-left: 1px; ">Türen einschlagend</p>
<p style="font-size: 13px; margin-left: 1px; ">Inneneirichtung: ' . $I . '</p>
<p style="font-size: 13px; margin-left: 1px; ">ABTEILEN: ' . $abteilen . '</p>
<p style="font-size: 13px; margin-left: 1px; ">Breite: ' . $breite . '</p>
<p style="font-size: 13px; margin-left: 1px; ">Tiefe: ' . $tiefe . '</p>
<p style="font-size: 13px; margin-left: 1px; ">Hoehe: ' . $hoehe . '</p></div>
<div class="outputFormImage-type-1">
<img src="/images/cabinets-de/parts/outputForm/Z1E_I30/Z1E_I30_100_1.svg" >
</div>
</div>
'; }
else if ($type == "Z1E_I30_100" && $abteilen == "2") {
echo '
<div style="font-size: 10px; margin-left: 15px; margin-right: 15px; padding-left: 3px; padding-right: 3px; border-width: 2px; border-style: solid; ">
' . $type. ',' . $I . ',' . $doorDirection . ',' . $abteilen . ',' . $breite . ',' . $tiefe . ',' . $hoehe . ',' . $door . ',' . $locking . ',' . $lockwasher . ',' . $lock . ',' . $mainKey . ',' . $centralLock . ',' . $sockel. ',' . $deckel . ' , ' . $colorKorpus . ' , ' . $colorDoor. ' , ' . $numeration. ' , ' . $tob. ', ' . $sheetKorpus. ', ' . $sheetDoor. '</div>
<div class="outputForm" style="width:560px; height:300px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">SCHRANKE TYPE: </br>
<p style="font-size: 13px; margin-left: 1px; ">Garderobe Z1E I30 geschweiste</p>
<p style="font-size: 13px; margin-left: 1px; ">Türen einschlagend</p>
<p style="font-size: 13px; margin-left: 1px; ">Inneneirichtung: ' . $I . '</p>
<p style="font-size: 13px; margin-left: 1px; ">ABTEILEN: ' . $abteilen . '</p>
<p style="font-size: 13px; margin-left: 1px; ">Breite: ' . $breite . '</p>
<p style="font-size: 13px; margin-left: 1px; ">Tiefe: ' . $tiefe . '</p>
<p style="font-size: 13px; margin-left: 1px; ">Hoehe: ' . $hoehe . '</p>
</div>
<div class="outputFormImage-type-2" style="">
<img src="/images/cabinets-de/parts/outputForm/Z1E_I30/Z1E_I30_100_2.svg" >
</div>
</div>
'; }
//**************************************************************************************************************** \\
//*****************************************************SOCKEL conditions****************************************** \\
//**************************************************************************************************************** \\
//*****************************************************SOCKEL 1 partition **************************************** \\
if ($sockel == "STD" && $abteilen == "1") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; ">
<div class="outputFormText">SOCKEL: ' . $sockel . '</div>
<div class="outputFormImage">
<img src="/images/cabinets-de/parts/outputForm/sockel/100/SO-STD-100-1.svg" >
</div>
</div>
';
}
else if ($sockel == "GIRO" && $abteilen == "1") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">SOCKEL: ' . $sockel . '</div>
<div class="outputFormImage">
<img src="/images/cabinets-de/parts/outputForm/sockel/100/SO-GIRO-100-1.svg" >
</div>
</div>
';
}
//**************************************************************************************************************** \\
//*****************************************************DECKEL conditions****************************************** \\
//**************************************************************************************************************** \\
//*****************************************************DECKEL 1 partition **************************************** \\
if ($deckel == "STD" && $abteilen == "1") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; ">
<div class="outputFormText">DECKEL: ' . $deckel . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/deckel/deckel-STD-1.svg"></div>
</div>
';
}
else if ($deckel == "DEDL" && $abteilen == "1") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DECKEL: ' . $deckel . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/deckel/deckel-DEDL-1.svg" ></div>
</div>
';
}
//**************************************************************************************************************** \\
//*****************************************************DOOR conditions****************************************** \\
//**************************************************************************************************************** \\
if ($door == "T2") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"><img src="/images/cabinets-de/parts/outputForm/door/door-T2.svg" ></div>
</div>
';
}
else if ($door == "T3") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/door/door-T3.svg" ></div>
</div>
';
}
else if ($door == "T4") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"><img src="/images/cabinets-de/parts/outputForm/door/door-T4.svg" ></div>
</div>
';
}
else if ($door == "T5") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"><img src="/images/cabinets-de/parts/outputForm/door/door-T5.svg" ></div>
</div>
';
}
else if ($door == "T6") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"><img src="/images/cabinets-de/parts/outputForm/door/door-T6.png" ></div>
</div>
';
}
else if ($door == "T7") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"><img src="/images/cabinets-de/parts/outputForm/door/door-T7.svg" ></div>
</div>
';
}
else if ($door == "T8") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">DOOR: ' . $door . '</div>
<div class="outputFormImage"><img src="/images/cabinets-de/parts/outputForm/door/door-T8.svg" ></div>
</div>
';
}
//**************************************************************************************************************** \\
//*****************************************************SHELF conditions****************************************** \\
//**************************************************************************************************************** \\
if ($shelf == "F1") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">FACHEINLAGE: ' . $shelf . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/shelf/shelf-F1.svg" ></div>
</div>
';
}
else if ($shelf == "F1-KSTH") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">FACHEINLAGE: ' . $shelf . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/shelf/shelf-F1-KSTH.svg" ></div>
</div>
';
}
else if ($shelf == "F2") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">FACHEINLAGE: ' . $shelf . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/shelf/shelf-F2.svg" ></div>
</div>
';
}
else if ($shelf == "F2-KSTH") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">FACHEINLAGE: ' . $shelf . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/shelf/shelf-F2-KSTH.svg" ></div>
</div>
';
}
else if ($shelf == "F3") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">FACHEINLAGE: ' . $shelf . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/shelf/shelf-F3.svg" ></div>
</div>
';
}
else if ($shelf == "F3-KSTH") {
echo '
<div class="outputForm" style="width:260px; height:180px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">FACHEINLAGE: ' . $shelf . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/shelf/shelf-F3-KSTH.svg" ></div>
</div>
';
}
//**************************************************************************************************************** \\
//*****************************************************BACKSIDE conditions****************************************** \\
//**************************************************************************************************************** \\
if ($backside == "DL" && $abteilen == "1") {
echo '
<div class="outputForm" style="width:260px; height:200px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">RÜCKWAND: ' . $backside . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/backside/backSide-G_DL-1.svg" ></div>
</div>
';
}
else if ($backside == "DL" && $abteilen == "2") {
echo '
<div class="outputForm" style="width:260px; height:200px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">RÜCKWAND: ' . $backside . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/backside/backSide-G_DL-2.svg" ></div>
</div>
';
}
else if ($backside == "DL" && $abteilen == "3") {
echo '
<div class="outputForm" style="width:260px; height:200px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">RÜCKWAND: ' . $backside . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/backside/backSide-G_DL-3.svg" ></div>
</div>
';
}
else if ($backside == "DL" && $abteilen == "4") {
echo '
<div class="outputForm" style="width:260px; height:200px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">RÜCKWAND: ' . $backside . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/backside/backSide-G_DL-4.svg" ></div>
</div>
';
}
if ($backside == "LE" && $abteilen == "1") {
echo '
<div class="outputForm" style="width:260px; height:200px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">RÜCKWAND: ' . $backside . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/backside/backSide-G_LE-1.svg" ></div>
</div>
';
}
else if ($backside == "LE" && $abteilen == "2") {
echo '
<div class="outputForm" style="width:260px; height:200px; border-width: 1px; border-style: solid; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px;">
<div class="outputFormText">RÜCKWAND: ' . $backside . '</div>
<div class="outputFormImage"> <img src="/images/cabinets-de/parts/outputForm/backside/backSide-G_LE-2.svg" ></div>
</div>
';
}
}
?>
</div>
</body>
</html>
ale kam přesně mám zapasovat bloky pro mPDF mi uplně jasné není
děkuji
-
Hele nakonec jsme přešli z mpdf na phantomjs. Časem narazíš na spoustu věcí (float, pozicování, marginy), co mpdf zobrazí jinak/špatně.
Phantom funguje tak, že si na serveru webkitem vyrenderuje page (nepotřebuješ X), vyfotí ji a uloží do pdf/png. Máš u toho jistotu, že víš jak se to renderuje (jako chrome), takže se nemusí dělat mpdf-related hacky..
-
dival jsem se na ten PhantomJs a pustil si také toto video:
http://www.youtube.com/watch?v=omUoFGMxRPI
původně jsem myslel, že to bude tak jak píšeš "že si ofotí celou html page a exportne do pdf", ale to asi nebude uplně pravda
existuje tedy metoda, která by tu stránku skutečně vzala tak jak je a udělal PDF?
-
vyřešeno...nyní mPDF šlape jak má...celej problem byl v cestách k mpdf
namísto include('../mpdf.php'); jsem zapsal include('MPDF56/mpdf.php');
-
čau hoši...
nyní už se mi daří generovat PDFka, ale mám podivnej problém ohledně css floatingu viz následující link:
http://193.165.148.74/mpdf_floating.jpg (http://193.165.148.74/mpdf_floating.jpg)
nemáte někdo zkušenost s používáním mPDF a komplikovanějších css?
díky za každou radu