Работа с CSS плавает в html2pdf - PullRequest
14 голосов
/ 08 января 2012

Я использую числа с плавающей точкой, чтобы расположить 2 деления рядом друг с другом.

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

Вот что делает printbox: он просто отображает буферизованные данные в pdf, но каким-то образом установленные числа с плавающей точкой были потеряны.в процессе.

<?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');
?>

Отлично работает на html:

enter image description here

, но когда я нажимаю на печать, получается следующее:

enter image description here

Есть идеи, в чем проблема?

Ответы [ 2 ]

25 голосов
/ 23 января 2012

Говоря из личного опыта, я бы сказал, что стиль вывода HTML2PDF в лучшем случае является эзотерической наукой о черной магии. Основными причинами этого являются:

  • Класс поддерживает только (относительно небольшое) подмножество стилей и селекторов CSS
  • CSS-совместимость недокументирована
  • Невозможно отладить PDF в отношении ввода HTML

Чтобы быть справедливым, это проблема не только для HTML2PDF, но также для TCPDF, который HTML2PDF использует .

Возможно, возможно, что HTML2PDF, являющийся просто-почти-нулевым, быстрым и простым альтернативным интерфейсом для TCPDF, отсекает больше поддержки CSS - но я уверен, что даже TCPDF не будет правильно поддерживать float .

Лучший обходной путь, который вы могли бы использовать, - это отправить свои плавающие div в девяностые годы:

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

Вы также можете скрыть это смущение от публичного HTML:

<?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>";
    }
?>
7 голосов
/ 13 сентября 2013

Вы можете посмотреть быструю документацию онлайн на французском языке здесь: http://demo.html2pdf.fr/examples/pdf/about.pdf

('Les float ne sont gérés que pour la balise IMG') *

= Только поплавкиобрабатывается для пометок img классом.

Свойства обработанных css также перечислены в документе.

...