Просмотр PDF в Rocket.Chat

По долгу работы пришлось столкнуться с opensource продуктом RocketChat (RC). Это приложение имеет серверную часть, основанную на платформе Meteor, https://github.com/RocketChat/Rocket.Chat, десктоп представление реализованное в Electron, https://github.com/RocketChat/Rocket.Chat.Electron, и, помимо всего прочего, реализации для android и iOS. В заметке рассматриваемое решение затрагивает лишь первые два аспекта данного продукта, а именно основная часть Сервер (Meteor) и Клиент (настольное приложение Electron).

В RC был реализован (причём криво, примечание - в новых версиях уже пофиксили, вывод только первой страницы pdf) просмотр pdf за счёт рендеринга первой страницы в canvas тег на клиенте, что нагружало клиента и не давало нормального просмотра. По умолчанию поведение загруженного pdf в сообщении, при клике на ссылку с названием документа вызывало скачивание файла pdf на компьютер.

Решение, которое последует ниже, открывает окно и выводит файл на просмотр с возможностью скачать, распечатать, просмотреть все страницы, поменять масштаб или просто закрыть окно, что гораздо удобнее поведения по умолчанию. В браузере файл будет загружен в модальное окно, в тег iframe, где будет вызван pdf обзор с помощью встроенной в браузер поддержки pdf (если таковая имеется, но во всех современных браузерах - полет нормальный). В настольном приложении будет создано окно, которое имеет поддержу pdf просмотра с помощью специальной библиотеки, так как по умолчанию в Electron, точнее под его капотом, библиотеке рендеринга из Chromium нет этой поддержки, в отличие от полноценного браузера, чтобы там где не писали в интернетах (например здесь, типа лёгкое решение stackoverflow, которое как оказалось не работает). Сейчас до сих пор актуальна проблема pdf просмотра в самом фреймворке Electron, например здесь https://github.com/electron/electron/issues/11065. Но в инфраструктуре RC, как в принципе и любой другой, в контексте Electron, проблема оказывается решаемой.

issue и связанные с ним PR на github.



Похожие заметки:

Звонки в каналах Rocket.Chat

Звуковое сопровождение, возникающее после создания видеоконференции jitsi, в канале rocket chat у всех участников, которые в нем состоят

Открыть здесь

120

JWT аутентификация для jitsi в Rocket.Chat

Реализация аутентификации по стандарту JWT в приложении Rocket Chat для встроенного в него провайдера видеоконференций Jitsi

Открыть здесь

120


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии