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

laravel通过模板html生成word文档

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


因为公司项目需要,内部的管理系统有一个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分表model映射的思路

预先估计会出现大数据量并且访问频繁的表,将其分为若干个表这种预估大差不差的,论坛里面发表帖子的表,时间长了这张表肯定很大,几十万,几百万都有可能。 聊天室里面信息表,几十个人在一起一聊一个晚上,时间长...

通过supervisor管理laravel的queue队列

通过supervisor管理laravel的queue队列

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

利用workerman实现webrtc实时音视频通话

利用workerman实现webrtc实时音视频通话

实现原理利用workerman的websocket实现实时消息传递。webrtc自带p2p功能,利用STUN中继服务器实现webrtc实时音视频看看我们的前端文件,只是一个单页面<html>...

lavel对接个推别名推送

lavel对接个推别名推送

新项目采用uniapp开发,需要用到推送功能,之前接过极光,其中的一些坑都踩过了,但是unipush用的是个推的推送,那就只有重写踩坑了。composer  require&nbs...

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依赖:overtrue/wechat首先安装一下easywechat依赖composer require overtrue/wechat:...

发表评论

访客

看不清,换一张

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