ボタンやリンクをクリックするとVisualforceページでつくったCSVをダウンロードする処理の話です。処理としてはクリック時に対象のページにリンクすると実装できます。ただし次のようにPageReferenceで遷移するとダウンロードと一緒に空白のページが表示されてしまいます。
処理
実行画面
元の画面に戻るためにブラウザの戻るボタンを押さなきゃいけないので使いづらいし、カッコ悪いですね。この問題はApexのPageReferenceでなくJavaScriptのlocation.hrefで遷移するようにすると回避できます。
処理
実行画面
Google Chromeで確認していますが、他のブラウザでも大丈夫だと思います。window.openとかで頑張る必要もないのでお手軽です。