plantillas - TCPDF no representa todas las propiedades de CSS
tcpdf writehtml parameters (10)
Desde la versión 5.7 TCPDF incluye soporte para bordes CSS. Los márgenes, el relleno y el flotador aún no son compatibles. Visite el sitio web de TCPDF en http://www.tcpdf.org y consulte el foro oficial para obtener más información.
Intento hacer un PDF escribiendo CSS y HTML pero mi CSS no aparece en mi PDF. Lo único que se considera es el tamaño de fuente y el color de fuente.
Te doy el código (lo siento, es un poco largo ...)
$config = sfTCPDFPluginConfigHandler::loadConfig(''my_config'');
$doc_title = "Fiche Logement";
$html = <<<EOF
<style>
.informations {
padding: 10px;
margin: 10px;
border: 1px dotted black;}
.informations table {
margin-top: 10px;}
#modif {
margin: 20px;
text-align: left;
float: right;}
#modif th {
padding-left: 10px;}
#modif td {
padding-left: 10px;}
#adresse {
width: 307px;
float: left;}
#reservataire {
width: 307px;
float: right;}
#intergen {
width: 307px;
float: right;}
#infos {
width: 290px;
float: left;}
#handicap {
padding-bottom: 12px;
width: 324px;
float: right;}
#charges {
margin-bottom: 20px;
width: 307px;
float: left;}
#loyer {
width: 307px;
float: right;}
#commentaires {
clear: both;}
h2 {
font-variant: small-caps;
text-align: center;
font-size: 19px;
font-weight: bold;
padding: 0px 0px 2px 5px;
margin: 15px 0px 20px 0px;
color: #000000;
border-top: 1px dotted black;
border-bottom: 1px dotted black;}
h3 {
width: 250px;
font-variant: small-caps;
font-size: 15px;
font-weight: bold;
padding: 0px 0px 0px 5px;
margin: 0px;
color: #225D6D;
border-top: 1px dotted black;
border-bottom: 1px dotted black;}
</style>
<div id=''intergen'' class=''informations''>
<h3>Intergénérationnel</h3>
<table>
<tr>
<th>Intergénérationnel :</th> <td><?php echo /$logement->getIntergen() ?></td>
</tr>
</table>
</div>
<div id=''infos'' class=''informations''>
<h3>Informations logement</h3>
<table>
<tr>
<th>Bâtiment :</th> <td><?php echo /$logement->Parclogement->getBatiment() ?></td>
</tr>
<tr>
<th>Taille :</th> <td><?php echo /$logement->getTaille() ?></td>
</tr>
<tr>
<th>Type :</th> <td><?php echo /$logement->getTypelog() ?></td>
</tr>
<tr>
<th>Surface habitable :</th> <td><?php if(/$logement->getSurfacehab() == 0){ echo ''Non Spécifié'';} else {echo /$logement->getSurfacehab(). " m²";} ?></td>
</tr>
<tr>
<th>Chauffage :</th> <td><?php echo /$logement->getChauffage() ?></td>
</tr>
<tr>
<th>Ascenseur :</th> <td><?php echo /$logement->getAscenseur() ?></td>
</tr>
</table>
</div>
<div id=''handicap'' class=''informations''>
<h3>Infrastructures handicapés</h3>
<table>
<tr>
<th>Immeuble accessible :</th> <td><?php echo /$logement->getAccessibl() ?></td>
</tr>
<tr>
<th>Ascenceur accessible :</th> <td><?php echo /$logement->getAscenseuracc() ?></td>
</tr>
<tr>
<th>Logement adaptable :</th> <td><?php echo /$logement->getAdaptable() ?></td>
</tr>
<tr>
<th>Logement adapté :</th> <td><?php echo /$logement->getAdapte() ?></td>
</tr>
</table>
</div>
EOF;
//create new PDF document (document units are set by default to millimeters)
$pdf = new sfTCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor(PDF_AUTHOR);
$pdf->SetTitle($doc_title);
//set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '''', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '''', PDF_FONT_SIZE_DATA));
//set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// Fixe la taille de la page
$pdf->SetDisplayMode(90);
//initialize document
$pdf->SetFont(''helvetica'', '''', 10);
$pdf->AddPage();
// output some HTML code
$pdf->writeHTML($html , true, false, true, false, '''');
//reset pointer to the last page
$pdf->lastPage();
// Close and output PDF document
$pdf->Output(''fichelogement.pdf'', ''I'');
// Stop symfony process
throw new sfStopException();
En el momento en que escribo esto, TCPDF solo admite relleno para tablas.
En primer lugar, debe tener en cuenta que PDF y HTML y diferentes formatos que apenas tienen nada en común. Si TCPDF le permite proporcionar datos de entrada usando HTML y CSS es porque implementa un analizador simple para estos dos idiomas e intenta descubrir cómo traducirlo a PDF. Por lo tanto, es lógico que TCPDF solo admita un pequeño subconjunto de la especificación de HTML y CSS, e incluso en material compatible, probablemente no sea tan perfecto como en los navegadores web de primera clase.
Dicho eso, la pregunta es: ¿qué es compatible y qué no? La documentación básicamente omite el problema y le permite disfrutar del método de prueba y error.
Al observar el código fuente, podemos ver que hay un método protegido denominado TCPDF::getHtmlDomArray()
que, entre otras cosas, analiza las declaraciones de CSS. Puedo ver cosas como font-family
, list-style-type
o text-indent
pero no hay margin
o padding
por lo que puedo ver y, definitivamente, no hay float
en absoluto.
En resumen: con TCPDF, puede usar CSS para algunos formatos básicos . Si necesita convertir de HTML a PDF, es la herramienta incorrecta. (Si ese es el caso, ¿puedo sugerir wkhtmltopdf ?)
Hola, solo quería compartir que encontré esto:
// Eliminar los márgenes inferior y superior de la etiqueta
$ tagvs = array (''p'' => matriz (0 => matriz (''h'' => 0, ''n'' => 0), 1 => matriz (''h'' => 0, ''n'' => 0 ))); $ pdf-> setHtmlVSpace ($ tagvs);
aquí: https://tcpdf.org/examples/example_061/
y úselo para eliminar las propiedades de las etiquetas ''p'' (abajo y arriba) y luego coloque el texto ''p'' dentro de una celda usando
Las etiquetas compatibles son: a, b, blockquote, br, dd, del, div, dl, dt, em, fuente, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, pequeño, span, fuerte, sub, sup, tabla, tcpdf, td, th, thead, tr, tt, u, ul
Todos los atributos de HTML deben estar entre comillas dobles
Recientemente me encontré con el mismo problema al hacer que el TCPDF funcione con mi CSS. Eche un vistazo al código a continuación. Me funcionó después de que cambié el CSS estándar a un formato que PHP entendería
Muestra de código a continuación
$table = ''<table width="100%" cellspacing="0" cellpadding="55%">
<tr valign="bottom">
<td class="header1" rowspan="2" align="center" valign="middle"
width="6%">Category</td>
<td class="header1" rowspan="2" align="center" valign="middle"
width="26%">Project Description</td>
</tr></table>'';
Recientemente me encontré con el mismo problema y encontré una solución, aunque solo será útil si puedes cambiar el código html para que se adapte.
Usé tablas para lograr mi diseño acolchado, así que para crear el equivalente de un div con relleno interno hice una tabla con 3 columnas / 3 filas y coloqué el contenido en la fila / columna central. La primera y la última columna / filas se usan para el relleno.
p.ej.
<table>
<tr>
<td width="10"> </td>
<td> </td>
<td width="10"> </td>
</tr>
<tr>
<td> </td>
<td>content goes here</td>
<td> </td>
</tr>
<tr>
<td width="10"> </td>
<td> </td>
<td width="10"> </td>
</tr>
</table>
Espero que ayude.
Joe
Solo un pequeño consejo para establecer un relleno personalizado sin elementos de mesa adicionales. Solo use esta forma, funciona (TCPDF 6.2.11)
<table border="0" style="padding-left: 10px; padding-bottom: 15px;">
<tr>
<td style="border: 1px solid grey;"> One two three </td>
<td style="border: 1px solid grey;"> Four five six </td>
</tr>
</table>
TCPDF 5.9.010 (2010-10-27) - Se agregó soporte para las propiedades CSS ''border-spacing'' y ''relleno'' para las tablas.
TCPDF 6.2.11 (2015-08-02)
Algunas cosas no funcionarán cuando se incluyan dentro de las etiquetas <style>
, sin embargo, si se agregan en un atributo style=""
en la etiqueta HTML. Por ejemplo, relleno de tablas: esto no funciona:
table {
padding: 5px;
}
Esto hace :
<table style="padding: 5px;">