PHPWord icon indicating copy to clipboard operation
PHPWord copied to clipboard

Strikethrough font style in Word2007 does not work

Open martinsuly opened this issue 6 years ago • 1 comments

It's not possible to use strike font style with Word2007 writer because it uses strict comparison. Methods isStrikethrough and isDoubleStrikethrough can return true, false or null, false !== null.

src/PhpWord/Writer/Word2007/Style/Font.php

// Strikethrough, double strikethrough
$xmlWriter->writeElementIf($style->isStrikethrough() !== null, 'w:strike', 'w:val', $this->writeOnOf($style->isStrikethrough()));
$xmlWriter->writeElementIf($style->isDoubleStrikethrough() !== null, 'w:dstrike', 'w:val', $this->writeOnOf($style->isDoubleStrikethrough()));

You cannot use elements w:strike and w:dstrike in same time. When you set strike style to true eg. with setStrikethrough then it calls method setPairedVal that should disable double strike style.

src/PhpWord/Style/Font.php

    /**
     * Set strikethrough
     *
     * @param bool $value
     * @return self
     */
    public function setStrikethrough($value = true)
    {
        return $this->setPairedVal($this->strikethrough, $this->doubleStrikethrough, $value);
    }

src/PhpWord/Style/AbstractStyle.php

    /**
     * Set $property value and set $pairProperty = false when $value = true
     *
     * @param bool &$property
     * @param bool &$pairProperty
     * @param bool $value
     * @return self
     */
    protected function setPairedVal(&$property, &$pairProperty, $value)
    {
        $property = $this->setBoolVal($value, $property);
        if ($value === true) {
            $pairProperty = false;
        }
        return $this;
    }

In the writer the method $style->isDoubleStrikethrough() !== null evaluates as true even when this method returns false. Please note that method setPairedVal sets this value to false.

martinsuly avatar Sep 13 '19 04:09 martinsuly

Any news on that issue ?

noec764 avatar Apr 04 '24 10:04 noec764