TCPDF не отображает все свойства CSS
Я пытаюсь создать PDF-документ для CSS и HTML, но мой CSS не отображается в моем PDF файле. Единственное, что рассматривается, это размер шрифта и цвет шрифта.
Я даю вам код (извините, он немного длинный...)
$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();
Ответы
Ответ 1
Во-первых, вы должны отметить, что PDF и HTML и разные форматы, которые вряд ли имеют что-то общее. Если TCPDF позволяет вам предоставлять входные данные с использованием HTML и CSS, потому что он реализует простой синтаксический анализатор для этих двух языков и пытается выяснить, как его перевести в PDF. Поэтому логично, что TCPDF поддерживает только немного подмножества спецификаций HTML и CSS и даже в поддерживаемых материалах, вероятно, не такой совершенный, как в веб-браузерах первого класса.
Сказал, что вопрос: что поддерживалось, а что нет? Документация в основном пропускает проблему и позволяет вам наслаждаться методом проб и ошибок.
Взглянув на исходный код, мы видим там защищенный метод под названием TCPDF::getHtmlDomArray()
, который, помимо прочего, анализирует объявления CSS. Я вижу такие вещи, как font-family
, list-style-type
или text-indent
, но там нет margin
или padding
, насколько я могу видеть, и, наконец, нет float
вообще.
Подводя итог: с помощью TCPDF вы можете использовать CSS для некоторого базового форматирования. Если вам нужно конвертировать из HTML в PDF, это неправильный инструмент. (Если это так, могу ли я предложить wkhtmltopdf?)
Ответ 2
TCPDF 5.9.010 (2010-10-27)
- Добавлена поддержка свойств CSS "border-spacing" и "padding" для таблиц.
Ответ 3
Недавно я столкнулся с той же проблемой, когда 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>';
Ответ 4
Поддерживаемые теги: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, pre, small, span, strong, sub, sup, table, tcpdf, td, th, thead, tr, tt, u, ul
Все атрибуты HTML должны быть заключены в двойные кавычки
Ответ 5
В настоящий момент я пишу это, TCPDF поддерживает только прописку для таблиц.
Ссылка на их страницу форума с этой информацией
Ответ 6
Начиная с версии 5.7 TCPDF включает поддержку границ CSS.
Поля, заполнение и поплавок еще не поддерживаются.
Проверьте веб-сайт TCPDF на http://www.tcpdf.org и обратитесь к официальному форуму за дополнительной информацией.
Ответ 7
TCPDF 6.2.11 (2015-08-02)
Некоторые вещи не будут работать, если они включены в теги <style>
, однако они будут добавлены в атрибут style=""
в теге HTML. Например. table padding - эта не работает:
table {
padding: 5px;
}
Этот делает:
<table style="padding: 5px;">
Ответ 8
Недавно я столкнулся с той же проблемой и нашел обходное решение, хотя это будет полезно только в том случае, если вы можете изменить код html, чтобы он соответствовал.
Я использовал таблицы для достижения моей дополненной компоновки, поэтому для создания эквивалента div с внутренним заполнением я сделал таблицу с 3 столбцами /3 строками и поместил содержимое в центральную строку/столбец. Первый и последний столбцы/строки используются для заполнения.
например.
<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>
Надеюсь, что это поможет.
Джо
Ответ 9
Небольшой совет для настройки пользовательского дополнения без дополнительных элементов таблицы.
Просто используйте этот способ, он работает (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>
Ответ 10
Привет, я просто хотел поделиться тем, что нашел это:
// Удалить нижнее и верхнее поля тегов
$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" внутри ячейки с помощью