2012-01-08 52 views
12

Estoy usando flotadores para colocar 2 divs uno al lado del otro.Trabajando con flotadores css en html2pdf

<a href="printbox.php">print</a> 
<?php ob_start(); ?> 
<style> 
    #sidedish{ 
     float: left; 

     border: 1px solid black; 
     width: 100px; 
     height: 100px; 
    } 
    #maindish{ 
     float: right; 
     width: 200px; 
     border: 1px solid black; 
     height: 100px; 
     text-align: center; 
    } 

    #container{ 
     width: 304px; 
     height: 100px; 
     border: 1px solid black; 
    } 
</style> 

<div id="container"> 
<div id="sidedish"></div> 
<div id="maindish"><div id="box">name</div></div> 
</div> 
<?php $_SESSION['boxes'] = ob_get_contents(); ?> 

Esto es lo que Printbox hacer, sólo hace que los datos almacenados en un pdf, pero de alguna manera los flotadores que se establecieron se perdieron en el proceso.

<?php require_once('html2pdf/html2pdf.class.php'); ?> 
<?php 
$html2pdf = new HTML2PDF('P', 'A4', 'en', true, 'UTF-8', array(0, 0, 0, 0)); 
$html2pdf->writeHTML($_SESSION['boxes']); 

$html2pdf->Output('random.pdf'); 
?> 

Funciona bien en html:

enter image description here

pero cuando hago clic en la impresión se convierte en esto:

enter image description here

Cualquier idea de lo que es el problema?

+1

No encontraste tu problema mencionado. vea http://jsfiddle.net/DYGvR/show/, pruebe en cromo, haga clic en el botón derecho del mouse, imprima la página. – Giberno

+0

¿Estás usando el navegador para imprimir? ¿Qué hace printbox.php? Supongo que está haciendo clic en el enlace de impresión y printbox.php de alguna manera establece un ancho en el documento. – zethus

+0

por favor vea mi actualización –

Respuesta

23

Hablando de experiencias personales, diría que el diseño de la salida de HTML2PDF es, en el mejor de los casos, la ciencia de la magia negra esotérica. Las principales razones para esto son:

  • La clase sólo es compatible con un (relativamente pequeño) subconjunto de estilos CSS & selectores compatibilidad
  • CSS es indocumentado
  • PDF es imposible depurar en relación con la entrada HTML

Para ser justos, este no es solo el problema para HTML2PDF sino also for the TCPDF that HTML2PDF uses.

Se podría ser posible que HTML2PDF, siendo sólo una casi-cero-configuración, rápida & interfaz alternativa fácil para el TCPDF, corta más apoyo CSS fuera - pero estoy seguro de que incluso TCPDF no apoyarían float correctamente.

La mejor solución que se puede utilizar es la de enviar su divs flotantes de los años noventa:

<table> 
    <tr> 
     <td><div class="float"> ... </div></td> 
     <td><div class="float"> ... </div></td> 
    </tr> 
</table> 

También puede ocultar esta vergüenza del HTML pública:

<?php 
    $isPdf = (/* condition that tells us we're outputting PDF */) ? true : false; 
    if ($isPdf) { 
     echo "<table><tr><td>"; 
    } 
?> 
<div class="float"> ... </div> 
<?php 
    if ($isPdf) { 
     echo "</td><td>"; 
    } 
?> 
<div class="float"> ... </div> 
<?php 
    if ($isPdf) { 
     echo "</td></tr></table>"; 
    } 
?> 
+1

Esto fue de gran ayuda para mí después de que me estaba arrancando el pelo tratando de descubrir las soluciones de css. De regreso a las mesas !! Además, fyi, creé una copia diferente de la página en cuestión por completo, y si era para PDF, directamente allí. Si no fue así, dirígete al no-mesa. – Cyprus106

+2

Tuve el mismo problema. Mi solución fue utilizar posicionamiento absoluto en lugar de flotadores, lo que funcionó bien, pero es necesario establecer las dimensiones del contenedor. – TheFrozenOne

+0

En realidad, HTML2PDF admite mucho más CSS que TCPDF, incluidos el posicionamiento absoluto, los márgenes y los rellenos. Vale la pena mencionar. –

6

se puede ver la documentación rápida en línea en francés aquí: http://demo.html2pdf.fr/examples/pdf/about.pdf

('Les fléat ne sont gérés que pour la balise IMG')

= Los flotantes solo se manejan para las marcas de img por clase.

Las propiedades de css manipuladas también se enumeran en el documento.