Laravel第三方库 之 PHPWord

2020-09-18  本文已影响0人  诺之林

本文的示例代码参考laravel-phpword

Startup

composer create-project laravel/laravel laravel-phpword --prefer-dist "5.5.*" && cd laravel-phpword
vim routes/web.php
<?php

Route::get('/', function () {
    return view('welcome');
});

Route::get('/word', 'WordController@word');
vim app/Http/Controllers/WordController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;

class WordController extends BaseController
{
    public function word()
    {
        return ['code' => 'word'];
    }
}
php artisan serve

curl localhost:8000/word
# {"code":"word"}

Word

composer require phpoffice/phpword

vim app/Http/Controllers/WordController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;

class WordController extends BaseController
{
    public function word()
    {
        $phpword = new PhpWord();
        $filename = 'Bidding Cerificate';

        $section = $phpword->addSection();
        $header = $section->addHeader();
        $header->addWatermark( base_path() . "/public/shuiyin.jpeg", array('marginTop' => 300, 'marginLeft' => 55));
        $phpword->addTitleStyle(1, ['bold' => true, 'color' => '000', 'size' => 17, 'name' => '宋体'], ['align' => 'center']);
        $section->addTitle($filename);
        $section->addText("编号:20200917002                                                                                           生成日期:2020-09-17");

        $styleTable = [
            'borderColor' => '000',
            'borderSize' => 6,
            'cellMargin' => 50,
        ];
        $cellRowSpan = array('vMerge' => 'restart', 'valign' => 'center');
        $cellRowContinue = array('vMerge' => 'continue');
        $cellColSpan = array('gridSpan' => 3, 'valign' => 'center');
        $cellHCentered = array('align' => 'center');
        $cellVCentered = array('valign' => 'center');

        $styleKey = array('name' => '宋体', 'size' => 14);
        $styleValue = array('name' => '宋体', 'size' => 14);

        $phpword->addTableStyle('tableStyle', $styleTable);
        $table = $section->addTable('tableStyle');

        for ($i = 0; $i < 15; $i++) {
            $table->addRow(500);
            $table->addCell(1200, $cellRowSpan)->addText('信息', $styleKey, $cellHCentered);
            $table->addCell(1400, $cellVCentered)->addText("姓名", $styleKey, $cellHCentered);
            $table->addCell(2000, $cellVCentered)->addText("小明", $styleValue, $cellHCentered);
            $table->addCell(1400, $cellVCentered)->addText("身份证号", $styleKey, $cellHCentered);
            $table->addCell(3100, $cellVCentered)->addText("283371201112103748", $styleValue, $cellHCentered);

            $table->addRow(500);
            $table->addCell(null, $cellRowContinue);
            $table->addCell(1400, $cellVCentered)->addText("地址", $styleKey, $cellHCentered);
            $table->addCell(7700, $cellColSpan)->addText("北京市", $styleValue, $cellHCentered);
        }

        $section->addText('注:以上信息正式有效');

        $writer = IOFactory::createWriter($phpword, 'Word2007');
        $writer->save("$filename.docx");
        $files = base_path() . "/public/$filename.docx";
        $name = basename($files);

        return response()->download($files, $name, $headers = ['Content-Type' => 'application/zip;charset=utf-8']);
    }
}
# 放置水印图片"public/shuiyin.jpeg"
php artisan serve

PDF

# 基于Ubuntu Server 1604
sudo apt install -y openjdk-8-jdk libxinerama1 libcairo2 libcups2 libsm6
# 从LibreOffice官网下载
tar xf LibreOffice_6.4.6_Linux_x86-64_deb.tar.gz

sudo dpkg -i LibreOffice_6.4.6.2_Linux_x86-64_deb/DEBS/*.deb

tar xf LibreOffice_6.4.6_Linux_x86-64_deb_langpack_zh-CN.tar.gz

sudo dpkg -i LibreOffice_6.4.6.2_Linux_x86-64_deb_langpack_zh-CN/DEBS/*.deb
sudo apt install -y ttf-mscorefonts-installer

# simsun.ttc是宋体字体
sudo cp simsun.ttc /usr/share/fonts

cd /usr/share/fonts

sudo chmod 644 simsun.ttc

sudo mkfontscale

sudo mkfontdir

sudo fc-cache -fv
libreoffice6.4 --invisible --convert-to pdf ~/Bidding\ Cerificate.docx --outdir ~
# 生成最终的PDF文件
上一篇下一篇

猜你喜欢

热点阅读