文档章节

PHP生成PPT文件

webphp
 webphp
发布于 2018/07/18 09:23
字数 688
阅读 183
收藏 0

应用PHP生成PPT

一、环境配置

1、选择适合的dll文件的查看参数

  • 要生成ppt之前要做的前期准备工作,在php.ini文件中把php_zip.dll前的;去掉,然 后重启服务
  • 查看phpinfo()函数,查看里面的参数
  • Compiler: MSVC11 (Visual C++ 2012)
  • Architecture : x86
  • PHP Extension Build : API20131226,TS,VC11
  • 下载php_zip.dll地址 https://windows.php.net/downloads/pecl/releases/
  • 找到zip,选择相应的版本,这里选择1.12.4,地址 https://windows.php.net/downloads/pecl/releases/zip/1.12.4/
  • 选择vc11和x86相应的安装包,php_zip-1.12.4-5.5-ts-vc11-x86.zip
  • 解压后放到php/ext/文件夹下

二、在项目中安装PHPPresentation

三、实现代码如下:

  • 在Laravel框架下的代码实现
public function exportPpt(Request $request){
        $params = $request->input();

        if ( !isset( $params['text'] ) || empty( $params['text'] )){
            ajax_return(6001, '模块名称不能为空');
        }
        if ( !isset($params['images']) || empty($params['images']) ){
            ajax_return(6002, '生成的内容不能为空');
        }
        //主标题
        $textHeader = $params['text'];
        $title = '';
        $description = '';
        //新建立一个 PHPPowerPoint 对象.
        $objPHPPresentation = new PhpPresentation();
        //获取当前使用的一页幻灯片
        $currentSlide = $objPHPPresentation->getActiveSlide();
        //设置一个文本框
        $shape = $currentSlide->createRichTextShape()
            ->setHeight(100)
            ->setWidth(600)
            ->setOffsetX(170)
            ->setOffsetY(80);
        $shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER );
        $textRun = $shape->createTextRun($textHeader);
        $textRun->getFont()->setBold(true)
            ->setSize(20)
            ->setColor( new Color('FFE06B20' ) );


        //+++++++++循环生成文字与图片+++++++++++++++++++++++++++++++++++++++++++++
        $images = $this->createImage($params['images']);
        $imgY = 180;
        $imgHeight = 450;
        $textY = 100;
        foreach ($images as $key => $value){
            $currentSlide = $objPHPPresentation->createSlide();//创建空白ppt页
            //添加一个图片到幻灯片.
            $shape = $currentSlide->createDrawingShape();
            //设置图片名称.
            $shape->setName($title)
                //设置图片的描述信息.
                ->setDescription($description)
                //图片实际路径
                ->setPath($value['imgsrc'])//LOGO
                ->setWidth(700)
                //图片高度
                ->setHeight($imgHeight)
                //设置图片相对于左上角X位置, 单位像素
                ->setOffsetX(170)
                //设置图片相对于左上角Y位置, 单位像素
                ->setOffsetY($imgY);
            //设置图显示状态
            $shape->getShadow()->setVisible(true)
                ->setDirection(0)
                ->setDistance(0);

            //设置一个文本框
            $shape = $currentSlide->createRichTextShape()
                ->setHeight(50)
                ->setWidth(600)
                ->setOffsetX(170)
                ->setOffsetY($textY);
            $shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER );
            $textRun = $shape->createTextRun($value['name']);
            $textRun->getFont()->setBold(true)
                ->setSize(14)
                ->setColor( new Color('FFE06B20' ) );
        }




        $uploadPath = DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'file_ppt' . DIRECTORY_SEPARATOR ;
        $savePath = public_path( $uploadPath );
        if ( !is_dir( $savePath ) ){
            make_dir($savePath) ;
        }
        //文件名称及路径
        $pptName = date('YmdHis').'.pptx';
        $odpName = date('YmdHis').'.odp';
        $savePptPath = $savePath . $pptName ;
        $saveOdpPath = $savePath . $odpName;

        $oWriterPPTX = IOFactory::createWriter($objPHPPresentation, 'PowerPoint2007');
        $oWriterPPTX->save($savePptPath);
        $oWriterODP = IOFactory::createWriter($objPHPPresentation, 'ODPresentation');
        $oWriterODP->save($saveOdpPath);
        ajax_return(200, array('ppt_file'=> $uploadPath . $pptName, 'odp_file'=>$uploadPath.$odpName));
    }

    /**
     * 处理ppt生成的内容
     * @param $params
     * @Auther Baiping
     * 2018/8/21 16:07
     */
    public function createImage($params)
    {
        $images = json_decode($params, true);
        $imageSavePath = public_path(DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'ppt_img'. DIRECTORY_SEPARATOR);
        make_dir($imageSavePath);

        $returnData = [];
        foreach ($images as $key => $value){
            $image = explode(',', $value['baseimage']);
            $imageName = 'ppt_'.date('YmdHis',time()).'_'.rand(1000, 9999). '.png';
            $savePath = $imageSavePath . DIRECTORY_SEPARATOR . $imageName;
           file_put_contents($savePath, base64_decode($image[1]));
           $returnData[] = [
               'name' => $value['name'],
               'imgsrc' => $savePath,
           ];
        }
        return $returnData;
    }

© 著作权归作者所有

共有 人打赏支持
webphp
粉丝 1
博文 92
码字总数 92338
作品 0
海淀
程序员
私信 提问
请问一个关于flexpaper展示office文件的问题

通过查看资料,目前了解的思路是:首先将office文件转化为pdf,然后通过swftools将pdf转化成swf格式的文件,再通过flexpaper展示; 我是这样想的:第一次访问office文件,将上面的流程走一遍...

skip
2013/10/10
178
2
PHP如何读取PPT?

最近做一个和FLASH有关的东西,其中就要用到在网站上看PPT就像百度,豆丁网那样可以直接在网站上读,在网上搜了半天没搜到,都是些什么安装个软件什么的,PHP网站放到空间上,谁能让你在哪装...

疯狂的流浪
2013/04/19
6.2K
10
【王佩丰】致学员---你和我的距离

其实每次发布视频,我都会很忐忑,因为不知道大家是否会喜欢,但每次都会收获一份又一份沉甸甸的称赞和感谢。每次你告诉我“学会了”、“工作变轻松了”、“升职加薪了”都会让我沉浸在莫大的...

xiaopei050
2018/06/27
0
0
Python+pandas+matplotlib数据分析与可视化案例(附源码)

问题描述:运行下面的程序,在当前文件夹中生成饭店营业额模拟数据文件data.csv 然后完成下面的任务: 1)使用pandas读取文件data.csv中的数据,创建DataFrame对象,并删除其中所有缺失值; ...

oh5w6hinug43jvrhhb
2017/12/12
0
0
智能媒体管理产品文档转换/预览功能介绍(2)---转换原理篇

一、导语 智能媒体管理产品 提供了 Cloud Native 架构的文档转换/预览服务,本文介绍其中的转换原理和使用方法。 二、转换原理 正常情况下,文档需要专门的应用才能够打开进行浏览,比如 PP...

luoqingchao
2018/04/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别

C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字...

天王盖地虎626
17分钟前
1
0
关于我这三年的架构历程(待完成)

从16年7月实习至今,快三年的开发经历中,经手了好几个项目。目前有幸作为一个项目的负责人,完成了一个项目的完全架构设计。因此想记录下这份架构设计中的点点面面。 总架构: 基于DNS的负载...

赵熠熠
18分钟前
0
0
springboot 使用 flyway 进行数据库版本管理

要在启动时自动运行Flyway数据库迁移,请将其添加 org.flywaydb:flyway-core到类路径中。 迁移是表单中的脚本V<VERSION>__<NAME>.sql(使用<VERSION>下划线分隔的版本,例如“1”或“2_1”)...

NotFound403
37分钟前
4
0
spring 5.1.5版本(二)

spring 5.1.5版本(一) spring 5.1.5版本(二) spring 5.1.5版本(三) 对象创建方式 方式一 applicationContext.xml <?xml version='1.0' encoding='UTF-8'?><beans xmlns="http://ww......

gwl_
39分钟前
0
0
CMake生成Mingw用的Make文件

CMake 在win下 默认会生成vc++的nmake用的make 当没安装时 就会报 -- Building for: NMake Makefiles -- The C compiler identification is unknown -- The CXX compiler identification is......

shzwork
56分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部