پکیج Screenshot: گرفتن عکس و PDF از ویوهای لاراول
خلاصهٔ کاملتر
Screenshot پکیجیه که Steve Bauman ساخته و از HTML، ویوهای Blade و صفحههای وب عکس PNG و JPEG یا فایل PDF درست میکنه. نکتهی اصلیش اینه که درایور پیشفرضش خودش کروم رو از داخل PHP اجرا و کنترل میکنه، یعنی دیگه لازم نیست Node.js یا Puppeteer نصب کنی. خروجی رو هم میتونی لوکال ذخیره کنی یا رو هر دیسک فایلسیستم لاراول بفرستی.
ورودی رو با html()، view() یا url() میدی. مثال مقاله ساختن پیشنمایش یه گواهی پایان دورهست:
Screenshot::view('certificates.show', data: ['certificate' => $certificate])
->size(width: 1440, height: 900)
->jpeg(quality: 85)
->store(path: "certificates/{$certificate->id}/preview.jpg", disk: 's3');فرمت پیشفرض PNG هست و برای عوض کردنش باید jpeg() یا pdf() صدا بزنی، فقط عوض کردن پسوند فایل کاری نمیکنه. JavaScript هم پیشفرض خاموشه و با javascript() روشن میشه. پکیج منتظر رویداد load صفحه میمونه، پس اگه بعدش دیتا یا نمودار لود بشه ممکنه تو عکس نیاد. برای ویوها هم باید آدرس assetها کامل باشه یا از base href استفاده کنی.
با size() اندازهی viewport (یعنی پنجرهای که کروم صفحه رو توش میچینه) رو تعیین میکنی. پیشفرض کل صفحه گرفته میشه، با سقف عرض ۲۰۴۸ و ارتفاع ۱۰۰۰۰ پیکسل؛ viewport() فقط بخش قابلدیدن رو میگیره. با element() و یه CSS selector هم میشه فقط یه المنت خاص مثل #certificate رو گرفت. PDFها پیشفرض A4 عمودی با حاشیهی ۱۰ میلیمتری هستن و preferCssPageSize() به @page تو CSS اولویت میده.
اگه هر بار مستقیم save() یا store() رو صدا بزنی، یه capture جدید انجام میشه. ولی با capture() نتیجه رو نگه میداری و همون بایتها رو چند جا ذخیره میکنی. این پکیج لاراول 12 با PHP 8.2 به بالا و لاراول 13 با PHP 8.3 به بالا رو ساپورت میکنه. دستور نصبش اگه کروم نباشه Chrome for Testing رو دانلود میکنه، که اکستنشن ZIP رو لازم داره. با SCREENSHOT_CHROME_PATH هم میشه کروم موجود رو معرفی کرد.
برای رندر از راه دور، Gotenberg نسخهی 8.38 به بالا پشتیبانی میشه. با کروم لوکال، workerهایی که روی یه هاست و با یه کاربر سیستمعامل اجرا میشن میتونن یه مرورگر رو شریک بشن، که البته یعنی کوکی و storage هم مشترکه. تو تستها هم Screenshot::fake() بدون بالا آوردن کروم captureها رو ثبت میکنه.
نکات کلیدی:
- کروم رو مستقیم از PHP کنترل میکنه، بدون Node.js و Puppeteer
- خروجی PNG (پیشفرض)، JPEG و PDF؛ فرمت با متد عوض میشه نه با پسوند
- سقف پیشفرض عکس کامل صفحه: عرض ۲۰۴۸ و ارتفاع ۱۰۰۰۰ پیکسل
- PDF پیشفرض A4 عمودی با حاشیهی ۱۰ میلیمتر
- ساپورت لاراول 12 (PHP 8.2+) و لاراول 13 (PHP 8.3+)
- پشتیبانی از Gotenberg 8.38 به بالا برای رندر از راه دور




