8721 sujets

Développement web côté serveur, CMS

Bonjour,
ne voyant pas de réponse sur un autre poste, je me dis qu'il n'y a pas grand monde sur html2pdf.

Donc je me suis mis à fpdf, je galère trop je dois intégrer des requête sql dans des boucles enfin je ne m'en sort pas
j'aimerais faire ceci mais en fpdf !
<?php
require_once('connexion/config.php');
ob_clean();?>
<style type=\"text/css\">
	#capecom{position: absolute; margin: 18px 10px 0 100px;}
	#chu{position: absolute; margin:0;}
	h1{text-align: center; margin:0; padding: 0; font-family: Helvetica; font-size: 20px; color:#044CA1;}
	#v1000{border: 1px solid #000; padding:10px; width:595px; margin-right: 10px; padding-left: 30px;}
	p{padding:0; margin:0;line-height: 18px;}
	.libele {color: #092B35;}
	#v1000img{float:left ;margin-top: 2px;}
	#v1000_2{margin: 0 0 0 30px; padding:0;}
	h2{font-size: 18px; color: #0F4A57;}
	#lecteur{float: left; margin-right: 20px;}
	#v100{float: left; margin-left: 20px; padding:0;}
	#list{vertical-align: right; height: 52px;margin: 0 0 5px 30px; display: inline-block;}
	strong{color: red;}
	span {color:#044CA1;}
	
	
</style>
<nobreak style="100%" backtop="10px" backbottom="10px" backleft="0px" backright="0">
	<div id="header">
		<img id="capecom" src="images/logo.png"/>
		<img id="chu" src="images/logochu.jpg"/>
	</div>
	<h1>Fiche V1000</h1>
	<div id="v1000">
		<img id="v1000img" src="images/v1000.png"/>
		<div id="v1000_2">
			<?php
			$sql = "SELECT Name FROM hardware_controllers WHERE IDHardwareController = ".$_GET['v1000']."";
			$res = $cnx->query($sql);
			while ($row = $res->fetch(PDO::FETCH_ASSOC))
			{
				?><p class="libele">Nom : <?php echo $row['Name'];?></p><?php
			}
			
			$sql1 = "SELECT IPAddress FROM hardware_hid_vertx_controllers LEFT OUTER JOIN hardware_controllers ON hardware_controllers.IDHardwareController = hardware_hid_vertx_controllers.IDController WHERE IDHardwareController = ".$_GET['v1000']."";
			$res1 = $cnx->query($sql1);
			while ($row1 = $res1->fetch(PDO::FETCH_ASSOC))
			{
				?><p class="libele">Adresse IP : <?php echo $row1['IPAddress'];?></p><?php
			}
			$sql2 = "SELECT MACAddress FROM hardware_hid_vertx_controllers LEFT OUTER JOIN hardware_controllers ON hardware_controllers.IDHardwareController = hardware_hid_vertx_controllers.IDController WHERE IDHardwareController = ".$_GET['v1000']."";
			$res2 = $cnx->query($sql2);
			while ($row2 = $res2->fetch(PDO::FETCH_ASSOC))
			{
				?><p class="libele">Adresse MAC : <?php echo $row2['MACAddress'];?></p><?php
			}?>
		</div>	
	</div>
	<h2>Liste v100</h2>
	<?php
	$i = 0;
	$sql3 = "SELECT IDInterfaceBoard, InternalID, SerialNumber 
				FROM `hardware_hid_vertx_interfaceboards` 
				LEFT OUTER JOIN `hardware_controllers` 
				ON `hardware_controllers`.`IDHardwareController`=`hardware_hid_vertx_interfaceboards`.`IDController` 
				WHERE `hardware_controllers`.`IDHardwareController`= ".$_GET['v1000']."";
	$res3 = $cnx->query($sql3);
	while($row3 = $res3->fetch(PDO::FETCH_ASSOC))
	{?>
		<div id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p class="libele"><?php echo $row3['SerialNumber'];?> index-> <strong><?php echo $row3['InternalID']; ?></strong></p>
			<?php
			$sql4 = "SELECT Name FROM `hardware_credentialreader` INNER JOIN `hardware_hid_vertx_reader` ON `hardware_hid_vertx_reader`.`IDReader`=`hardware_credentialreader`.`IDHardwareCredentialReader` INNER JOIN `hardware_hid_vertx_interfaceboards` ON `hardware_hid_vertx_interfaceboards`.`IDInterfaceBoard`=`hardware_hid_vertx_reader`.`IDInterfaceBoard` WHERE `hardware_hid_vertx_interfaceboards`.`IDInterfaceBoard`=".$row3['IDInterfaceBoard']."";
			$res4 = $cnx->query($sql4);
			while($row4 = $res4->fetch(PDO::FETCH_ASSOC))
			{?>
				<p class="libele">Lecteur:<span><?php echo $row4['Name']; ?></span></p><?php
			}?>
		</div><br>
	<?php }?>
</nobreak><?php
$content=ob_get_clean();
require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php');
try{
	$pdf=new HTML2PDF('P', 'A4', 'fr');
	$pdf->pdf->SetDisplayMode('fullpage');
	$pdf->WriteHTML($content);
	$pdf->Output('v1000.pdf');
}catch(HTML2PDF_exception $e){
	die($e);
}?>

Quelqu'un à déjà fait des pdf de ce type?????????
ce code fonctionne mais avec html2pdf en local mais pas en distant
Bonsoir,
Comme dans ton précédent sujet, je vois mal comment on pourrait t'aider. Il faut que tu isole un peu plus ton problème.

Tu as des messages d'erreur ? C'est un problème de requête ? Ton code html généré est-il bon ? ...
Oui j'ai un message d'erreur uniquement sur le serveur, du genre
Fichier : /var/www/gestion_vertx/html2pdf/_class/parsingHtml.class.php
Ligne : 117

Code HTML non valide, une balise est fermée en trop : <td>

HTML : ...ienne Concierg transpond.<br/></td> </tr> <tr...

mais le problème c'est que mon code est bon, mais j'ai peut être une piste sur la version php du serveur, ce code fonctionne parfaitement en local sous wampp serveur avec la dernière version de php.
Je vois avec l'admin du serveur pour mettre à jour et je verrais bien !!!! sinon je vois pas.
ps: j'ai fais mon code avec des div et sous forme de tableau et toujours la même erreur
Tu es certain que ton html est bon? Permet moi d'en douter un peu, c'est quand même parlant:

Code HTML non valide, une balise est fermée en trop : <td>


Peux tu vérifier cela?
Après, il faut toujours être d'équerre entre ton environnement de dév et la prod, ça évite des surprises.
Et bien voila le message d'erreur est quand même clair !

As tu validé ton code html avec le validateur du w3c ?
D’où sort le code html du tableau ?
Justement je sais que le message d'erreur est clair, j'ai regardé réécrit mon code, j'ai demandé à un autre dev qui ne connaît pas html2pdf mais je lui ai demandé de regarder au niveau du code de la page et il n'y a pas de balise en trop ou en moins, le truc c'est que j'utilise une boucle qui doit m'afficher un résultat, si j'ai + de 9 ligne, j'ai l'erreur, et si j'ai moins, le code fonctionne.
Donc pour moi mes 9 lignes tiennes sur une page A4, et lorsque j'ai plus, html2pdf ne fait pas le saut de page, et on est d'accord pour dire qu'un div ne peut pas être coupé en deux <div> sur la première page et </div> sur la deuxième page. donc je pense que le saut de page doit se faire en plein milieu de ma boucle.
Mais ce qui est hallucinant, c'est que ça fonctionne très très bien en local!!!!
Modifié par cid5420 (03 Feb 2014 - 21:49)
j'ai fais un echo de $content,
je vous met le code source de la page :
<style type=\"text/css\">
	#capecom{position: absolute; margin: 18px 10px 0 100px;}
	#chu{position: absolute; margin:0;}
	h1{text-align: center; margin:0; padding: 0; font-family: Helvetica; font-size: 20px; color:#044CA1;}
	#v1000{border: 1px solid #000; padding:10px; width:595px; margin-right: 10px; padding-left: 30px;}
	p{padding:0; margin:0;line-height: 18px;}
	.libele {color: #092B35;}
	#v1000img{float:left ;margin-top: 2px;}
	#v1000_2{margin: 0 0 0 30px; padding:0;}
	h2{font-size: 18px; color: #0F4A57;}
	#lecteur{float: left; margin-right: 20px;}
	#v100{float: left; margin-left: 20px; padding:0;}
	#list{vertical-align: right; height: 52px;margin: 0 0 5px 30px; display: inline-block;}
	strong{color: red;}
	span {color:#044CA1;}
	
	
</style>
<page style="100%" backtop="10px" backbottom="10px" backleft="0px" backright="0">
	<div id="header">
		<img id="capecom" src="images/logo.png"/>
		<img id="chu" src="images/logochu.jpg"/>
	</div>
	<h1>Fiche V1000</h1>
	<div id="v1000">
		<img id="v1000img" src="images/v1000.png"/>
		<div id="v1000_2">
			<p class="libele">Nom : Brabois-HE-Local SG18 1.4</p><p class="libele">Adresse IP : 192.168.136.68</p><p class="libele">Adresse MAC : 00:06:8E:01:F8:3E</p>		</div>	
	</div>
	<h2>Liste v100</h2>
			<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-01-01 index-> <strong>0</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.01.1 HE STERILE</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.01.02 HE St</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-01-02 index-> <strong>1</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.01.3 HE St</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.01.4 HE Acc</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-02-02 index-> <strong>3</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.02.3 Entr</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.02.4 Entr</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-03-01 index-> <strong>4</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.03.1 HE Entr</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.03.2 HE Sortie Parking silo</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-03-02 index-> <strong>5</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.03.3 HE Parking J 1 sortie</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.03.4 HE Parking J 1 entre</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-04-01 index-> <strong>6</strong></p>
							<p style="display:block" class="libele">Lecteur:<span> B-01.04.1 HE Local SG18</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.04.2 HE Quai pharmacie</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-04-02 index-> <strong>7</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.04.3 HE Sterile sale cot</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-05-01 index-> <strong>8</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.05.1 HE Sterile sale cot</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.05.2 HE Quai Cuisine exterieur</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01.05.2 index-> <strong>9</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.05.3 HE Quai Cuisine interieur</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.05.4 HE Quai Depot relais</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-01-06-01 index-> <strong>10</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-01.06.1 HE Entrees archives</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-01.06.2 HE Porte auto bloc</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-06-01 index-> <strong>11</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.06.1 Porte escalier SS HE</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.06.2 Porte Ascenceur SS HE</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-06-02 index-> <strong>12</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.06.3 porte auto SS HE</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-01-01 index-> <strong>16</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.01.1 UTCT 1er 1.04 cryo</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.01.2 UTCT porte palier RDC</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-01-02 index-> <strong>17</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.01.3 UTCT porte palier 1er etage</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.01.4 UTCT porte palier 2eme etage</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-02-01 index-> <strong>18</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.02.1 UTCT 2eme 2.16 stockage</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.02.2 UTCT 2eme 2.18 SAS perso</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-02-02 index-> <strong>19</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.02.3 UTCT 2eme 2.22 reception</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.02.4 UTCT 2eme 2.23 cryo</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-03-01 index-> <strong>20</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.03.1 UTCT 1er 1.09 congel</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.03.2 UTCT Local dechets parking</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-03-02 index-> <strong>21</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.03.3 EFS parking acces batiment</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.03.4 UTCT Porte Parking</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-04-01 index-> <strong>22</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.04.1 Ancienne Conciergerie gauche</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.04.2 Ancienne Concierg transpond.</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-04-02 index-> <strong>23</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.04.3 Ancienne Conciergerie Droite</span></p>		</div>		<div style="display:block" id="list">
			<img id="lecteur" src="images/lecteur.jpg"/>
			
			<p style="display:block" class="libele">B-04-05-01 index-> <strong>24</strong></p>
							<p style="display:block" class="libele">Lecteur:<span>B-04.05.1</span></p>				<p style="display:block" class="libele">Lecteur:<span>B-04.05.2</span></p>		</div></page>


Je sais pas si c'est lisible !!!
j'ai testé mon code sur le serveur en faisant echo $content, et je n'ai aucune erreur!!!
C'est vraiment lié a html2pdf
Il se peut en effet que html2pdf rajoute un tableau. Et c'est celui-ci qui doit poser des problèmes de html à la class de parasage.
cid5420 a écrit :
Donc pour moi mes 9 lignes tiennes sur une page A4, et lorsque j'ai plus, html2pdf ne fait pas le saut de page, et on est d'accord pour dire qu'un div ne peut pas être coupé en deux &lt;div&gt; sur la première page et &lt;/div&gt; sur la deuxième page. donc je pense que le saut de page doit se faire en plein milieu de ma boucle.
Mais ce qui est hallucinant, c'est que ça fonctionne très très bien en local!!!!

Pourquoi tu n'utilise la balise <nobreak> pour forcer ta div à rester sur la même page.
Pour ton problème entre le local et le serveur, peut être un problème de font ?
J'ai déjà essayé nobreak mais ça ne fonctionne pas, j'ai essayé avec un compteur mais ça ne fonctionne pas.
du genre
$i=0;
while()
{
//ma requête
$i=i++;
}
if($i>9)
{
<page></page>
}

je sais pas si ce que j'ai fais est correct mais j'ai testé en remplaçant le page par un echo 'test', et lorsque j'ai un résultat supérieur a 9, j'ai mon message test et si il est inférieur je ne l'ai pas !
cid5420 a écrit :
J'ai déjà essayé nobreak mais ça ne fonctionne pas
Il faut pas le mettre comme sur ton premier message. Mets le dans ta boucle au niveau de ta div de l'item de ta liste.
oui je l'ai mis dans ma div de ma boucle mais rien y fait j'ai toujours l'erreur !!!

Dans le premier post, j'ai posé le code en ayant modifié plusieurs foi celui-ci pour que ça fonctionne!

le nobreak je l'avais trouvé sur le wiki de html2pdf mais ça n'a pas fonctionné chez moi