在官方说明可以了解到,要通过 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.34610=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尺寸,打开后,在视图-显示/隐藏-标尺及网格-标尺