获取 TCPDF 中的当前文本颜色

Get current text color in TCPDF

TCPDF 允许通过 SetTextColor 方法设置文本颜色,但我找不到任何方法来获取当前文本颜色。这是根本不支持还是我错过了什么?

用例:我正在为 TCPDF 编写一个可重用的助手,它需要修改文本颜色,但应该在完成后重置它。

免责声明:我知道当前版本的 TCPDF is deprecreated but the new version is not ready yet。我知道还有其他选项可以渲染 PDF(例如 chrome headless),这些选项对于许多用例来说更易于使用且更稳定,但我无法使用它们,因为我的用例需要使用 [ 无法实现的功能=20=] / CSS.

没有一个。至少,不是作为 public 函数。

然而,受保护的 属性 $fgcolor 是一个可以直接返回给 setTextColorArray 的数组。了解这一点 - 很容易扩展 class 为当前文本颜色提供 getter。

<?php
class MYTCPDF_HELPER extends TCPDF {
    public function getTextColor() {
        return $this->fgcolor;
    }
}

$pdf = new MYTCPDF_HELPER();

/*...*/

$prevcolor = $pdf->getTextColor();
$pdf->setTextColorArray(array(100, 0, 0, 0), false);
$pdf->WriteHTML('<p>Test Text</p>');
$pdf->WriteHTML('<p>More Text</p>');
$pdf->setTextColorArray($prevcolor);
$pdf->WriteHTML('<p>Final Line</p>');
// "Final Line" is written in whatever color was set when we called getTextColor.

我通过查看 TCPDF 本身如何处理恢复 writeHTML.

的解析器中的文本颜色得到了这个想法

(注意:对于其他颜色数组:绘制颜色存储在$stokecolor中,填充颜色存储在$bgcolor中。)

我需要这个功能来实现可重复使用的助手 class,正如我在问题中所写的那样。由于这个助手 class 应该与所有扩展 TCPDF 的 TCPDF 实例一起工作,以添加额外的 public 方法,正如 EPB 的回答中所建议的那样不是一个选项。我决定使用 ReflectionProperty:

$r = new \ReflectionObject($pdf);
$p = $r->getProperty('fgcolor');
$p->setAccessible(true);
$textColor = $p->getValue($pdf);