В base64 у тебя байты, так? так.
Декодируешь, получаешь сам файл через new Blob() (за инфой в mdn или другую доку)
Рисуешь в доме ссылку, туда запиливаешь аттрибут download - все прекрасно скачивается, по логике - можно отдать браузеру пдф и он его просмотрит-откроет в новой вкладке. Можно поиграть с ифреймами. Копать в эту сторону. Делал недавно подобное, но в ие11 и ниже никак не хотело работать, сделал так, что браузер напрямую получает ссылку на байты с octet-stream и сам начинает скачивание.