Наиболее часто используемый подход для создания отчета в формате PDF (JavaScript, node.js)?
Может ли кто-нибудь, кто работал над чем-то подобным, описать общий процесс? Я сейчас очень смущен. По отчету я имею в виду визуально привлекательный документ с логотипом, таблицами, верхними колонтитулами, а данные будут извлекаться динамически.
Подходы, которые я рассматривал, следующие:
-
Используйте библиотеку на стороне сервера (node.js module), которая генерирует PDF файл. Отправьте строковое представление как ответ с помощью Content-Type: application/pdf
.
Проблема: я выбрал PDFKit, но он не работает, и контент не появляется вообще. Он использует PDF 1.3, который является старым.
-
Создать PDF на стороне клиента.
Проблема: самая популярная библиотека, похоже, является jsPDF, но она не очень способна создавать сложные документы.
-
Запишите шаблон в исходный код PDF и заполните данные на стороне сервера.
Проблема: кодировка является странной, например, если я просто делаю doc.text("1")
, много неузнаваемых символов появляются только для строки "1". Я очень смущен этим.
Наконец, будет очень полезно, если кто-нибудь предоставит ссылку, которая поможет мне понять кодировку! Это смущает меня.
Весь опыт с подобными задачами очень ценится!
Ответы
Ответ 1
Я лично этого не делал, но первое, что я попробую, будет:
- На стороне сервера динамически создайте соответствующий HTML-документ и CSS
- Используйте phantomJS для рендеринга этого документа
- Сообщите phantomJS для преобразования этого документа в PDF, сохраненного в временном файле
- Отправьте PDF обратно как ответ HTTP, введя файл temp PDF в тело ответа
- Удалить временный файл
Если вы боретесь с типом контента, контентом и т.д., вам не стоит беспокоиться об этом, если у вас есть действительный pdf файл на диске и просто записывайте эти данные в ответ HTTP. С правильными заголовками вы можете попросить браузер либо отобразить PDF, либо обработать его как файл, который будет сохранен в качестве загрузки.
Ответ 2
Как член команды jsreport, я бы дал ему шанс.
jsreport платформа предоставляет несколько способов создания отчетов в формате PDF. Наиболее распространенным из них является преобразование html в pdf с использованием phantomjs. jsreport также будет компилировать и отображать шаблоны handlebars или jsrender html, если он указан, он может вставлять изображения, добавлять верхний/нижний колонтитул, запускать пользовательские javascripts и т.д.
Вы можете сыграть с примером "Hello World Phantom Pdf" и посмотреть параметры, которые у вас есть.
https://playground.jsreport.net
Когда вы закончите играть, вы можете использовать jsreport онлайн или скачать и установить сервер jsreport для Ваша компания. Затем вы готовы называть его REST API и создавать отчеты.
Больше к вашему вопросу
- jsreport предоставит правильный тип контента в ответе для pdf или html. Вы можете просто позволить браузеру отображать результат
- данные могут быть отправлены в jsreport api или возвращены пользовательским script
Ответ 3
Я не уверен, какой самый общий подход, но лично мне нравится создавать HTML-шаблон, заполнять его в моем серверном коде, а затем использовать wkhtmltopdf, чтобы преобразовать HTML в PDF. Если вы используете .NET, вы должны проверить WkHtmlToXSharp (это оболочка .NET для wkhtmltopdf.)