Наиболее часто используемый подход для создания отчета в формате 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.)