Ну я бы сделал так.
1. По нажатию на кнопку "Cохранить", на сервер отправляются настройки.
2. Сервер на основе настроек формирует нужный html
3. Открываем например безголовым хромом этот html и сохраняем как pdf
В данный момент на проекте для этих нужд использую api для nodejs
Puppeteer