Рендеринг HTML с помощью TCPDF (PHP)

Я использую функцию TCPDF writeHtml для страницы, которая правильно отображается в браузере. В выходном PDF шрифты слишком маленькие. Я пробовал с setFont, но, похоже, это не имеет никакого эффекта. У кого-нибудь есть опыт в этом?

Я хотел бы добавить здесь, что HTML не всегда находится под моим контролем, поэтому я бы предпочел сделать это с параметрами TCPDF (а не путем изменения исходного html)

ОБНОВЛЕНИЕ: я могу изменить размер шрифта, установив его на теле. Единственная оставшаяся проблема заключается в том, что для правильного рендеринга в браузере он должен быть 12 пикселей. Чтобы правильно отобразить в PDF, он должен быть примерно 30px. Установить носитель на css? Какой тип носителя для TCPDF?


person navjotk    schedule 24.01.2012    source источник
comment
Какую единицу измерения вы используете в своем CSS? em, px, %, pt?   -  person entropid    schedule 24.01.2012
comment
Установить шрифт? Ничего такого. Я просто использую значение по умолчанию. Он отлично отображается в браузере, но слишком мал для TCPDF.   -  person navjotk    schedule 24.01.2012
comment
Это может быть проблемой, попробуйте установить font-size в объявлении CSS для тела.   -  person entropid    schedule 24.01.2012


Ответы (3)


Вы используете теги? HTML-движок tcpdf дает тегу преимущество над любым CSS или другими тегами, регулирующими размер. Если вы удалите любые посторонние теги из HTML и используете чистый CSS, все должно отображаться так, как ожидалось. Или, если вы не используете CSS, вы должны. Тот факт, что браузер отображает его правильно, не означает, что он будет выглядеть так же в других форматах. Браузер, вероятно, проделал какую-то собственную магию, чтобы заполнить пробелы в ваших спецификациях CSS.


ОБНОВЛЕНИЕ

Вот пример указания объявлений CSS с вашим HTML при использовании tcpdf. Обратите внимание, как все стили применяются с помощью объявлений CSS внутри тега <style> вне фактического тела HTML.

<?php

$html = <<<EOF
<!-- EXAMPLE OF CSS STYLE -->
<style>
  h1 {
    color: navy;
    font-family: times;
    font-size: 24pt;
    text-decoration: underline;
  }
  p {
    color: red;
    font-family: helvetica;
    font-size: 12pt;
  }
</style>
<body>
<h1>Example of <i>HTML + CSS</i></h1>
<p>Example of 12pt styled paragraph.</p>
</body>
EOF;

$pdf->writeHTML($html, true, false, true, false, '');

?>
person rdlowrey    schedule 24.01.2012
comment
Что именно ты имеешь ввиду? Вы спрашиваете меня, определяю ли я размер шрифта где-то в атрибутах HTML? Нет. Как я могу удалить все теги из HTML? - person navjotk; 24.01.2012
comment
Некоторые люди все еще ошибочно прибегают к таким вещам, как теги <font>. Я хочу сказать, что вы должны указать всю логику отображения вашей разметки с помощью CSS. Убедитесь, что вы явно указали tcpdf, какой размер вы хотите отображать, например body { font-size: large; } или p { font-size: 2em; }. - person rdlowrey; 24.01.2012
comment
Могу ли я как-то сделать это с параметрами TCPDF? Я не хочу возиться с исходным HTML, так как он может быть адаптирован для работы со сторонним HTML. Могу ли я добавить некоторые стили отдельно, используя TCPDF? - person navjotk; 24.01.2012
comment
Да, просто объявите объявления стилей в начале html - в любом случае не рекомендуется указывать встроенные объявления CSS в HTML. Я обновлю ответ, чтобы продемонстрировать. - person rdlowrey; 24.01.2012
comment
Я не знал, что вы можете указать CSS для TCPDF writeHTML(). Это даже не упоминается в документации. Этот ответ очень помог, большое спасибо! - person That Brazilian Guy; 13.08.2013

Лучшим решением, которое сработало для меня, было заменить «px» на «pt» в html-коде:

$tidy = str_replace ('px', 'pt', $tidy);

До слева и после замены справа: До слева и после справа

person Andrius V.    schedule 20.06.2013
comment
Это ужасное решение. Авторы PDF используют pt, mm или inch по очень веской причине. Пиксели — это единицы фиксированного размера, которые используются в экранных носителях (т. е. для чтения на экране компьютера). Пиксель обозначает элемент изображения, и, как вы знаете, один пиксель — это один маленький квадратик на вашем экране. Баллы традиционно используются в печатных СМИ (все, что должно быть напечатано на бумаге и т. д.). Один пункт равен 1/72 дюйма. Точки очень похожи на пиксели в том смысле, что они являются единицами фиксированного размера и не могут масштабироваться. - person ; 13.07.2015

TCPDF распознает основные CSS, такие как размер шрифта, цвет шрифта и семейство шрифтов.

Для получения дополнительной информации см. раздел TCPDF не отображает все свойства CSS.

person Jeremy Harris    schedule 24.01.2012
comment
Проблема в том, что HTML не всегда будет под моим контролем. Разве я не могу сделать это вне документа? Может быть, передать CSS вместе с HTML? - person navjotk; 24.01.2012