文档章节

PHP导出PPT方法,PowerPoint/PhpPresentation处理

inp
 inp
发布于 2017/01/14 16:37
字数 603
阅读 156
收藏 1

之前做了一个PPT导出的功能,去网上找了一些教程 发现都不是很详细,在这里详细说一下。 GitHub地址:https://github.com/PHPOffice/PHPPresentation 首先加载类是必须的,这里就不详细说了,直接进入代码:

//新建一个对象,每个人放的位置不同,用命名空间也可以
$objPHPPowerPoint  = new \PhpOffice\PhpPresentation\PhpPresentation();

//获取当前页的幻灯片(也可以看做第一页)
$shape = $currentSlide->createDrawingShape();

// 添加文本框
$shape = $currentSlide->createRichTextShape()
              ->setHeight(150)                                             //宽 (设置宽度后 自动缩放 )
              ->setOffsetX(370)                                            // X 位置
              ->setOffsetY(180);                                           // Y 位置
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER );        //水平居中
$textRun = $shape->createTextRun("XXXXXX\n\n检测报告");         //内容
$textRun->getFont()->setBold(false)               //加粗
                   ->setSize(38)                                         //字号
                   ->setName("黑体")                               //字体
                   ->setColor( new Color( 'FF000000' ) );                   //颜色

//添加一个图片
$shape = $currentSlide->createDrawingShape();

$shape->setName('社区图片')                //图片名
              ->setDescription('社区图片')         //描述
              ->setPath('111.jpg')                //路径
             ->setWidth(250)             //宽
             ->setOffsetX(100)
             ->setOffsetY(200);
//设置图片显示状态
$shape->getShadow()->setVisible(true)
              ->setDirection(45)
              ->setDistance(10);

简单的先说这两个吧,如果你添加多张的话可以用下面这个方法

$currentSlide = $objPHPPowerPoint->createSlide();         //在这行代码的后边直接添加图片或者文本框,多张幻灯片就循环一下


//然后保存
$oWriterPPTX = IOFactory::createWriter($objPHPPowerPoint, 'PowerPoint2007');
$oWriterPPTX->save(ROOT . 'myPhpPpt.pptx');

这种方式不会提示下载直接就到save()的路径下面了,若果提示保存的话应该在调用createWriter()前加上这样一段代码

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition:inline;filename=\"" . urlencode($order['order_name']). date('YmdHis') . ".pptx\"");
header("Content-Transfer-Encoding: binary");
header("Expires: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");

最后的save()里的内容应该是‘php://output’; 需要注意的一点是,我列出来的这段代码最后不能

return $oWriterPPTX->save(‘php://output’);

return后页面会有一大串乱码,可以exit;

$oWriterPPTX->save(‘php://output’);
exit;

也可以读取某个PPT文件,用这个文件的模板生成ppt

//读取ppt
//ppt版本   2007
$pptReader = IOFactory::createReader('PowerPoint2007');
$oPHPPresentation =new \PhpOffice\PhpPresentation\PhpPresentation();
//读取文件
$oPHPPresentation = $pptReader->load(ROOT_PATH.'123.pptx');
//幻灯片的个数
$slidecount = $oPHPPresentation->getSlideCount();die;

//获取某张幻灯片  从0开始
$currentSlide = $oPHPPresentation->setActiveSlideIndex(2);
//这后面可以对此页的幻灯片进行操作,代码和新建一样,就不贴出来了

就说这么多吧,不是高玩(请轻喷),刚做的可以看下。

© 著作权归作者所有

inp

inp

粉丝 3
博文 1
码字总数 603
作品 0
丰台
程序员
私信 提问
PPT那些令人叹为观止的功能,你玩转了吗?

对于资深的PPT发烧友涞说具有无可比拟的魔力,它又有哪些让你相见恨晚的知识呢?PowerPoint作为一款备受欢迎的办公软件,很多用户只是知道常见的一些基础功能,而更深层次的功能,估计大部分...

让往事随风
2016/05/05
85
0
PPT加密和破解方法

PPT是目前工作和学习生活中必不可少的一款office软件,里面可以记录各种工作事项和计划。在数字飞速发展的今天,隐私安全变得越来越重要。密码的运用也变得愈发的重要。   就像其他Office软...

neluzyy1
2015/09/09
777
0
POI操作Microsoft Office(Word、Excel、PowerPoint)全面了解

POI 与 Microsoft Office 1. POI 简介 POI 是 Apache 下的 Jakata 项目的一个子项目,主要用于提供 java 操作 Microsoft Office 办公套件如 Excel,Word,Powerpoint 等文件的 API. 微软的O...

sundy_ly
2014/01/13
3.5K
1
jacob操作ppt报错

就是网上到处流传的这段代码,PPT转pdf就会报错 com.jacob.com.ComFailException: Invoke of: SaveAs Source: Microsoft PowerPoint 2013 Description: Presentation.SaveAs : PowerPoint 无......

睡觉不关灯
2016/06/20
929
1
【PPT软件】PowerPoint 2010 播放器 让microsoft officer 2010 PPT飞一会

您是否曾遇到用PowerPoint 2010作出的.pptx格式幻灯片发去对方因无Office 2010无法观看的问题呢? 如果对方电脑是一裸机,没网没法下载PowerPoint 2010 Viewer,即使下载了,如果系统版本低,...

刘学炜
2012/03/25
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Less导入选项

Less 提供了CSS @import CSS规则的几个扩展,以提供更多的灵活性来处理外部文件。 语法: @import (keyword) "filename"; 以下是导入指令的相关详情: reference,使用较少的文件但不输出。 ...

凌兮洛
2分钟前
0
0
Docker下实现MySQL主从(读、写分离)同步配置

docker下实现两个(或多个)mysql容器的主、从数据库同步配置,首先要明白docker容器的相互通信关系,默认是使用的bridge模式: 也就是说,通过docker run命令创建docker容器是每个容器都有自己...

源哥L
12分钟前
3
0
一起来学Java8(三)——方法引用

在一起来学Java8(一)——函数式编程中有一个简单的函数式编程的例子: import java.util.function.Consumer;class Person { public static void sayHello(String name) { S...

猿敲月下码
31分钟前
15
0
读书笔记:深入理解ES6(十一)

第十一章 Promise与异步编程   Promise可以实现其他语言中类似Future和Deferred一样的功能,是另一种异步编程的选择,它既可以像事件和回调函数一样指定稍后执行的代码,也可以明确指示代码...

张森ZS
55分钟前
20
0
面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
今天
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部