PHPPresentation中直线箭头Arrow Style的实现

问题:原版PHPPresentation无法编辑直线箭头

最近用PHPpresentation输出pptx文档,发现phppresentation没有提供编辑直线箭头类型的功能。与同事一起分析了pptx文档的结构和目录下的php代码。可以确认,直线的两端Style被写死了none,将这里改为’arrow’,可以看到所有的直线都带上了箭头,确认了我们的结论。
代码文档:PhpPresentation / Writer / PowerPoint2007 / AbstractDecoratorWriter.php

在这里插入图片描述

分析和方案

参考color的实现,phppresentation一般调用get函数来取得对象的值,而不是像headEnd那样写入固定值。在对应的类中有3项定义,分别为:数值项(及缺省值),get函数,set函数。
color相关代码:
在这里插入图片描述
我们拟定的方案是改写writer和Border类的定义,加上headEndType和tailEndType两个值,再定义相应的get和set函数分别用于取值和设值。

实现和代码

  1. 改写输出代码文档的111行和118行,这样写入的就不是none了。
    代码文档:PhpPresentation / Writer / PowerPoint2007 / AbstractDecoratorWriter.php
       // a:headEnd
        $objWriter->startElement('a:headEnd');
        $objWriter->writeAttribute('type', $pBorder->getHeadEndType());
        $objWriter->writeAttribute('w', 'med');
        $objWriter->writeAttribute('len', 'med');
        $objWriter->endElement();

        // a:tailEnd
        $objWriter->startElement('a:tailEnd');
        $objWriter->writeAttribute('type', $pBorder->getTailEndType());
        $objWriter->writeAttribute('w', 'med');
        $objWriter->writeAttribute('len', 'med');
        $objWriter->endElement();
  1. 改写Border类
    代码文档:PhpPresentation / Style / Border.php
    我在82行加入了两行代码定义数据项和缺省值:
    private $headEndType='none';
    private $tailEndType='none';

在后面的113行加入两个值的get和set函数:

/*headEnd type and tailEnd Type. Revised by Hing Gu*/
    public function setHeadEndType(string $pValue = "none"): self
    {
        $this->headEndType = $pValue;
        return $this;
    }
    public function setTailEndType(string $pValue = "none"): self
    {
        $this->tailEndType = $pValue;

        return $this;
    }
    public function getHeadEndType(): string
    {
        return $this->headEndType;
    }
    public function getTailEndType(): string
    {
        return $this->tailEndType;
    }
  1. 最后在正常的PPT编辑代码中就可以跟其他值一样写入箭头的类型了:
$objPHPPowerPoint = new PhpPresentation();
$objPHPPowerPoint->getDocumentProperties();
$currentSlide = $objPHPPowerPoint -> getActiveSlide();

$currentSlide->createLineShape(1010100100)
			->getBorder()
			->setLineStyle(Border::LINE_DOUBLE)// 设置线条样式(单条线,双条线,...)
			->setHeadEndType('arrow')
			->setTailEndType('arrow')
			->setColor(new Color('FFAAAAAA'))
			->setLineWidth(1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值