Как сгенерировать документацию из большого html-документа?

Есть сервис создания блок-схем:
- сервер (asp.net) хранит и отдает информацию о контейнерах с блоками;
- клиент (браузер: html,js, svg) получает информацию с сервера и рендерит это всё в текст, блоки и таблицы.

Отрисовать один контейнер с блоками, текстом и таблицами не проблема. Также не проблема всё это распечатать в PDF.

Но теперь появилась задача сгенерировать документацию по всему проекту.

Браузер смог получить всю информацию с сервера, даже смог это всё отрисовать. Но для печати в PDF ему сил не хватает. Вернее, не хватает памяти. Как можно поступить?

Как можно сгенерировать большую документацию, если рендер написан на html/js/svg?

Как вариант, может рендер впихнуть в электрон и запускать генератор документации на сервере? Может так хватит памяти? Или есть какие-то другие библиотеки которые могут html-страницу в оффлайн-документ превращать?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
@GLeBaTi Автор вопроса
Решил тем, что теперь не отрисовываю всё сразу. Делаю так:
0) let pdf = new jsPDF('p', 'pt', 'letter');
1) Рисую 1 блок в DIV (html + svg)
2) Перевожу его в изображение с помощью html2canvas
3) Изображение добавляют в PDF: pdf.addPage, pdf.addImage
4) Очищаю этот DIV и повторяю работу со следующим блоком

В конце вызываю pdf.save

Скорость такая себе, но проблем с нехваткой памяти больше нет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
Готового решения не посоветую, но очень простое направление могу дать.

Пишите примитивное webbrowser(c#)/chromium/webkit приложение - т.е. на любом языке программирования подключаете библиотеку для отображения веб страницы (они есть везде, майкрософтовские .net на интернет эксплорере, на mono будет что то на основе firefox, на java я делал на webkit), причем все на столько просто что проект это пара шевелений мышкой в построителе формы или примитивный пример из документации на 10 строчек.

Затем, добавляете простейший код, который будет открывать вашу страницу и на onload делать скриншот контрола, делать скрол и снова, пока документ не закончится. Из собранных скриншотов вы можете собрать pdf простейшей командой imagemagic.

Бонусом, вы можете, изменяя размер контрола (а он может уходить за границы видимой части окна) до любого, например таким образом когда то давно я делал приложение которое скринило гугловские карты 8к на 8к разрешения, открывая нужное место в окне соответствующего размера (оперативная память при этом на создание png/tiff/jpeg требовалось много).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы