You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中点击下载按钮无法生成并下载CoCard PDF文件求助

Laravel中CoCard PDF无法下载的代码问题排查

核心问题及缺失点:

  • 未引入jsPDF库:代码中使用new jspdf()生成PDF,但页面未加载jsPDF脚本,浏览器无法识别该构造函数,导致PDF生成逻辑完全无法执行。
  • 异步函数执行顺序错误:generateUrlQrCode是异步函数,但调用时未等待其完成就执行getCoCard,此时url变量可能还未赋值,会导致二维码图片添加失败,甚至中断整个流程。
  • Blade语法使用错误:在Blade模板中使用原生PHP的<?= ?>输出变量,应改用Blade的{{ }}(普通文本)或{!! !!}(用于HTML/URL等无需转义的内容),否则图片路径会被转义,无法正确加载。
  • DOM元素获取时机过早:getQRCode直接在脚本顶部调用,此时#qrcode元素可能还未渲染完成,会导致二维码生成失败。

修复后的coCard.blade.php代码示例:

<x-home-layout menu="CoCard" title="CoCard">

    <div class="font-poppins lg:px-40 md:px-30 sm:px-16 px-3 lg:pt-32 md:pt-28 pt-24 mb-20">

        <div class="grid justify-items-center">
            <div class="text-base-blue-400 mb-5 text-center">
                <h1 class="font-extrabold xl:text-4xl lg:text-3xl md:text-2xl sm:text-xl text-xl leading-normal">
                    Menyiapkan Co Card ...
                </h1>
                <p class="text-base mt-4 italic">Harap tunggu sebentar ...</p>
                <div id="qrcode" class="hidden"></div>
            </div>
            <div class="xl:w-45 lg:w-32 md:w-24 sm:w-20 w-16 h-2 bg-base-yellow-400"></div>
        </div>
    </div>

    @push('script-bottom')
    <!-- 补充引入jsPDF库 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
    <script src="{{ asset('js/jquery-3.6.0.slim.min.js')}}" integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI=" crossorigin="anonymous"></script>
    <script src="{{ asset('js/qrcode.min.js') }}"></script>
    <script type="text/javascript">
        // 等待DOM加载完成后生成二维码
        document.addEventListener("DOMContentLoaded", function() {
            new QRCode(document.getElementById("qrcode"), {
                text: "{{ $username }}",
            });
            // 二维码生成后再执行PDF生成流程
            initCoCardGeneration();
        });

        let qrBlobUrl;
        async function generateQrBlobUrl() {
            const qrcodeImg = document.getElementById("qrcode").firstElementChild;
            const blob = await new Promise(resolve => qrcodeImg.toBlob(resolve));
            qrBlobUrl = URL.createObjectURL(blob);
        }

        async function getCoCard() {
            // 确保二维码Blob URL已生成
            await generateQrBlobUrl();
            
            // jsPDF UMD版本需通过window.jspdf访问
            const { jsPDF } = window.jspdf;
            const doc = new jsPDF('l', 'cm', 'a4', true);
            const width = 18;
            const height = 13;

            // 使用Blade语法输出图片路径
            doc.addImage("{!! $imgDepan !!}", "PNG", 0, 0, width, height, '', 'FAST');
            doc.addImage("{!! $desainDepan !!}", "PNG", 0, 0, width, height, '', 'FAST');
            doc.addImage(qrBlobUrl, "PNG", 6.5, 4.33, 5, 5, '', 'FAST');
            doc.addPage('l', 'cm', 'a4', true);
            doc.addImage("{!! $imgBelakang !!}", "PNG", 0, 0, width, height, '', 'FAST');
            doc.addImage("{!! $desainBelakang !!}", "PNG", 0, 0, width, height, '', 'FAST');
            doc.save("{{ $nimb }}_CoCard.pdf");

            setTimeout(() => {
                window.close();
            }, 1000);
        }

        async function initCoCardGeneration() {
            // 等待二维码生成并获取Blob URL后再生成PDF
            await getCoCard();
        }
    </script>
    @endpush
</x-home-layout>

内容的提问来源于stack exchange,提问作者imalia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:47:48