How to require form submission before template display?
Not terribly familiar with Sprout Forms, but it looks like you could gate the download with a query string parameter, like in Sprout Forms' Thank you Page example

Example:

Add this to your form:

&lt;input type="hidden" name="redirect" value="/DOWNLOAD_PAGE?submitted=true"&gt;

and then in your download link template:

{% if craft.request.getParam('submitted') == 'true' %}
    DOWNLOAD_LINK
{% else %}
    Please submit the form here LINK_TO_YOUR_FORM to access this whitepaper.
{% endif %}