Interesting problem. The only thing I can think of is a snippet on the landing page that used something like the following (untested):
<?php
$bookURL = ’path_to_the_book_file’;
// logging code here
$modx->sendRedirect($modx->makeURL($bookURL));
?>
The problem is that there’s really no way to know if the user then actually downloads the book or aborts the download. And search bots (and spam bots) are going to follow that link and trigger the snippet without doing the download.
There must be some way of doing it or none of the pay-to-download sites would work.
You might look at using the FileDownload snippet:
http://modxcms.com/extras/package/?package=146
and the FileDownload Plugin:
http://modxcms.com/extras/package/?package=148
and putting your logging code in the plugin.
I’ve never used the plugin, but it appears to detect aborted downloads.