0%

dompdf生成指定尺寸PDF

在官方说明可以了解到,要通过 setPaper 来设置尺寸。
https://github.com/dompdf/dompdf#quick-start

但文档并没有指出如何设置指定宽高的PDF,那么看下 setPaper 这个方法的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vendor/dompdf/dompdf/src/Dompdf.php

/**
* Sets the paper size & orientation
*
* @param string|array $size 'letter', 'legal', 'A4', etc. {@link Dompdf\Adapter\CPDF::$PAPER_SIZES}
* @param string $orientation 'portrait' or 'landscape'
* @return $this
*/
public function setPaper($size, $orientation = "portrait")
{
$this->paperSize = $size;
$this->paperOrientation = $orientation;
return $this;
}

除了接受A4等内置的大小,还接受数组,进一步查看 Dompdf\Adapter\CPDF::$PAPER_SIZES 的定义:

也就是说 setPaper 的第一个参数可以通过传入数组指定精确尺寸。
这里是1英寸=72points
用A4的尺寸来计算

“a4” => [0, 0, 595.28, 841.89],

A4宽21cm

那么1cm = 595.28/21 = 28.346 points

宽6cm 长10cm就是
28.3466=170.076
28.346
10=283.46

即:

1
$pdf->setPaper(array(0, 0, 170.076, 283.46), 'landscape');

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$pdf = PDF::loadView('user/card', compact('data', 'type'));
$customPaper = array(0, 0, 170.076, 283.46); // H5cm W10cm

$pdf->setPaper($customPaper, 'landscape');

$pdf->getDomPDF()->setHttpContext(
stream_context_create([
'ssl' => [
'allow_self_signed' => TRUE,
'verify_peer' => FALSE,
'verify_peer_name' => FALSE,
]
])
);
return $pdf->stream('card.pdf');

可以用 Adobe Acrobat 打开生成的PDF来确认cm尺寸,打开后,在视图-显示/隐藏-标尺及网格-标尺

欢迎关注我的其它发布渠道