获取TCPDF中的当前文本颜色

时间:2018-08-27 10:42:50

标签: tcpdf

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

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

免责声明:我知道TCPDF is deprecreated的当前版本,但新版本为not ready yet。我知道还有其他渲染PDF的选项(例如无头chrome),对于许多用例而言,它们更易于使用且更稳定,但是我无法使用它们,因为我的用例需要HTML / CSS无法实现的功能。 / p>

2 个答案:

答案 0 :(得分:1)

没有一个。至少不是作为公共职能。

但是,受保护的属性$fgcolor是可以直接返回给setTextColorArray的数组。知道这一点-扩展类以为当前文本颜色提供吸气剂很容易。

<?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中。)

答案 1 :(得分:1)

我需要在我的问题中编写的可重用帮助程序类的此功能。由于此帮助程序类应与所有TCPDF实例一起使用,因此扩展TCPDF以添加EPB答案中建议的其他公共方法不是一个选择。我决定使用ReflectionProperty:

public void execute() {
    Single.zip(getFirstApiResponse(), getSecondApiResponse(), 
                (first, second) -> {
                    //now you have both
                    return Pair.of(first, second);
                }).subscribe(pair -> {/**do stuff**/});
    }