table样式还未读出 正在测试中,

目前有 rows cell textrun等样式

顺序不固定 可以设定

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\Style\Font;
use PhpOffice\PhpWord\Shared\ZipArchive;
use PhpOffice\PhpWord\Settings;
use PhpOffice\PhpWord\Shared\Converter;
use PhpOffice\PhpWord\Style\TablePosition; class Test extends MY_Controller
{ public $currentPage=0;
private $args = null; // 文本段样式 public function __construct()
{
parent::__construct();
} public function joinFile()
{
$page=2;
$file1='/home/shaonianlang/桌面/111.docx';
$file2='/home/shaonianlang/桌面/szxm.docx';
$phpWord = new PhpWord();
$S1 =IOFactory::load($file1)->getSections();
$S2 = IOFactory::load($file2);
$arr=[]; foreach ($S1 as $S) { $elements = $S->getElements(); // 逐级读取/写入节点
$arr=$this->copyElement($elements, $section);
} //合并文档
//$section = $S2->addSection();
//生成新文档
$section = $phpWord->addSection(); $table = $section->addTable();
//$header = array('size' => 16, 'bold' => true);
//table行数
$rows = $arr['rows'];
//table列数
$cols = $arr['cells']; foreach($arr['tmptext'] as $qa) { $xas='';
$header=[];
if(is_array($qa)) {
foreach ($qa as $axz) { $xas.=$axz['text'];
$header=array('size'=>$axz['style']['basic']['size'],'name'=>$axz['style']['basic']['name']);
} $section->addText($xas, $header);
} } //var_dump($arr); //添加标题 后面是个央视 //添加一个表格实力恶化
//$table = $section->addTable();
//行数循环
for ($r = 1; $r <= $rows; $r++) {
//添加行
$table->addRow($arr['height'][$r]);
//添加列数
for ($c = 1; $c <= $cols; $c++) { //判断当前列数中textrun的个数
$counts=count($arr['text'][$r][$c]); //textrun表示就是一行
if($counts<2) {
$headers=array('size'=>$arr['text'][$r][$c][0]['style']['basic']['size'],'name'=>$arr['text'][$r][$c][0]['style']['basic']['name']);
$table->addCell($arr['width'][$r][$c])->addText($arr['text'][$r][$c][0]['text'],$headers);
}else {
//textrun表示是两行 完美
$texs='';
foreach($arr['text'][$r][$c] as $ka=>$txa) {
$texs.=$txa['text'];
$headers=array('size'=>$txa['style']['basic']['size'],'name'=>$txa['style']['basic']['name']);
} //将数据插入到表格中
$table->addCell($arr['width'][$r][$c])->addText($texs,$headers);
} } } $F1 = IOFactory::createWriter($phpWord);
$path = APPPATH.'app/upload';
if(!is_dir($path)) mkdir($path);
$filePath = $path . time() . '.docx';
$F1->save($filePath); } /**
* 逐级读取/写入节点
*
* @param Array
* 需要读取的节点
* @param PhpOffice\PhpWord\Element\Section
* 节点的容器
* @param Array
* 文档2的所有节点
*/
private function copyElement($elements, &$container, $S2 = null)
{
$inEls = [];
$arrx=[];
$styles=[];
foreach ($elements as $e1) { $class=get_class($e1); //获取word中对应内容类型类
$elname=explode("\\", $class)[3]; //$fun = 'add' . $elname; //如果没找到分页 则默认为第一页
if ($elname == 'PageBreak') {
$this->currentPage++;
}else{
$this->currentPage=1;
} //文本节点 继续循环
if ($elname=='TextRun') {
$arrx['tmptext'][]=$this->getTextElement($e1);//获取text节点内容 } if ($elname=='Table') { $rows=count($e1->getRows()); //行数
$cells=$e1->countColumns(); //列数
//$style=$e->getStyle(); //表格样式
//$width=$e->getWidth(); //宽度
$arrx['rows']=$rows;
$arrx['cells']=$cells; for($i=0;$i<$rows;$i++) {
$rows_a=$e1->getRows()[$i];
$arrx['height'][$i+1]=$rows_a->getHeight();
//$arrx['rows'][$i+1]=$this->rowstyle($rows_a);
for($j = 0; $j < $cells; $j++) {
//$arrx[$i][$r]=
$x=$rows_a->getCells()[$j];
$arrx['width'][$i+1][$j+1]=$x->getWidth();
$arrx['text'][$i+1][$j+1]=$this->getTextElement($x);
//$arrx['cells'][$i+1][$j+1]=$this->cellsstyle($x);
}
} } } return $arrx;
} /**
* 获取Text节点
*/
private function getTextElement($E)
{
$elements = $E->getElements();
$xas='';
$result = [];
$inResult=[];
$text=[];
foreach($elements as $inE) {
$ns = get_class($inE);
$elName = explode('\\', $ns)[3];
if($elName == 'Text') { $result[] = $this->textarr($inE); } elseif (method_exists($inE, 'getElements')) {
$inResult = $this->getTextElement($inE);
}
if(!is_null($inResult)) {
$result = array_merge($result, $inResult);
}
} // if (count($result)>0) {
// foreach($result as $xaa) {
// var_dump($xaa);
// }
// } return count($result) > 0 ? $result : null;
} /**
* 获取text的样式
*
* @param [type] $e
* @return void
*/
public function style($e)
{
$style=$e->getFontStyle();
$arry=$style->getStyleValues();
foreach($arry as $key=>$xas) {
if (is_object($xas)) {
$arry['Paragraph'][]=$xas->getStyleValues();
unset($arry[$key]); }
} return $arry;
} /**
* 行样式
*
* @param [type] $rows
* @return void
*/
public function rowstyle($rows)
{
$style=$rows->getStyle(); $arry['TblHeader']=$style->getTblHeader();
$arry['CantSplit']=$style->getCantSplit();
$arry['ExactHeight']=$style->getExactHeight(); return $arry; } /**
* 列的样式
*
* @param [type] $cells
* @return void
*/
public function cellsstyle($cells)
{
$style=$cells->getStyle();
$arry['VAlign']=$cells->getVAlign();
$arry['TextDirection']=$cells->getTextDirection();
$arry['BgColor']=$cells->getBgColor();
$arry['GridSpan']=$cells->getGridSpan();
$arry['VMerge']=$cells->getVMerge();
$arry['Shading']=$cells->getShading();
$arry['Width']=$cells->getWidth();
$arry['Unit']=$cells->getUnit();
$arry['DefaultBorderColor']=$cells->getDefaultBorderColor(); return $arry;
} public function textarr($e)
{
$textArr['text']=$e->getText();
$textArr['style']=$this->style($e); return $textArr;
} }

phpword读取内容和样式 生成新的内容的更多相关文章

  1. org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI

    优点:不依赖Microsoft组件,在内存中操作excel,读写速度快.   缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...

  2. pandas 选择列或者添加列生成新的DataFrame

    选择某些列 import pandas as pd # 从Excel中读取数据,生成DataFrame数据 # 导入Excel路径和sheet name df = pd.read_excel(exce ...

  3. C#读取Word模板替换相应的字符串(标签)生成新的Word

    在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求.不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是 ...

  4. 编写Java程序,读取文本文档的内容,去除文本中包含的“广告”字样,把更改后的内容保存到一个新的文本文档中

    查看本章节 查看作业目录 需求说明: 读取文本文档的内容,去除文本中包含的"广告"字样,把更改后的内容保存到一个新的文本文档中 实现思路: 在main() 方法中,使用 new F ...

  5. [转]用CSS给SVG <use>的内容添加样式

    来源:http://www.w3cplus.com/svg/styling-svg-use-content-css.html?utm_source=tuicool&utm_medium=ref ...

  6. 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题

    我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...

  7. Docker 实战(二)——centos7镜像安装nginx,将安装nginx的centos容器生成新的镜像,并导出

    Docker centos7镜像安装nginx 1.安装docker 使用yum安装docker不再重复:见  Linux常用命令 2.pull centos 1)在docker仓库中搜索centos ...

  8. C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML

    using System; using System.Linq; using System.Xml.Linq; namespace Sample2 { class Program { static v ...

  9. php根据word模板生成新的word文件

    原文地址:http://www.niu12.com/article/16 php使用phpword将word内容变量替换 a.安装phpword composer require phpoffice/ ...

随机推荐

  1. C语言&C++ 中External dependencies

    参考:https://blog.csdn.net/yyyzlf/article/details/4419593 External   Dependencies是说你没有把这个文件加入到这个工程中,但是 ...

  2. 《C++primerplus》第10章练习题

    1.定义一个类表示银行账户.数据成员包括姓名,账号和存款.成员函数可以执行初始化数据.显示数据和取款存款的功能. //Bank.cpp #include<iostream> #includ ...

  3. 为了省钱,我用1天时间把PHP学了!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你在通往架构师的路上吗? 程序员这个行业就像是在不断的打怪升级,突破每一阶段的瓶颈期 ...

  4. AntDesign初体验

    AntDesign初体验 作为一个java开发也需要掌握一定的前端开发技能,毕竟靠人不如靠自己.再者,有时候一些小的改动自己就可以搞定了,就不用低三下四去求别人了: 安装Nodejs $ npm in ...

  5. 多测试_mysql数据库_09

    什么是数据库? 是存放数据的电子仓库.以某种方式存储百万条,上亿条数据,供多个用户访问共享. 每个数据库都有一个或多个不同的api用于创建.访问,管理和复制所保存的数据. 数据库分关系型数据库和非关系 ...

  6. 多测师_讲解python__004 函数

    # 函数:一个工具,随调随用# 降级代码冗余## 增加代码的复用性,提高开发效率,为了不成为cv战士## 提高程序扩展性## 函数有两个阶段:定义阶段,调用阶段.## 定义时:只检查函数体内代码语法, ...

  7. set的运用 例题5-3 安迪的第一个字典(Andy's First Dictionary,Uva 10815)

    #include<bits/stdc++.h>using namespace std;set<string> dict;int main(){ string s, buf; w ...

  8. python 产生随机函数random

    random是内建(built-in)函数,作用是产生随机数 导入模块: 接着就可以调用random模块下的函数了使用 dir(random)可以查看random模块下有哪些函数,结果如下: 最常用的 ...

  9. CVE-2010-2883-CoolType.dll缓冲区溢出漏洞分析

    前言 此漏洞是根据泉哥的<漏洞战争>来学习分析的,网上已有大量分析文章在此只是做一个独立的分析记录. 复现环境 操作系统 -> Windows XP Sp3 软件版本 -> A ...

  10. centos8平台redis5的主从同步搭建及sentinel哨兵配置

    一,规划三台redis的ip:一主二从 redismaster01: 172.18.1.1 主 redisslave01: 172.18.1.2 从 redisslave02: 172.18.1.3 ...