Politica de Cookie-uri

Generare versiune PDF pentru paginile unui website

By

Traian

Comments are Disabled

Blog IT, PHP

Pe langa butonul „Print” (Tipareste) se poate oferi optiunea de citire a paginii web in format PDF!

Pentru programatorul web in limbajul PHP, dezvoltarea acestei optiuni se poate realiza pe baza bibliotecii mpdf.

In plus este recomadabil ca versiunea PDF sa fie construita pe baza unui template html dedicat. Chiar daca mpdf poate procesa un fisier css specific prin care partile inutile din pagina originala sunt ascunse, exista situatii in care biblioteca nu construieste corect pagina atunci cand sunt utilizate functionalitati jQuery si directie CSS complexe

O alta recomandare: stringul html livrat clasei mpdf pentru generarea versiunii pdf va trebui livrat in felii de pana la 100000 caractere fiecare.

De asemenea, veti descperi ca generarea versiunii PDF este lenta si conuma resurse. Ne putem imagina un flux de lucru in care in admin, la editarea paginii se genereaza versiunea PDF pe baza template-ului de tiparire html dedicat. Fisierul PDF astfel generat va avea o denumire identificabila prin slug-ul paginii corespunzatoare si va fi salvat pe server.

In fron-end, la solicitarea versiunii PDF, se va cauta in locatia fisierelor pdf existenta fisierului pdf corespunzator paginii si incaz de reusita se la livra versiunea pdf.

In caz contrar se va genera live si se va livra in browser.

Ne putem imagina un flux de lucru in front-end imbunatatit: la incarcarea paginii, prin ajax se va consulta existenta fisierului PDF corespunzator paginii; daca nu se gaseste se genereaza, toate aceste opratiuni fiind realizate discret, prin Ajax.

La momentul eventualului apel al utilizatorului pentru versiunea PDF se va livra fisierul PDF corespunzator.

Iata mai jos exemplul oferit in manualul de utilizare mpdf. Pentru un exemplu real, utilizat pe site-ul amgauto.ro voi reveni cu detalii.

<?php
// require composer autoload
require __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();

$url = urldecode($_REQUEST['url']);

// To prevent anyone else using your script to create their PDF files
if (!preg_match('@^https?://www\.mydomain\.com/@', $url)) {
    die("Access denied");
}

// For $_POST i.e. forms with fields
if (count($_POST) > 0) {

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 );

    foreach($_POST as $name => $post) {
      $formvars = array($name => $post . " \n");
    }

    curl_setopt($ch, CURLOPT_POSTFIELDS, $formvars);
    $html = curl_exec($ch);
    curl_close($ch);

} elseif (ini_get('allow_url_fopen')) {
    $html = file_get_contents($url);

} else {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
    $html = curl_exec($ch);
    curl_close($ch);
}

$mpdf = new \Mpdf\Mpdf();

$mpdf->useSubstitutions = true; // optional - just as an example
$mpdf->SetHeader($url . "\n\n" . 'Page {PAGENO}');  // optional - just as an example
$mpdf->CSSselectMedia='mpdf'; // assuming you used this in the document header
$mpdf->setBasePath($url);
$mpdf->WriteHTML($html);

$mpdf->Output();

 

Comments are closed.