2012-11-06 3 views
2

Je veux créer un pdf basé sur une vue, généré par Codeigniter. Cependant, cette vue a beaucoup d'éléments stylisés, et des requêtes de média leur sont associées, de sorte que le pdf rendu ne correspond pas du tout, avec le document final désiré.Codeigniter - Snapshot de la vue - Générer un PDF

Quelle est la meilleure façon d'y parvenir? En ce moment j'utilise mPDF. Y at-il de toute façon pour prendre un instantané de la vue et ensuite générer un pdf avec elle, de sorte que les styles associés rendent correctement sur le document?

En ce moment, mon code ressemble à ceci

public function generatePDF() 
    { 
     $this->session_expire(); 
    $this->load->helper('url'); 
    $user_id=$this->session->userdata('user_id'); 
    $this->user_model=$this->db_interface->db_get_user($user_id); 
    // $this->load->helper('url'); 


     //echo('error aki <br />'); 
     $data['user'] = $this->user_model; 
     $data['objective'] = $this->db_interface->db_get_objectives($this->user_model->get_id()); 
     $data['list_work'] = $this->db_interface->db_get_list_work_experience($this->user_model->get_id()); 
     $data['list_education'] = $this->db_interface->db_get_list_education($this->user_model->get_id()); 
     $data['list_skills'] = $this->db_interface->db_get_skills($this->user_model->get_id()); 
     $data['list_personal'] = $this->db_interface->db_get_personal_skills($this->user_model->get_id()); 
     $data['list_links'] = $this->db_interface->get_user_links($this->user_model->get_id()); 


     $html = $this->load->view('display_user',$data,TRUE); 
     //$html = $this->load->view('display_user',$data,TRUE); 
     // $this->load->view('display_user', $html); 
     $this->mpdf->WriteHTML($html); 
     $this->mpdf->Output(); 

    } 

Merci à l'avance

+0

Que diriez-vous de cache la vue rendue dans un fichier, puis lisez le contenu du fichier? – manix

+0

une idée sur la façon dont je peux accomplir cela? –

+0

Bien sûr, regardez la documentation [caching] (http://codeigniter.com/user_guide/general/caching.html). Cette méthode générera un fichier dans le dossier 'application/cache' – manix

Répondre

3

Réponse courte: en quelque sorte.

Réponse longue: vous avez 2 options. Vous pouvez a) prendre une capture d'écran (voir Website screenshots using PHP); ou b) vous pouvez créer une feuille de style personnalisée pour l'impression.

Ce dernier sera probablement beaucoup plus facile à faire. Il y a des limites à ce que la bibliothèque que vous utilisez peut faire dans la mesure où CSS est concerné, afin de lire jusqu'à: http://www.mpdf1.com/mpdf/enhancements

meilleur pari est probablement créer des feuilles de style distinctes pour l'écran et l'impression:

<link rel="stylesheet" href="screen.css" type="text/css" media="screen"> 

pour la visualisation, et

<link rel="stylesheet" href="print.css" type="text/css" media="print"> 

pour l'impression.

Style print.css pour afficher bon. Il est hautement improbable que vous soyez capable d'imiter exactement l'écran, mais il devrait être assez facile de présenter l'information dont vous avez besoin pour imprimer de façon cohérente.

+0

J'ai fait des progrès avec le html2canvas, mais il manque encore quelques éléments sur la conversion. Que diriez-vous de le convertir en PostScript en premier? Est-ce réalisable? Cela a-t-il même un sens? Je considère d'autres alternatives comme Latex. –

+0

Convertir quoi en post-scriptum? Si vous avez une capture d'écran avec des éléments manquants, la conversion en PS ne les fera pas apparaître. Latex est une autre boule de vers: http://stackoverflow.com/q/8577244/183254 mais je suppose que cela pourrait fonctionner. On dirait une tonne de travail ... Peut-être que ça vaut la peine d'essayer de pirater html2canvas pour que ces derniers éléments fonctionnent. – stormdrain

+0

Je parlais de la conversion du HTML en PS. Je ne sais pas si c'est possible. De toute façon, tu m'as donné la meilleure réponse possible, donc je pense. Je vous remercie! –