Я создал эту функцию в javascript, которая отправляет на сервер iframe:
function download(url, datas){
if(url && datas){
var inputs = '', value,
iframe = '<iframe name="iframeDownload" id="iframeDownload" width=0 height=0></iframe>';
$(iframe).appendTo('body');
datas.forEach(function(data){
name = encodeURI(data.get('name'));
value = encodeURI(data.get('value'));
inputs+='<input name="'+name+'" value="'+value+'"/>';
});
$('<form action="'+url+'" method="post" target="iframeDownload">'+inputs+'</form>').appendTo('body').submit().remove(); // .appendTo and remove() are needed for firefox
$(iframe).remove();
};
};
Я кодирую имя и значение ввода, чтобы иметь возможность отправлять данные.На моем сервере я использую php, поэтому для его декодирования вам понадобится: rawurldecode.Если вы определили имя входных данных как «fileName» и «file», вы можете написать это:
$fileName = rawurldecode($_POST['fileName']);
$file = rawurldecode($_POST['file']);
После этого для принудительной загрузки вам необходимо отправить заголовок исправлений.Я использую эту функцию:
function download($filename, $file) {
header('Content-disposition: attachment; filename="'.$filename.'"');
header('Content-Type: application/force-download');
header('Content-Length: '. filesize($file));
readfile($file);
}
Если вам не нужно отправлять файл из javascript, потому что он создан на стороне сервера, просто добавьте путь к вашему файлу в функцию загрузки.
Если вы используете PHP, вы можете использовать fpdf для генерации pdf.