Я использую AngularJS в стеке MEAN на основе генератора DaftMonk (https://github.com/DaftMonk/generator-angular-fullstack). Я довольно новичок во всем, что угодно: Angular/JS/Node (и stackoverflow, поэтому, пожалуйста, не стесняйтесь указывать, нужно ли мне переформулировать мой вопрос!).Экспорт отчета в формате PDF с диаграммами из Node/Express/Angular/PhantomJS
Я собираюсь создать многостраничный PDF-отчет для пользователя с Угловой страницы, содержащей шесть графиков, изображений и текста.
Существует ряд вопросов о stackoverflow и Google, которые относятся к потенциальным решениям для этого, но, проверив их исчерпывающе, они не помогают с тем, что мне нужно достичь (или я не понимаю, как я могу их использовать в мой сценарий ..).
В настоящее время, когда пользователь переходит на страницу отчета, HTTP-запрос отправляется в узел/экспресс с помощью углового контроллера, который проверяет идентификатор пользователя/группы пользователей, запрашивает базу данных, анализирует данные и отправляет их назад к браузеру для рендеринга в графики (в настоящее время используется угловой график и флот).
Пользователь выбирает тип графика и может выбрать максимум шесть графиков для отображения из возможного списка из 20+. Эти шесть графиков - это то, что нужно экспортировать в отчет PDF (с другой информацией). Мне нужно сделать это (в разумных пределах) максимально совместимым с браузером (по крайней мере, IE8 +), хотя моим текущим решением является IE10 + с отключением PDF для старых браузеров с использованием Modernizr.
С помощью stackoverflow и Google возможные решения включают использование PhantomJS в узле для захвата экрана или с помощью клиентского средства визуализации PDF (например, jsPDF). Из этого я чувствую, что PhantomJS обеспечит максимальную гибкость/совместимость с браузером. Кроме того, мне нужно создать несколько разных отчетов в зависимости от роли пользователя, поэтому не нужно использовать весь код для создания отчетов в браузере. Но я полностью зациклен на том, как получить доступ к «тому, что видит клиент», используя стек MEAN. PhantomJS необходимо будет эффективно войти в систему как клиент и иметь доступ к шести вариантам для графиков, которые сделал клиент.
Из моего исследования использование PhantomJS потребует создания html-страницы, как-то передающей то, что видит клиент/выбор данных/диаграмм, а затем захват этого для рендеринга в PDF, перед отправкой обратно в браузер. Один из способов - передать требуемую информацию в Express (с помощью POST?), А затем отобразить страницу html на стороне сервера, на которую можно было бы указать PhantomJS, но я не знаю, как это сделать (или, если возможно). Другая возможность - сохранить данные отчета клиента, выбор и т. Д. В базе данных и задать задачу для рендеринга PDF-файла и отправить его обратно в браузер, когда это будет сделано, но я еще не знаю, как этого добиться.
Я прочитал о файлах cookie в PhantomJS или перейдя по странице входа с помощью кода, но это, по-видимому, является громоздким способом достижения этого. Можно ли создать html-файл на стороне сервера, с помощью chart.js (или другой графической библиотеки), введенной (и угловой?), И всех необходимых пользовательских данных/диаграмм для PhantomJS для рендеринга в PDF? Я думаю, что в некоторых случаях мне нужно иметь возможность использовать PDF-генератор, графическую библиотеку и т. Д. На стороне сервера для создания PDF-файла.
Любой совет (с возможными примерами кода) о том, как достичь этого, будет оценен по достоинству.