Impression php/pdf

Mammouth du PHP | 687 Messages

08 nov. 2012, 13:41

Bonjour,
j'essaie d'imprimer depuis mon site une page qui se transforme en pdf via ce code:
<?php
//---------------------------------------------------------------------------------------
  include_once("../fonctions.php");
  
  // Fonction qui permet d'afficher le theme du site
  $aff_theme = rech_enreg_theme();
  $dir_image = "../images";
  
  $aff_langue_site = rech_enreg_langue_site();
  include_once("../langues/$aff_langue_site[langue]");
?>  
  <link rel="stylesheet" href="../templates/<?php echo $aff_theme[theme]; ?>/style.css" />
  <br />
<?php
//----------------------------------------------------------------------------------------
  echo "<br /><br /><br /><br /><br /><br /><br /><br />";
  echo "<div align=\"right\"><a href=\"javascript:window.print()\"><img src=\"".$dir_image."/icone_imp.png\" alt=\"Imprimer\" title=\"Imprimer\" />
  </a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  </div>";
//---------------------recuperation des id par la methode GET-----------------------------
   	$id = $_GET['id']; 
//----------------------------------------------------------------------------------------
  if (isset($_GET[id_rubrique])) {
  	$id_rubrique = $_GET['id_rubrique'];
  }
//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------
  //fonction permettant l'affichage de l'article en detaille
  $affiche = rech_enreg_picture($id);

  //affiche largeur des photos en presentation
  $aff_largeur_photo_presentation = rech_enreg_largeur_presentation();

  //affiche largeur des photos en rubrique
  $aff_largeur_photo_rubrique = rech_enreg_largeur_rubrique();

  //affiche les autres photos si l'option est activee
  $option_autre_photo = get_variable('autre_photo');

//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------
if ($affiche['publier'] == NULL && !$_SESSION['administrateur'] && !$_SESSION['groupe']) {

	echo "<fieldset class=\"fieldset\"><legend class=\"legend\">Cette page n'existe pas !</legend>
		<div class=\"titre_page\">
		<p>D&eacute;sol&eacute;, mais cette page n'existe pas !</p>
		</div>
		</fieldset>";
}
//----------------------------------------------------------------------------------------
else {

  $titre = stripSlashes($affiche['titre']);
  $rubrique = stripSlashes($affiche['rubrique']);
//----------------------------------------------------------------------------------------

//------------------ position photo article sur la page de présentation ------------------
    if ($affiche[position_photo] == "gauche") {
	$position = "style=\"float:left; margin-right:20px;\"";
    }
    else {
	$position = "style=\"float:right; margin-left:20px; \"";
    }
//----------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------  
    $an = @date(Y);
//----------------------------------------------------------------------------------------

//---------------------- si il y a une photo alors afficher la photo ---------------------
if ($affiche['photo']) {
	$affiche_photo = "<img src=\"../".$affiche['photo']."\" border=\"0\" width=\"".$aff_largeur_photo_presentation['largeur_photo_presentation']."px\" alt=\"\" ".$position." />";
}
//-------------------------------------------------------------------------------------------
  	$zone_texte =	"".stripSlashes($affiche['texte'])."<br />";
//-------------------------------------------------------------------------------------------

//-------------------------------------------------------------------------------------------	
 	$zone_texte_op = "<table  border=\"0\" width=\"100%\" cellspacing=\"1\" cellpadding=\"1\">";
//-------------------------------------------------------------------------------------------

//----------------------------------------- OPTIONS -----------------------------------------
//---------------------------- option vitrine presentation ----------------------------------
if (file_exists("../lib/afficher_articles/afficher_option_vitrine.php")) { 
	include_once("../lib/afficher_articles/afficher_option_vitrine.php");	 
}
//-------------------------------------------------------------------------------------------

//------------------------------------- option immobilier -----------------------------------
if (file_exists("../lib/afficher_articles/afficher_option_immobilier.php")) { 
	include_once("../lib/afficher_articles/afficher_option_immobilier.php");
}
//-------------------------------------------------------------------------------------------

//------------------------------------- option reservation ----------------------------------
if (file_exists("../lib/afficher_articles/afficher_option_reservation.php")) { 
	include_once("../lib/afficher_articles/afficher_option_reservation.php");
}
//-------------------------------------------------------------------------------------------

//----------------------------------------- OPTIONS -----------------------------------------
	   $zone_texte_op .= "</table>";
//------------------------------------ ZONE AUTRE PHOTO -------------------------------------
	   $zone_autre_photo .= "<br /><br />";
	   $zone_autre_photo .= "<table align=\"center\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\" width=\"100%\">";
	   //affiche N articles par colonne sur la page
	   $nbr_article_colonne = rech_enreg_limite();

	   //connexion et requete dans la table autres_photos pour affichage des photos supplementaires
	   $conn = db_connect();
   	   $sql_autre_photo = "select * from ".AUTRES_PHOTOS." where id_article = '$affiche[id]' order by ordre"; 
   	   $resultat_autre_photo = mysql_query($sql_autre_photo, $conn);
       	   $nbr_element = mysql_num_rows($resultat_autre_photo); 

   	if ($nbr_element >= 1) {
       		$zone_autre_photo .= "<tr><td colspan=\"6\"><img src=\"".$dir_image."/afficher_art.gif\" alt=\"\" />&nbsp;&nbsp;<b>".AUTRES_VUES."</b></td></tr>";
        }
        else {
                $zone_autre_photo .= "<tr><td colspan=\"6\">&nbsp;</td>";
        }

   	//initialisation du compteur
	 $compteur = 0;  
	//affichage des photos dans un tableau
	 while ($sql_autre_photo = mysql_fetch_array($resultat_autre_photo)) 
	{
		if ($compteur == 0) {
			$zone_autre_photo .= "<tr>";
		}
	     
	       	elseif ($compteur % $nbr_article_colonne[nbr_article_colonne] == 0) {
		      	$zone_autre_photo .= "</tr><tr>";
		}

		$zone_autre_photo .= "<th><img src=\"../".$sql_autre_photo[autre_photo]."\" border=\"0\" width=\"".$aff_largeur_photo_rubrique[largeur_photo_rubrique]."px\" alt=\"\" /></th>";

	  $compteur = $compteur + 1;
        }
		$zone_autre_photo .= "</tr></table>";

//------------------------------------ ZONE AUTRE PHOTO -------------------------------------

//------------------------------------- ZONE D'AFFICHAGE ------------------------------------
	echo "<div id='container' style=\"width:100%; margin-left:-350px;\">";
  	echo "<div id='contenu'>";
 	echo "<fieldset class=\"fieldset\"><legend class=\"legend\">".get_nom_rubrique($affiche[id_rubrique])." / ".$titre."</legend>";
	echo "<div class=\"titre_page\">";
 	echo "<div class=\"affichage_article_page\">";
 	echo "<div class=\"presentation_article\">";
 	echo "".$affiche_photo.$zone_texte."";
 	echo "".$zone_texte_op."";
 	echo "".$zone_autre_photo."";
	echo "</div>";
	echo "</div>";
	echo "</div>";
	echo "</fieldset>";
	echo "</div>";
  	echo "</div>";	
//------------------------------------- ZONE D'AFFICHAGE ------------------------------------
}
?>
Mais en vain, enfin pas totalement...
En fait le document se créé correctement mais à l'impression le document n'est pas entier... il n'imprime qu'une page au lieu d'imprimer toutes les pages...
Savez-vous d'où cela peut venir?

Je lance le script grace à cette commande :
<a href="#" onclick="window.open('lib/imp_article.php?id=<?php echo $affiche[id]; ?>&id_rubrique=<?php echo $id_rubrique; ?>', '_blank', 'toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=1024, height=764, left=0, top=0');return(false)">&nbsp;&nbsp;<img src="images/icone_imp.png" /></a>
Merci par avance.

Eléphant du PHP | 229 Messages

08 nov. 2012, 13:55

Bonjour,
Je ne sais pas...
Ton imprimante détecte une ou plusieurs pages ?

Mammouth du PHP | 687 Messages

08 nov. 2012, 14:06

merci pour ta réponse rapide...
Elle ne détecte qu'une page mais il y en a au moins 2 car les informations sont tronquées...

Eléphant du PHP | 229 Messages

08 nov. 2012, 14:10

Dasn le navigateur tu peux ouvrir le doc en pdf pour tester ?

Mammouth du PHP | 687 Messages

08 nov. 2012, 14:15

oui oui on voit la page entière mais quand je veux imprimer c'est trnqué...
si tu veux voir ce que ça fait : http://ruffin-tillemont.com/lib/imp_art ... ique=71607

merci beaucoup.

Eléphant du PHP | 229 Messages

08 nov. 2012, 14:18

C'est en html par contre et l'imprimante detecte 2 pages.

Mammouth du PHP | 687 Messages

08 nov. 2012, 14:20

oui et après tu cliques sur l'imprimante en haut à droite de la page

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 nov. 2012, 14:31

Euh... ton site ouvre une page php dans une popup et propose juste d'imprimer la page html générée via le navigateur avec un window.print(). Il n'y a absolument aucun rapport avec pdf dans tout ça...

Le résultat de l'impression dépendra donc du navigateur utilisé. Qu'est ce que tu utilises comme navigateur ? (A priori pas de soucis avec chrome, il me propose bien d'imprimer deux pages)

A noter que lorsque tu imprimes du html, tu peux également définir une feuille de style dédiée à l'impression (media="print" dans l'appel au css dédié à l'impression) pour masquer les éléments que tu ne veux pas faire apparaitre sur le papier ou changer les marges, etc.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

08 nov. 2012, 14:36

Merci pour ton explication! ;-)
j'utilise firefox...

Donc pour toi la solution serait de faire appel au css...? en utilisant cette méthode par exemple : http://www.alsacreations.com/tuto/lire/ ... ssion.html

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 nov. 2012, 14:42

Ah ben oui tiens, c'est plus qu'étrange ça... même sous IE ça fonctionne bien et il détecte 2 pages, par contre sous FF, pas moyen de lui faire sortir plus d'une page, même en jouant sur le zoom...

Du coup je ne sais pas si le css changera grand chose (mais le principe reste sympa de dissocier la mise en page à l'écran de celle sur papier).. par contre je constate que ta page ne contient pas les balises <html>, <head> (avec l'appel du css) ou <body>. Commence déjà par les ajouter, peut être que c'est juste cela qui manque à FF pour imprimer correctement ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

08 nov. 2012, 14:50

Trop bizarre!
Le head et autres sont contenu dans include_once("../fonctions.php");

j'y comprends rien la lol

Mammouth du PHP | 687 Messages

08 nov. 2012, 14:52

et il n'y a pas un moyen tout simple pour imprimer ces infos en pdf rapidement depuis la page d'affichage en php...? avec une autre méthode (pour débutant comme moi)

Merci beaucoup