parallax / jsPDF

Client-side JavaScript PDF generation for everyone.
https://parall.ax/products/jspdf
MIT License
29.21k stars 4.67k forks source link

Problem with PNG Compression in Adobe Acrobat #862

Closed MrRio closed 6 years ago

MrRio commented 8 years ago

I just tried the newest build dist min and getting an error when opening a document in Adobe Acrobat. "There was an error processing a page. There was a problem reading this document (110)." Ironically, opening the PDF within Chrome works fine, but opening it with Adobe causes the error. Any ideas?

See https://github.com/MrRio/jsPDF/pull/852#issuecomment-249667116

MrRio commented 8 years ago

CC @buenjybar

Pe46dro commented 8 years ago

Hi, what is the timeframe for this issue?

Edit: I found the fix, i will make a pull request tonight.

getPredictorFromCompression = function getPredictorFromCompression(compression) {
        var predictor;
        switch (compression) {
            case jsPDFAPI.image_compression.FAST:
                predictor = 11;
                break;

            case jsPDFAPI.image_compression.MEDIUM:
                predictor = 13;
                break;

            case jsPDFAPI.image_compression.SLOW:
                predictor = 14;
                break;

            default:
                predictor = 12;
                break;
        }
        return predictor;
    },
nnylip commented 8 years ago

Is this fixed? I am having a similar issue with adobe acrobat reader dc version 2015.017.20053 with the attached file. Thanks. test.pdf

MrRio commented 8 years ago

@nnylip Can you send me the image you have embedded? I'll write up a test case!

MrRio commented 8 years ago

I've created a test case, it renders fine in Firefox and Chrome, but not Acrobat DC

https://github.com/MrRio/jsPDF/blob/bugfix/png/tests/readers/reference/broken-png-2.pdf

Steps to reproduce:

npm run local-test # run this once
rm ./tests/readers/reference/broken-png-2.pdf
./node_modules/.bin/karma run -- --grep="render transparent PNG"
open -a Adobe\ Acrobat\ Reader\ DC ./tests/readers/reference/broken-png-2.pdf
nnylip commented 8 years ago

The test program that created pdf is attached (image is changed as client might object), it uses htm2canvas, also thanks so much for help - Lou

On 10/10/2016 05:00 PM, James Hall wrote:

@nnylip https://github.com/nnylip Can you send me the image embedded? I'll write up a test case!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/MrRio/jsPDF/issues/862#issuecomment-252744827, or mute the thread https://github.com/notifications/unsubscribe-auth/APNHCmKoNyeaOsu3D39CQ73Wwfvog2qXks5qyqdUgaJpZM4KJaaE.

MrRio commented 8 years ago

Hey @diegocr @jamesbrobb any idea what the issue here might be? Renders ok in Chrome.

screen shot 2016-10-11 at 03 14 26
nnylip commented 8 years ago

Anything happening with this?

MrRio commented 8 years ago

Currently looking into it!

buenjybar commented 8 years ago

Did you check the latest code ? it seems that it was fixed with #801 & #871
if you replace " <</Predictor undefined " with " <</Predictor 13 "

ido172 commented 7 years ago

This issue started happening to me after updating from version 1.2.61 to 1.3.2. PDF is opened in Chrome but not in Adobe Acrobat Reader, gives 110 error. Rolled back to version 1.2.61 solved it for now.

edisonramaa commented 7 years ago

So how can I get this fixed? I am having the same problem @ido172 ?

ido172 commented 7 years ago

@edisonramaa i'm also waiting for a fix. i just Installed version 1.2.61 instead of 1.3.2. The error doesn't appear to exist there

Pe46dro commented 7 years ago

Try to download the library from here not by release of NPM, i just used it and it don't create any type of problem with Adobe. The NPM package and the release download have an old version of the library before my PR (#871).

Pe46dro commented 7 years ago

@MrRio should make a new release to fix the problem

havenchyk commented 7 years ago

@MrRio we're waiting for release, can we help you with this?

nahomtefera commented 7 years ago

Thank you @Pe46dro!

stefanaerts commented 7 years ago

i have overwriten the dist folder of the npm files in node_modules with the ones from https://github.com/MrRio/jsPDF/archive/master.zip then it worked. Thanks @Pe46dro I have one more question, it works on chrome,firefox,but not as expected on safari. On safari it opens the blob in a new tab in the browser with wrong layout, it takes full with and wraps my rows.Is that normal on safari,is there a workaround? This is how it looks in safari: image

And this is how it should look(like it does with adobe reader opening the file on chrome or firefox). image

buenjybar commented 7 years ago

@stefanaerts This might be an issue from Safari PDF Reader. The one to trust is the Adobe PDF Reader. if no error is raised at the opening of the file this means the PDF is correct. I will recommend to check with this online tool : https://www.pdf-online.com/osa/validate.aspx if the result is not correct it will be nice if you could share your pdf to dig into the issue.

stefanaerts commented 7 years ago

it's ok,safari works fine.

codeReadyy commented 7 years ago

Hi All, I am facing the similar issue. I have created a Plunkr to demonstrate this issue. I have tried with both the version 1.2.61 and 1.3.2, but both version showing some different behavior. When using 1.2.61, jsPDF not able to render html text content in IE only(Probably due to a image). When using 1.3.2, Adobe is throwing 110 error.

@buenjybar any suggestions.

codeReadyy commented 7 years ago

Thank you @Pe46dro !! Waiting for release.

robpolak commented 7 years ago

any update on this issue?

itsamayo commented 7 years ago

@codeReadyy @robpolak If you're using the latest CDN (1.3.2) you can do the following as a fix.

  1. Create your own local jspdf.js file, copy the contents of the CDN into said file.
  2. Find the getPredictorFromCompression function (line 8342)
  3. Replace function with the below:
getPredictorFromCompression = function getPredictorFromCompression(compression) {
        var predictor;
        switch (compression) {
            case jsPDFAPI.image_compression.FAST:
                predictor = 11;
                break;
            case jsPDFAPI.image_compression.MEDIUM:
                predictor = 13;
                break;
            case jsPDFAPI.image_compression.SLOW:
                predictor = 14;
                break;
            default:
                predictor = 12;
                break;
        }
        return predictor;
    },
  1. Replace CDN reference in index with new jspdf.js file
  2. Viola
Ant248 commented 7 years ago

Hey still getting the same issue with he latest download of jspdf, looks like that code has been implemented but still receiving error 101 on acrobat reader :(

itsamayo commented 7 years ago

@Ant248 The current release is missing the default in the switch statement. Use the solution I posted above to fix until the release is updated

Ant248 commented 7 years ago

Thanks! Odd i have this in my release:

getPredictorFromCompression = function getPredictorFromCompression(compression) { var predictor; switch (compression) { case jsPDFAPI.image_compression.FAST: predictor = 11; break;

        case jsPDFAPI.image_compression.MEDIUM:
            predictor = 13;
            break;

        case jsPDFAPI.image_compression.SLOW:
            predictor = 14;
            break;

        default:
            predictor = 12;
            break;
    }
    return predictor;

Seems to be what you have posted?

cxrod commented 7 years ago

@Ant248 The current release (1.3.3) still have this issue! I just follow @AshKetchumza instructions with previous version (1.3.2) and it works perfectly!

chamsmarena commented 7 years ago

The 110 error comes when you add PNG image on the document

buenjybar commented 7 years ago

Note: version 1.3.4 doesn't have this PNG compression issue.

brgoggin commented 7 years ago

Indeed, version 1.3.4 seems to not have this issue.

Uzlopak commented 6 years ago

Then it is officially fixed. :)