spatie / laravel-pdf

Create PDF files in Laravel apps
https://spatie.be/docs/laravel-pdf
MIT License
684 stars 53 forks source link

[Bug]: Generation fails when configuring a margin with high values #56

Closed lairg99 closed 8 months ago

lairg99 commented 8 months ago

What happened?

When I set margins(300, 200, 200, 200, 'cm') the following error messages will be produced. Without margin everything works fine.

The command "PATH=$PATH:/usr/local/bin:/opt/homebrew/bin NODE_PATH=`npm root -g` node '/Users/sam/code/laravel-pdf/vendor/spatie/browsershot/src/../bin/browser.cjs' '{"url":"file:\/\/\/var\/tmp\/1185728813-0979418001706015855\/index.html","action":"pdf","options":{"args":[],"viewport":{"width":800,"height":600},"displayHeaderFooter":false,"margin":{"top":"300cm","right":"200cm","bottom":"200cm","left":"200cm"},"printBackground":true}}'" failed. Exit Code: 1(General error) Working directory: /Users/sam/code/laravel-pdf/public Output: ================ Error Output: ================  Puppeteer old Headless deprecation warning: In the near future `headless: true` will default to the new Headless mode for Chrome instead of the old Headless implementation. For more information, please see https://developer.chrome.com/articles/new-headless/. Consider opting in early by passing `headless: "new"` to `puppeteer.launch()` If you encounter any bugs, please report them to https://github.com/puppeteer/puppeteer/issues/new/choose. ProtocolError: Protocol error (Page.printToPDF): invalid print parameters: content area is empty at <instance_members_initializer> (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:86:14) at new Callback (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:90:16) at CallbackRegistry.create (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/common/CallbackRegistry.js:22:26) at Connection._rawSend (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Connection.js:80:26) at CdpCDPSession.send (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/CDPSession.js:66:33) at CdpPage.createPDFStream (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Page.js:823:63) at CdpPage.pdf (/Users/sam/code/laravel-pdf/node_modules/puppeteer-core/lib/cjs/puppeteer/cdp/Page.js:850:37) at getOutput (/Users/sam/code/laravel-pdf/vendor/spatie/browsershot/bin/browser.cjs:50:43) at callChrome (/Users/sam/code/laravel-pdf/vendor/spatie/browsershot/bin/browser.cjs:385:27) at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

How to reproduce the bug

class InvoiceController extends Controller
{
    public function __invoke() {
        return pdf()
            ->view('pdf.invoice')
            ->margins(300, 200, 200, 200, 'cm'); // <- without margin it works
    }
}
// invoice.blade.php
Test

Package Version

1.1.2

PHP Version

8.2.12

Laravel Version

10.41.0

Which operating systems does with happen with?

No response

Notes

No response

freekmurze commented 8 months ago

This is probably caused by the high values you pass. Try with lower values of a smaller metric.

lairg99 commented 8 months ago

Thanks for the quick response. You're right. But shouldn't' it be the same output?

->margins(300, 200, 200, 200, 'mm') // <- doesn't work
->margins(3, 2, 2, 2, 'cm') // <- works

In my first example, I wrote cm by mistake. Of course I meant mm.

freekmurze commented 8 months ago

It seems that this is caused by something inside of Chromium. I'd appreciate a PR that throw an exception earlier when too big values are passed.