mPDF调用中的参数设置

hykeda1小时前服务器1

一、参数总览

options 数组的顶层参数如下:

参数类型必填说明
typestring水印类型,只能是 'text' 或 'image'

根据 type 的不同,后续参数分两组:

文字水印(type = 'text'

参数类型默认值说明
textstring水印文字内容,支持 \n 换行或 <br> 标签
alphafloat0.2透明度,范围 0~1,值越小越淡
fontstring'GB'字体名,中文建议用 'GB' 或 'sun-exta'
angleint45旋转角度,单位度,如 0 水平、45 倾斜

图片水印(type = 'image'

参数类型默认值说明
imagestring图片路径,支持相对 public 目录或绝对路径
alphafloat0.3透明度,范围 0~1
sizestring/array'D'水印尺寸,见下方说明
positionarray[0, 0]水印位置 [x, y],单位 mm

二、完整调用示例

1. 文字水印(单行)

php
复制
下载
$options = [
    'type'  => 'text',        // 必填:指定文字水印
    'text'  => '机密文件',     // 必填:水印文字
    'alpha' => 0.2,           // 可选:透明度,默认 0.2
    'font'  => 'GB',          // 可选:字体,默认 'GB'(中文用)
    'angle' => 45,            // 可选:旋转角度,默认 45 度];

2. 文字水印(多行)

php
复制
下载
$options = [
    'type'  => 'text',
    'text'  => "机密文件\n严禁外传",  // 双引号中 \n 才会换行
    // 或使用 HTML:
    // 'text' => '机密文件<br>严禁外传',
    'alpha' => 0.2,
    'font'  => 'GB',
    'angle' => 45,];

3. 文字水印(不旋转,水平居中)

php
复制
下载
$options = [
    'type'  => 'text',
    'text'  => '内部资料',
    'alpha' => 0.15,   // 更淡
    'font'  => 'GB',
    'angle' => 0,      // 不旋转];

4. 图片水印(默认尺寸,左上角)

php
复制
下载
$options = [
    'type'     => 'image',                      // 必填:指定图片水印
    'image'    => '/static/watermark.png',      // 必填:相对 public 的路径
    'alpha'    => 0.3,                          // 可选:透明度,默认 0.3
    'size'     => 'D',                          // 可选:默认尺寸
    'position' => [0, 0],                       // 可选:左上角];

5. 图片水印(铺满整页)

php
复制
下载
$options = [
    'type'     => 'image',
    'image'    => '/static/watermark.png',
    'alpha'    => 0.2,
    'size'     => 'F',          // F = Fill,铺满整页
    'position' => [0, 0],];

6. 图片水印(自定义尺寸,页面居中)

php
复制
下载
$options = [
    'type'     => 'image',
    'image'    => '/static/watermark.png',
    'alpha'    => 0.3,
    'size'     => [50, 50],     // 宽 50mm,高 50mm
    'position' => [-25, -25],   // 负数表示向左、向上偏移,实现居中];

7. 图片水印(适应页面)

php
复制
下载
$options = [
    'type'     => 'image',
    'image'    => '/static/watermark.png',
    'alpha'    => 0.3,
    'size'     => 'P',          // P = Page,缩放到适应页面
    'position' => [0, 0],];

三、参数详解

type

  • 必填,只能是 'text' 或 'image'

  • 决定使用哪一组参数,另一组参数会被忽略。

  • 如果传了其他值,PdfService 会抛出 ValidateException

text

  • 文字水印内容。

  • 多行写法

    • "第一行\n第二行" —— 双引号中的 \n 会换行;

    • '第一行<br>第二行' —— HTML 标签也可以,mPDF 内部会解析。

  • 单引号中的 \n 是字面量,不会换行,请务必用双引号。

alpha(文字和图片共用)

  • 透明度,范围 0 ~ 1

  • 0 = 完全透明(看不见),1 = 完全不透明。

  • 文字默认 0.2,图片默认 0.3

  • 建议文字水印用 0.1 ~ 0.3,图片水印用 0.2 ~ 0.4,避免遮住正文。

font

  • 仅文字水印使用。

  • mPDF 内置字体名,中文水印推荐:

    • 'GB':常用中文字体,兼容性好;

    • 'sun-exta' / 'sun-extb':支持扩展字符(含 SIP);

    • 'dejavusans':Unicode 通用字体,但中文可能显示方框。

  • 如果水印中文显示方框,先改 'GB',不行再换 'sun-exta'

angle

  • 仅文字水印使用,单位为度。

  • 0 = 水平,45 = 逆时针倾斜 45°(默认),90 = 垂直。

  • 需要 mPDF 7.0+ 才支持 watermarkAngle,你用的 8.2.7 完全支持。

image

  • 仅图片水印使用。

  • 支持两种路径:

    • 相对 public 目录'/static/watermark.png'

    • 绝对路径'/var/www/html/public/static/watermark.png'

  • 建议用相对 public 的写法,方便迁移。

  • 推荐 PNG 透明背景图,JPG 也可以但效果略差。

size

  • 仅图片水印使用,控制水印尺寸:

    • 'D'Default,图片原始尺寸(默认值);

    • 'P'Page,缩放到适应整页;

    • 'F'Fill,拉伸铺满整页;

    • [width, height]:自定义尺寸,单位 mm,如 [50, 50]

  • 需要铺满整页做背景时用 'F';需要精确控制大小时用数组。

position

  • 仅图片水印使用,水印位置 [x, y]

    • 单位 mm

    • [0, 0]:左上角;

    • 负数表示向上、向左偏移,如 [-25, -25]

    • 想要页面居中,可用负数偏移图片尺寸的一半。

  • 注意:mPDF 的坐标原点在左上角,y 轴向下为正。


四、完整集成示例(PdfService 调用)

php
复制
下载
<?phpnamespace app\controller;use app\service\PdfService;use think\response\Json;class PdfController{
    public function addWatermark(): Json
    {
        $pdfPath = 'storage/pdf/original.pdf';

        // ===== 文字水印示例 =====
        $textOptions = [
            'type'  => 'text',
            'text'  => "机密文件\n严禁外传",
            'alpha' => 0.2,
            'font'  => 'GB',
            'angle' => 45,
        ];

        // ===== 图片水印示例 =====
        $imageOptions = [
            'type'     => 'image',
            'image'    => '/static/watermark.png',
            'alpha'    => 0.3,
            'size'     => 'D',
            'position' => [0, 0],
        ];

        // 根据业务选择一种
        $options = $textOptions;   // 改成 $imageOptions 即切换为图片水印

        try {
            /** @var PdfService $service */
            $service = app(PdfService::class);
            $result  = $service->addWatermark($pdfPath, $options);

            return json([
                'code' => 0,
                'msg'  => '水印添加成功',
                'data' => ['url' => $result['url']],
            ]);
        } catch (\Throwable $e) {
            return json(['code' => 1, 'msg' => $e->getMessage()]);
        }
    }}

五、对照速查表

场景type关键参数
单行中文水印texttext='机密文件'font='GB'
两行中文水印texttext="机密\n外传"
水平文字水印textangle=0
极淡水印text / imagealpha=0.1
原始大小图片imagesize='D'
铺满整页图片imagesize='F'
自定义尺寸图片imagesize=[50,50]
图片居中imageposition=[-25,-25](配合 50×50 尺寸)

六、注意事项

  1. \n 必须用双引号"a\nb" 才换行,'a\nb' 不换行。

  2. 文字水印颜色固定:mPDF 内置文字水印只能黑色半透明,需要彩色请改用图片水印(用 GD 生成彩色 PNG)。

  3. 图片水印路径:推荐相对 public 目录,如 /static/watermark.pngPdfService 会自动补全为绝对路径。

  4. 图片水印尺寸单位是 mm[50, 50] 表示 50mm × 50mm,不是像素。

  5. position 支持负数:负数表示向左、向上偏移,常用于居中。

  6. 两种水印不会同时生效type 决定使用哪一组参数,另一组被忽略,符合你“二选一”的需求。

按上面这份说明配置 options 即可覆盖绝大多数水印场景。如果某个具体效果(比如多行行距、彩色水印)需要更精细控制,再走“GD 生成 PNG + 图片水印”的方案。


相关文章

linux添加开机启动

Linux设置服务开机自动启动的方式有好多种,这里介绍一下通过chkconfig命令添加脚本为开机自动启动的方法。 1. 编写脚本autostart.sh(这里以开机启动redis服务为...

AB压力测试工具安装及测试

AB压力测试工具安装及测试

ab全称为:apache bench ab是Apache超文本传输协议(HTTP)的性能测试工具。其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个...

centos安装jre

1、首先下载jre 前往甲骨文官网http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.h...

Linux 添加开机自启动脚本

Linux 添加开机自启动脚本

Linux 设置服务开机自动启动的方式有好多种,这里介绍一下通过 chkconfig 命令添加脚本为开机自动启动的方法。1. 编写脚本autostart.sh(这里以开机启动redis服务为例),脚本...

git抓去远程仓库报错can’t be established.

个人在码云(git一样)上面创建了仓库,通过本地的git拉取远程仓库到本地报错 The authenticity of host ‘github.com (13.229.188.59)’ can’t...

安装中文CentOS 6.5的详细步骤及要注意点

安装中文CentOS 6.5的详细步骤及要注意点

   CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat En...

发表评论    

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