TCPDF不呈现所有CSS属性

我尝试做一个PDF编写的CSS和HTML,但我的CSS不出现在我的PDF。 唯一要考虑的是font-size和font-color。

我给你的代码(对不起,有点长…)

$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(); 

首先,您应该注意PDF和HTML以及几乎没有任何共同点的不同格式。 如果TCPDF允许您使用HTML和CSS提供input数据,那是因为它为这两种语言实现了一个简单的parsing器,并试图找出如何将其转换为PDF。 所以,TCPDF只支持HTML和CSS规范的一小部分是合乎逻辑的,甚至在支持的东西中,也可能不如一stream的Web浏览器那么完美。

说,问题是:什么是支持的,什么不是? 文档基本上跳过这个问题,让我们享受试错法。

看看源代码,我们可以看到有一个被称为TCPDF::getHtmlDomArray()的保护方法,除此之外,它parsing了CSS声明。 我可以看到像font-familylist-style-type或者text-indent这样的东西,但是就我所能看到的而言,没有任何marginpadding ,而且根本没有float

总结一下:使用TCPDF,你可以使用CSS进行一些基本的格式化。 如果您需要从HTML转换为PDF,这是错误的工具。 (如果是这样的话,我可以build议wkhtmltopdf ?)

TCPDF 5.9.010(2010-10-27) – 增加了对表格的CSS属性'border-spacing'和'padding'的支持。

我最近遇到了TCPDF和CSS一起工作的问题。 看看下面的代码。 它改变了标准的CSS到一个PHP会理解的格式后,我工作

下面的代码示例

 $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>'; 

支持的标签有:a,b,blockquote,br,dd,del,div,dl,dt,em,font,h1,h2,h3,h4,h5,h6,hr,i,img,li, pre,small,span,strong,sub,sup,table,tcpdf,td,th,thead,tr,tt,u,ul

所有的HTML属性都必须用双引号括起来

目前我写这个,TCPDF只支持表的填充。

链接到他们的论坛页面的信息

从版本5.7开始,TCPDF包含对CSS边界的支持。 边距,填充和浮点数不被支持。 检查TCPDF网站http://www.tcpdf.org并咨询官方论坛获取更多信息。;

TCPDF 6.2.11(2015-08-02)

当包含在<style>标签中时,有些东西将不起作用,但是如果将其添加到HTML标签中的style=""属性中,它们将不起作用。 如表填充 – 这行不通的:

 table { padding: 5px; } 

这样

 <table style="padding: 5px;"> 

我最近遇到了同样的问题,并find了一个解决方法,虽然它只会是有用的,如果你可以改变适合的HTML代码。

我用表来实现我填充的布局,所以要创build一个与内部填充div的等价物,我做了一个3列/ 3行的表,并把内容放在中间的行/列。 第一列和最后一列/行用于填充。

例如。

 <table> <tr> <td width="10">&nbsp;</td> <td>&nbsp;</td> <td width="10">&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>content goes here</td> <td>&nbsp;</td> </tr> <tr> <td width="10">&nbsp;</td> <td>&nbsp;</td> <td width="10">&nbsp;</td> </tr> </table> 

希望有所帮助。

只是一小部分提示设置自定义填充没有额外的表格元素。 只要用这种方式,它就可以工作(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> 

嗨,我只是想分享,我发现这一点:
// 删除标签底部和顶部边距

$ tagvs = array('p'=> array(0 => array('h'=> 0,'n'=> 0),1 => array('h'=> 0,'n'=> 0 ))); $ PDF-> setHtmlVSpace($ tagvs);

在这里: https : //tcpdf.org/examples/example_061/

并使用它来删除'p'标签属性(底部和顶部),然后将'p'文本放置在单元格内使用