当前位置:首页 > PHP > 正文内容

laravel通过模板html生成word文档

陈杰2年前 (2020-12-01)PHP2513


因为公司项目需要,内部的管理系统有一个php实时查询数据库,根据内容来生成word文档

排版没有什么需求,实现原理是查询数据库,然后用laravel自带的模板引擎,生成一个html网页,然后修改网页的response的header头,让浏览器下载为word格式。

代码如下

image.png

public function highAnswerDowload(Request $request)
{
       $id   = (int)$request->input('id');
       $data = LibraryTopicModel::with(['library:id,name', 'answer' => function ($query) {
           return $query->where('status', 1);
       }, 'answer.member:id,name,phone'])->find($id);

       if (!isset($data))
           return self::errorMsg('没有找到该题目');
       $html     = view('word', ['data' => $data]);
       $wordname = $data['library']['name'] . date('Y-m-d') . "待审核高分答案.docx";
       ob_start();
       echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
   xmlns:w="urn:schemas-microsoft-com:office:word"
   xmlns="http://www.w3.org/TR/REC-html40">';

       @header('Content-type:application/word');
       header('Content-Disposition: attachment; filename=' . $wordname . '');
       @readfile($wordname);
       ob_flush();//每次执行前刷新缓存
       flush();
       return $html;
}


模板文件

<html lang="zh-cn">
<head>
    <style type="text/css">
        p {
            text-indent: 2em;
            font-size: 12pt;
        }
    </style>
</head>
<body>
<center><h1>{{$data['library']['name']}}</h1></center>
<b>
    {{$data['title']}} -- 题目id:{{$data['id']}}
</b>
<br>
<br>
@foreach($data['answer'] as $v)
    <div>
        <div style="font-weight: bold">
            <div>昵称:{{$v['member']['name']}} &nbsp;&nbsp;&nbsp; id:{{$v['member_id']}} &nbsp;&nbsp;&nbsp;
                手机:{{$v['member']['phone']}} </div>
            <div>答案id:{{$v['id']}} &nbsp;&nbsp;&nbsp; 日期:{{date('Y-m-d H:i',$v['create_time'])}}</div>
        </div>
        <?php $content = explode("\n", $v['content']); ?>
        @foreach($content as $j)
            <p>
                {{$j}}
            </p>
        @endforeach
        ——————————————————————————————————
        <br>
    </div>
@endforeach
</body>
</html>


扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由何烦过虎溪发布,如需转载请注明出处。

转载请注明出处:http://95shouyou.com/?id=14

标签: php生成word
分享给朋友:

相关文章

laravel的Observer观察者模式模型事件实战

laravel的orm特别好用,特别是observer观察者模式,可以在不更改原有业务代码的情况下做到切入编程,有点类似于我们之前常用的钩子函数。下面就是我们深入observer观察者模式的实战代码现...

Lumen框架报错Cannot declare class Event, because the name is already in use

Lumen框架报错Cannot declare class Event, because the name is already in use

Lumen框架报错信息Cannot declare class Event, because the name is already in use(1/1) ErrorExceptionCa...

laravel个推设置别名

laravel个推设置别名

上一篇文章我们说过了怎么用laravel接个推的官方sdk实现个推推送和厂商离线推送,因为我们要用到别名推送,而前端又用到的是unipush,在前端去绑定别名的难度肯定要大一点,所以就有一个思路就是,...

php对接七牛云短信验证码实战

短信验证码登录的用处非常的大,登录,注册,修改密码,安全相关的啥都可以干。选定的七牛云短信是因为存储也是用的七牛云,七牛的sdk都加载进来了,也懒得去换其他的厂家了。下面上代码:Controller层...

通过supervisor管理laravel的queue队列

通过supervisor管理laravel的queue队列

配置文件[program:queue]command=php artisan queue:work redis --tries=3 --delay=3directory=/www/wwwroot/sh...

php对接支付宝转账到第三方接口实战

公司项目有一个用户钱包系统,用户创作的内容可以收到游客的打赏,当然就需要提现的接口了。最终选定的是支付宝转账接口,公司代收账户直接打款给用户绑定的支付宝账号,再也不用人工手动打款了。上代码准备好工具,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。