php 为什么我生成的QR码在laravel中使用dompdf显示在PDF中时会失真?

nnt7mjpx  于 2023-04-19  发布在  PHP
关注(0)|答案(1)|浏览(121)

我试图在我生成的PDF中显示生成的QR码,但由于某种原因,它真的扭曲了。即使我在元素中指定尺寸或作为CSS类,它也不匹配这些尺寸。
我的整个PDF页面:

<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <title>Kaart</title>
        <style>
            body{
                margin: 0;
                white-space: nowrap;
            }
            .card{
                border:1px solid black;
                height: 1102px;
                position: relative;
                width: 1575px;
            }

            .card .left{
                width: 50%;
                border-right: 1px solid black;
                height: 100%;
                position: relative;
                display: inline-block;
            }

            .card .right{
                width: 50%;
                height: 100%;
                position: relative;
                display: inline-block;
            }

            .card .right .text{
                position: relative;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                text-align: center;
                white-space: normal;
                width: 80%;
            }

            .card .left img{
                width: 100%;
                height: 100%;
            }

            .text .top{
                font-size: 50px;
            }

            .text .bottom{
                font-size: 30px;
            }

        </style>
    </head>
    <body>
    @foreach($cards as $key => $card)
        <div class="card">
            <div class="left">
                <img src="{{ $card['card_image'] }}">
            </div>
            <div class="right">
                <div class="text">
                    <div class="top">
                        <p>{!! nl2br($card['message']) !!}</p>
                    </div>
                    <div class="bottom">
                        <p>Scan de QR-code of ga naar {{ $card['donate_url'] }} om te doneren aan een goed doel naar keuze.</p>
                        <div class="qr-wrap">
                            <img class="qr" src="data:image/png;base64,{{ base64_encode($card['qr_code']) }}" />
                        </div>
                        <p>Waarde: <b>{{ $card['wallet_amount'] }}</b></p>
                    </div>
                </div>
            </div>
        </div>
        @if(($key + 1) !== $total)
            <div class="page-break"></div>
        @endif
    @endforeach
    </body>
</html>

在我的控制器中,我将qr数据指定为:'qr_code' => QrCode::size(300)->generate(route('donate', ['hash' => $hash], true)),
然后像这样加载视图:

$customPaper = array(0,0,626.50,1181.25);
$file = $pdf->loadView('admin.order.card', $data)->setPaper($customPaper, 'landscape')->setOptions(['dpi' => '200']);

我试过直接在blade文件中生成QR,但效果是一样的,我也试过直接在image标签中添加width和height参数,但没有效果。
它看起来是这样的:

我也试着把它添加到一个 Package 器中:

.qr-wrap{
                position: relative;
                width: 300px;
                height: 300px;
            }
            .qr{
                height: 100%;
                width: 100%;
                /*width: 3000px;*/
                /*height: 100px;*/
            }
ccrfmcuu

ccrfmcuu1#

你使用什么QR码生成器?也许有第二个尺寸选项?
这对我很有效:

<img alt="QR Code" src="data:image/png;base64, {!!
      base64_encode(\SimpleSoftwareIO\QrCode\Facades\QrCode::format('png')
      ->size(60)->generate($qr_code)) !!} ">

你也可以尝试设置背景颜色。这有助于调试不同的HTML元素。

相关问题