【问题标题】:HTML Rendering with TCPDF(PHP)使用 TCPDF(PHP) 进行 HTML 渲染
【发布时间】:2012-02-17 21:35:09
【问题描述】:

我正在将 TCPDF 的 writeHtml 函数用于在浏览器中正确呈现的页面。 在输出 PDF 中,字体太小。我试过用setFont,但似乎没有效果。有人有这方面的经验吗?

我想在这里补充一点,HTML 并不总是在我的控制范围内,所以我更喜欢使用 TCPDF 选项(而不是通过修改源 html)

更新:我可以通过在正文上设置来更改字体大小。唯一剩下的问题是,要在浏览器中正确呈现,它需要是 12px。要在 PDF 中正确呈现,它需要像 30 像素。我是否在css上设置媒体? TCPDF 的媒体类型是什么?

【问题讨论】:

  • 您在 CSS 中使用哪种度量单位? em, px, %, pt?
  • 设置字体?没有。我只是使用默认值。它在浏览器上渲染得很好,但在 TCPDF 上太小了。
  • 这可能是问题所在,尝试在正文 CSS 声明中设置 font-size

标签: php html pdf pdf-generation tcpdf


【解决方案1】:

TCPPDF 可以识别基本的 CSS,例如 font-size、font-color 和 font-family。

如需更多信息,请查看TCPDF not render all CSS properties

【讨论】:

  • 问题是 HTML 并不总是在我的控制之下。难道没有什么方法可以在文档之外做到这一点吗?也许将一些 CSS 与 HTML 一起传递?
【解决方案2】:

你在使用标签吗? tcpdf 的 HTML 引擎使 标签优先于任何 CSS 或其他尺寸调整标签。如果您从 HTML 中删除任何无关的标签并使用直接的 CSS,事情应该会按预期呈现。或者,如果您不使用 CSS,则应该这样做。仅仅因为浏览器正确显示它并不意味着它在其他格式上看起来相同。浏览器很可能自己发挥了一些魔力来填补您的 CSS 规范中的空白。


更新

以下是使用 tcpdf 时在 HTML 中指定 CSS 声明的示例。请注意如何使用实际 HTML 正文之外的 <style> 标记内的 CSS 声明应用所有样式。

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

?>

【讨论】:

  • 你到底是什么意思?您是在问我是否在 HTML 属性中的某处定义了字体大小?否。如何从 HTML 中删除所有标签?
  • 有些人仍然错误地使用&lt;font&gt;标签之类的东西。我的意思是您应该使用 CSS 指定 all 标记的显示逻辑。确保你明确告诉 tcpdf 你想要显示什么大小,比如body { font-size: large; }p { font-size: 2em; }
  • 我可以用 TCPDF 参数以某种方式做到这一点吗?我不想弄乱源 HTML,因为这也可能适用于第 3 方 HTML。我可以使用 TCPDF 单独添加一些样式吗?
  • 是的,只需在 html 的开头声明样式声明——无论如何,指定 HTML 内联 CSS 声明并不是最佳实践。我将更新答案以进行演示。
  • 我不知道您可以在 TCPDF 的 writeHTML() 上指定 CSS。文档中甚至都没有提到它。这个答案很有帮助,非常感谢!
【解决方案3】:

对我有用的最佳解决方案是将 html 代码中的 'px' 替换为 'pt':

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

左侧之前和右侧替换之后:

【讨论】:

  • 这是一个可怕的解决方案。 PDF 编写者使用“pt、mm 或英寸”是有充分理由的。像素是在屏幕媒体中使用的固定大小的单位(即在计算机屏幕上读取)。像素代表“图片元素”,如您所知,一个像素是屏幕上的一个小“正方形”。点传统上用于印刷媒体(任何要在纸上印刷的东西,等等)。一点等于 1/72 英寸。点很像像素,因为它们是固定大小的单位,不能按比例缩放。
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 2016-04-06
  • 2020-09-10
  • 1970-01-01
  • 2017-06-20
  • 2014-04-28
  • 2022-01-11
相关资源
最近更新 更多