When you use Git-LFS, you're (strategically) lying to Git:
version https://git-lfs.github.com/spec/v1 oid sha256: blah blah~ size 186454154
This is all Git ever sees! That's what's in the repository. This is a replacement file and it is all Git knows. The LFS wrappers call this a pointer file.
You must keep lying, using the same strategy to insert the lies at the correct times:
I downloaded at the github preview page and It was the real pdf file. What is wrong with the file that I git pulled? what is the difference?
GitHub know how to lie properly to their own Git implementation. When you ask GitHub to look at the file, GitHub notice that their copy of the Git repository contain only a pointer file. They use the pointer file to go find the real file, with the real contents, on the (separate) LFS server.
To read your file, you, too, must make sure that you carefully lie to your Git software, so that all Git sees is the pointer file, yet you see the real file. You do this by installing Git-LFS—that's a necessary, but not always sufficient, step that you must always do first if it's not already done—and then making sure that your Git software has the strategic lies inserted, using git lfs clone for instance to make the initial clone.