Corrupted PDFs attached to email

Hi, the invoices and quotes attached to emails sent to clients are all corrupt. I’ve tried removing the company logo, and setting the template to plain but to no avail. PDFs downloaded directly from the InvoiceNinja app are fine. When I click on the Email Invoice button, there is a long delay (1 minute) before the popup window disappears and the system is responsive again.

phantomjs version 2.1.1
invoiceninja 4.5.9, self hosted.
No errors in laravel-error.bak

Any suggestions?

Kind regards,

Does the test link work on Settings > Email Settings? That’s the only way to test the headless PDF generation in the app.

All I can suggest is to review the points listed here:

https://invoice-ninja.readthedocs.io/en/latest/configure.html#phantomjs

Hi Hillel,

The test link tries to open the generated pdf in a new tab but fails with “Failed to PDF Document”.

I’ve been over all the PhantomJS troubleshooting points. It mentions a command line test script but i’m not sure what “link in the error” it’s talking about. There is no link in the error on my system.

Kind regards,

Gareth

Hmm… yeah, the link was removed from the error logs for privacy reasons.

Have you tried using PhatomJS cloud?

I haven’t tried PhantomJS cloud, I’d rather use the local one. Is there any way of seeing the output? There are no errors in laravel-error.log.

I’ve tried the phantomjs cloud but I get the same result when running the test on the email settings page - long delay then “Failed to load PDF document” error.

How do you debug this to see what’s going on?

There should be an error in storage/logs/laravel-error.log

That said, the error won’t provide many details. Here’s what a link would look like to use the test script.

https:///view/<invitation_key>?phantomjs=true&phantomjs_secret=

Right, I’ve used the test script with the URL in the error and I get a wall of text and then the final line says :

TypeError: Attempting to change the setter of an unconfigurable property.

The URL is http://192.168.2.113/ninja/public/view/armynjnhvqb20zswblrckt03wcdx8fcx?phantomjs=true&phantomjs_secret=

Have you tried testing the feature with a blank company?

I’ve tried with minimal company details (name only set) and minimal client details (name and email set) but it fails with the error

production.ERROR: PhantomJS - Invalid response http://192.168.2.113/ninja/public/view/armynjnhvqb20zswblrckt03wcdx8fcx?phantomjs=true&phantomjs_secret=: {"context":"PHP","user_id":1,"account_id":1,"user_name":"xxx xxx","method":"GET","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36","locale":"en","ip":"192.168.2.101","count":2,"is_console":"no","is_api":"no","db_server":"mysql","url":"test_headless"} []

in laravel-error.log.

If I use the error url on the test script I get the output :


\n{
    "body": "",
    "bodySize": 125276,
    "contentType": "text/html; charset=UTF-8",
    "headers": [
        {
            "name": "Date",
            "value": "Mon, 18 Mar 2019 15:55:44 GMT"
        },
        {
            "name": "Server",
            "value": "Apache/2.4.29 (Ubuntu)"
        },
        {
            "name": "Cache-Control",
            "value": "no-cache, private"
        },
        {
            "name": "Set-Cookie",
            "value": "XSRF-TOKEN=eyJpdiI6InptMXlXbzEyeitGSnJuaXFPdXhmNmc9PSIsInZhbHVlIjoiWEFmYUZMZEh4ZWZLOHdna1Q5NFE4UFwvNDdaaWZ0UlRjaVk4dldrZ2FLaUhGWmhVRHROZEpSS1wveHlLb1JRZmFBU0RwOGRrenE0VUZjOHljSCt4MmNJUT09IiwibWFjIjoiYzQyN2ZlZjE1YzM4YWVlNDYxZTcwMDg1NTkxMTc5NmJjNDhlN2MzNWJmZWViODliN2EwMWFkOTQwNTJjM2IyOSJ9; expires=Mon, 18-Mar-2019 23:55:45 GMT; Max-Age=28800; path=/\nninja_session=eyJpdiI6ImJmNDZYTmNYekdaY0ppM3FBMEdBNlE9PSIsInZhbHVlIjoiSTZjNFRQQ1MxQjJwdDZFVkJIRWdBbWVIcFlhZmx0ZVAxZG9jZVZzaHB0bU4xbHh6MldXWWZya3JISTBPNzFyQjB4UGVKdnVTdWJkdlY3MFd5S2hwZFE9PSIsIm1hYyI6IjNlOTVhNjUyODYyMzk2NWRlMmViNWNiODhiYTUyYTIxMmQzNjk3OTEwZmQ3ZDMzNzAyOWYwNmJiMWI2MjI0ZDAifQ%3D%3D; path=/; httponly"
        },
        {
            "name": "Vary",
            "value": "Accept-Encoding"
        },
        {
            "name": "Content-Encoding",
            "value": "gzip"
        },
        {
            "name": "Keep-Alive",
            "value": "timeout=5, max=100"
        },
        {
            "name": "Connection",
            "value": "Keep-Alive"
        },
        {
            "name": "Transfer-Encoding",
            "value": "chunked"
        },
        {
            "name": "Content-Type",
            "value": "text/html; charset=UTF-8"
        }
    ],
    "id": 1,
    "redirectURL": null,
    "stage": "start",
    "status": 200,
    "statusText": "OK",
    "time": "2019-03-18T15:55:45.144Z",
    "url": "http://192.168.2.113/ninja/public/view/armynjnhvqb20zswblrckt03wcdx8fcx?phantomjs=true&phantomjs_secret=",
    "content": "<head></head><body>data:application/pdf;base64,JVBERi0xLjMKJf////8KNyAwIG9iago8PAovVHlwZSAvRXh0R1N0YXRlCi9jYSAxCj4+CmVuZG9iagoxMCAwIG9iago8PAovVHlwZSAvRXh0R1N0YXRlCi9DQSAxCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGlhQm94IFswIDAgNTk1LjI4IDg0MS44OV0KL0NvbnRlbnRzIDQgMCBSCi9SZXNvdXJjZXMgNSAwIFIKPj4KZW5kb2JqCjUgMCBvYmoKPDwKL1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldCi9FeHRHU3RhdGUgPDwKL0dzMSA3IDAgUgovR3MyIDEwIDAgUgo+PgovWE9iamVjdCA8PAovSTEgMyAwIFIKPj4KL0ZvbnQgPDwKL0YxIDggMCBSCi9GMiA5IDAgUgo+Pgo+PgplbmRvYmoKMTEgMCBvYmoKPDwKL1Byb2R1Y2VyIChwZGZtYWtlKQovQ3JlYXRvciAocGRmbWFrZSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE5MDMxODE1NTU0NVopCj4+CmVuZG9iagoxMyAwIG9iago8PAovVHlwZSAvRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9XTVhTSkgrUm9ib3RvLU1lZGl1bQovRmxhZ3MgNAovRm9udEJCb3ggWy03MzIuNDIxODc1IC0yNzAuOTk2MDk0IDExOTIuODcxMDk0IDEwNDcuODUxNTYzXQovSXRhbGljQW5nbGUgMAovQXNjZW50IDkyNy43MzQzNzUKL0Rlc2NlbnQgLTI0NC4xNDA2MjUKL0NhcEhlaWdodCA3MTAuOTM3NQovWEhlaWdodCA1MjguMzIwMzEzCi9TdGVtViAwCi9Gb250RmlsZTIgMTIgMCBSCj4+CmVuZG9iagoxNCAwIG9iago8PAovVHlwZSAvRm9udAovU3VidHlwZSAvQ0lERm9udFR5cGUyCi9CYXNlRm9udCAvV01YU0pIK1JvYm90by1NZWRpdW0KL0NJRFN5c3RlbUluZm8gPDwKL1JlZ2lzdHJ5IChBZG9iZSkKL09yZGVyaW5nIChJZGVudGl0eSkKL1N1cHBsZW1lbnQgMAo+PgovRm9udERlc2NyaXB0b3IgMTMgMCBSCi9XIFswIFs1MTAgNjE4LjY1MjM0NCA1MjkuMjk2ODc1IDU2Ni40MDYyNSAzMjYuNjYwMTU2IDI1OS4yNzczNDQgMjQ5LjAyMzQzOCA4NzUuOTc2NTYzIDU0My45NDUzMTMgMzU2LjQ0NTMxMyA1NjguMzU5Mzc1IDU2OC4zNTkzNzUgNjQwLjYyNSAyNTkuMjc3MzQ0IDI4Ny41OTc2NTYgODY5LjYyODkwNiA2NzIuODUxNTYzIDUyMC4wMTk1MzEgNTI0LjkwMjM0NCA1NjYuNDA2MjUgNTY2LjQwNjI1IDY4MS42NDA2MjUgNjk1LjMxMjUgNTY2LjQwNjI1IDUwNi44MzU5MzggNTQ4LjgyODEyNSA2MTQuMjU3ODEzIDU2Ni40MDYyNSA1NjYuNDA2MjUgNTc4LjYxMzI4MSA3MTAuOTM3NV1dCj4+CmVuZG9iago4IDAgb2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMAovQmFzZUZvbnQgL1dNWFNKSCtSb2JvdG8tTWVkaXVtCi9FbmNvZGluZyAvSWRlbnRpdHktSAovRGVzY2VuZGFudEZvbnRzIFsxNCAwIFJdCi9Ub1VuaWNvZGUgMTUgMCBSCj4+CmVuZG9iagoxNyAwIG9iago8PAovVHlwZSAvRm9udERlc2NyaXB0b3IKL0ZvbnROYW1lIC9OT05YVUUrUm9ib3RvLVJlZ3VsYXIKL0ZsYWdzIDQKL0ZvbnRCQm94IFstNjgxLjE1MjM0NCAtMjcwLjk5NjA5NCAxMTgxLjY0MDYyNSAxMDQ3Ljg1MTU2M10KL0l0YWxpY0FuZ2xlIDAKL0FzY2VudCA5MjcuNzM0Mzc1Ci9EZXNjZW50IC0yNDQuMTQwNjI1Ci9DYXBIZWlnaHQgNzEwLjkzNzUKL1hIZWlnaHQgNTI4LjMyMDMxMwovU3RlbVYgMAovRm9udEZpbGUyIDE2IDAgUgo+PgplbmRvYmoKMTggMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL0NJREZvbnRUeXBlMgovQmFzZUZvbnQgL05PTlhVRStSb2JvdG8tUmVndWxhcgovQ0lEU3lzdGVtSW5mbyA8PAovUmVnaXN0cnkgKEFkb2JlKQovT3JkZXJpbmcgKElkZW50aXR5KQovU3VwcGxlbWVudCAwCj4+Ci9Gb250RGVzY3JpcHRvciAxNyAwIFIKL1cgWzAgWzUwNyAyNDcuNTU4NTk0IDI4MC43NjE3MTkgNzEyLjg5MDYyNSA2NDUuMDE5NTMxIDY5NS4zMTI1IDYzOS42NDg0MzggNTgzLjAwNzgxMyA1NjYuNDA2MjUgNTAwLjk3NjU2MyA1NjYuNDA2MjUgMjQ4LjA0Njg3NSA1MjguODA4NTk0IDUyNi44NTU0NjkgNTY2LjQwNjI1IDg3NS45NzY1NjMgNTY2LjQwNjI1IDM0OC42MzI4MTMgNjc2LjI2OTUzMSA1NDcuODUxNTYzIDMxOC4zNTkzNzUgNTYxLjUyMzQzOCA1NjEuNTIzNDM4IDI3NS44Nzg5MDYgODc2LjQ2NDg0NCA1NjEuNTIzNDM4IDU2MS41MjM0MzggNTYxLjUyMzQzOCA2MzYuMjMwNDY5IDI0OC4wNDY4NzUgNTgxLjA1NDY4OCA1NjEuNTIzNDM4IDI2My4xODM1OTQgNTY2LjQwNjI1IDU2Ni40MDYyNSA4OTcuOTQ5MjE5IDUyMC45OTYwOTQgNTYxLjUyMzQzOCA1NjEuNTIzNDM4IDYxMC44Mzk4NDQgNjM3LjIwNzAzMSA1NjYuNDA2MjUgNTk2LjY3OTY4OF1dCj4+CmVuZG9iago5IDAgb2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9UeXBlMAovQmFzZUZvbnQgL05PTlhVRStSb2JvdG8tUmVndWxhcgovRW5jb2RpbmcgL0lkZW50aXR5LUgKL0Rlc2NlbmRhbnRGb250cyBbMTggMCBSXQovVG9Vbmljb2RlIDE5IDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMSAwIFIKPj4KZW5kb2JqCjEgMCBvYmoKPDwKL1R5cGUgL1BhZ2VzCi9Db3VudCAxCi9LaWRzIFs2IDAgUl0KPj4KZW5kb2JqCjE1IDAgb2JqCjw8Ci9MZW5ndGggMjk5Ci9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+CnN0cmVhbQp4nF1STWuEMBC9+yvmuD0srt9bEKFsLx76QW1PpQdNJhKoMcR48N83ZtLd0oB5vJl54+Ql8aV9bJW0EL+amXVoQUjF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</body>",
    "console": []
}TypeError: Attempting to change the setter of an unconfigurable property.
TypeError: Attempting to change the setter of an unconfigurable property.


Thanks, that’s useful. It’s interesting that you’re both getting valid data back and an error.

Try changing this line to if (true) { to see if it helps.

https://github.com/invoiceninja/invoiceninja/blob/aefe133ba02f28d9fd585ae731765ad5b7cdffe3/app/Libraries/CurlUtils.php#L64

I’ve just done a clean install of the system - minimal company and client data. No change in the pdf attachments except that now there is no error in laravel-error.log so I’ve no URL to use in the phantomjs test script.

How are the downloaded pdfs generated? I can download and view them fine. Is phantomjs used in this instance?

PhantomJS is only used to generate the PDF on the server. ie, to attach the PDF to emails.

I’ve set up an account with phantomjscloud and put my api key in the Invoice Ninja .env file. Running the test in email settings gives the same result - failed to open PDF document. No errors in laravel-error.log.

How do I debug what’s going on? I tried turning on debug in the system settings but still nothing turns up in laravel-error.log

Not sure I follow, you posted the error above: “Attempting to change the setter…”

Did you try making the code change?

As I said, I did a clean install of the application but now there are no errors going to laravel-error.log even though the pdfs are still corrupt. Without the error in laravel-error.log, I have no URL to run the test script with and so no “Attempting to change the setter…”

I’ve made the change to the code you suggested but the pdfs are still corrupt.

For the test script you should just need to replace the invitation_key in the original URL you used.

Ok, I see how it works now. I still TypeError: Attempting to change the setter of an unconfigurable property. error after running the test script.

Is there a way of testing pahtomjscloud in a similar manner? It seems odd that both are are producing corrupted pdfs.

Not that I’m aware of.

Maybe the advice here will help…

https://www.invoiceninja.com/forums/topic/local-phantomjs-pdfs-not-attaching-phantomjs-cloud-works/#post-17256

Thanks Hillel, I have ended up doing what that link suggested, downloaded the pre-built phantomjs binary and replaced the Ubuntu one. The new phantomjs was failing with a Qt plugin missing error. After some digging I found that the solution is to add the environment variable QT_QPA_PLATFORM=’’. Not sure why that works but it does.

Attached pdfs are now readable.

Thanks for all your help.