PHPWord之解析首行缩进字符数量

7 篇文章 0 订阅

首先将word转化为xml,查看首行缩进几个字符是通过什么标签决定的。

经过观察,首行缩进解析为xml时的表现形式是<w:pPr>中的<w:ind w:firstLineChars="2">

  1. 修改Reader\Word2007\AbstractPart.php
 protected function readParagraphStyle(XMLReader $xmlReader, \DOMElement $domNode)
    {
        if (!$xmlReader->elementExists('w:pPr', $domNode)) {
            return null;
        }

        $styleNode = $xmlReader->getElement('w:pPr', $domNode);
        $styleDefs = array(
            // ......
            // 解析首行缩进的值
            'firstLineChars'      => array(self::READ_VALUE, 'w:ind', 'w:firstLineChars'), 
            // ......
        );
        return $this->readStyleDefs($xmlReader, $styleNode, $styleDefs);
    }

  1. 修改Style\Paragraph.php
<?php
namespace PhpOffice\PhpWord\Style;

class Paragraph extends Border
{
	// ...
	/**
     * 缩进字符
     *
     * @var integer
     * @Author 3273 wangguoguo@zzvcom.com
     * @DateTime 2022-11-03
     */
    private $firstLineChars = 0; //新增首行缩进属性

	// ......
	// 修改方法
    public function getStyleValues()
    {
        $styles = array(
            // ...
            'indentation'         => $this->getIndentation(),
            // ------新增内容开始
            'firstLineChars'      => $this->getFirstLineChars(),
            // ------新增内容结束
            'spacing'             => $this->getSpace(),
           // ...
        );
        return $styles;
    }
	// 新增方法
    /**
     * Get getFirstLineChars
     *
     * firstLineChars 的首字母大写
     */
    public function getFirstLineChars()
    {
        return $this->firstLineChars;
    }
    /**
     * Set getFirstLineChars
     *
     * firstLineChars 的首字母大写
     */
    public function setFirstLineChars($num = 0)
    {
        $this->firstLineChars = $num;
    }
}
  1. 使用
		if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) { //判断是否普通文本
            $pStyle = $element->getParagraphStyle();
            $firstLevel = $pStyle->getFirstLineChars();
            // 首行缩进的单位采用em
            $firstLevel > 0 && $pStyleString .= "text-indent:{$firstLevel}em;";
        }

撒花★,°:.☆( ̄▽ ̄)/$:.°★

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值