Теперь ONLYOFFICE может всё: добавляем плагины в редакторы документов

    Что если бы вы могли добавить в редакторы документов любые функции, какие вам хочется? Теперь вы можете: в редакторах ONLYOFFICE появилась возможность подключения плагинов. Несколько примеров мы написали сами — все их можно посмотреть в нашем открытом репозитории на GitHub'e. Теперь ваш ход — напишите то, чего вам не хватало.

    Подробности далее.



    Зачем мы это сделали?


    Итак, мы решили дать разработчикам возможность добавлять нужную (но не относящуюся напрямую к форматам OOXML) функциональность в редакторы ONLYOFFICE.

    Всё началось с одной компании, в которой очень хотели написать собственную кнопку, чтобы генерить контент и вставлять получившиеся данные в редактор. Окей, подумали мы, в этом есть смысл. Есть функциональность, которая нужна только определенным людям и больше никому. Мы не можем сделать всё для всех, но мы можем дать возможность подрубить всё, что нужно. Поэтому вот вам API для работы с редактором, первая версия.

    Так и появились плагины.

    В них можно использовать код, который мы сами не сможем брать из-за лицензионных ограничений. Мы делаем коммерческий продукт и продаем его, нельзя просто взять и (*в этом моменте автор текста прерывается, чтобы отмахнуться от всплывшего из глубин подсознания призрака Шона Бина) нельзя просто взять и использовать любой код из интернета. То есть, нам нельзя. А вам можно. Те вещи, которые мы по объективным причинам не можем, наши пользователи могут.

    Типы плагинов


    Мы делим их на три типа:

    Визуальные. Когда мы пользуемся таким расширением редактора, у нас открывается окно и рисуется определенный интерфейс. Например, Главред, который просили наши пиарщики.

    Визуальный плагин может менять что-то в самом документе, а может и ничего не менять. Главред ничего не меняет — он лишь подсвечивает определенную часть текста (штампы, лишние слова и пр).

    Можно написать плагин, который ищет по Google.Картинкам и вставляет понравившуюся в текст. Этот плагин меняет документ.

    Невизуальные. Например, простая кнопка, при нажатии которой производятся манипуляции с документом. Простейший пример такого плагина: расширение, которое при нажатии кнопки добавляет в ваш документ слова Hello World!

    (function (window, undefined) {
        window.Asc.plugin.init = function () {
            var sScript = 'var oDocument = Api.GetDocument();';
            sScript += 'var oParagraph = Api.CreateParagraph();';
            sScript += 'oParagraph.AddText(\'Hello world!\');';
            sScript += 'oDocument.InsertContent([oParagraph]);';
            window.Asc.plugin.info.recalculate = true;
            this.executeCommand("close", sScript);
        };
        window.Asc.plugin.button = function (id) {
        };
    })(window, undefined);
    

    Вы также можете добавить в свой документ, например, свою собственную кнопку Bold. Или кнопку, при нажатии которой генерится отчет.

    OLE-объекты. Это наши любимые плагины. И единственный способ для стороннего разработчика «влезать» в форматную часть документа, т.е. записывать свою информацию не только во время работы редактора, но и непосредственно в файл. Это, например, наши шахматы.

    К какому решению подключаются плагины и как это делается?


    На самом деле, к любому.

    Для серверной версии

    Плагины нужно прописать в конфиги редакторов — они автоматически появятся у всех пользователей портала.

    Для десктопа

    Архивируем плагины, меняем расширение файла на .plugin и бросаем на главную страницу. Они сразу подхватятся, обещаем. Кроме того, если вы подключите приложение к порталу с включенными плагинами, они автоматически будут работать и в десктопе.

    Для веб-версии

    В ближайшее время мы запилим что-то вроде магазина или галереи, куда будут добавляться (после модерации) плагины от пользователей.

    Пока «магазина» нет, плагины можно добавлять через расширение в браузере. Этот путь пока работает только для Chrome. У нас на GitHub'e есть папка c говорящим названием chrome_extension_example: это и есть образец, как сделать по нашим плагинам расширение в Chrome.

    Здесь, кстати, недлинное видео, о том, что могут наши плагины и как их добавить в существующую инсталляцию (десктоп, сервер).



    Как написать свой плагин?


    Здесь мы хотели написать подробную инструкцию, как это сделать. Но вспомнили, что у нас уже есть хорошая и подробная документация, где структура плагина описана во всех необходимых деталях. Так что всё здесь. Вы также можете изучить устройство дополнений, которые мы собственноручно выложили на GitHub.

    На этом, пожалуй, всё. И да — мы надеемся со временем увидеть буйство плагинов, созданное сообществом. Во всяком случае, очень любопытно, какие функции допишут наши пользователи.

    ONLYOFFICE

    54,08

    Компания

    Поделиться публикацией
    Комментарии 49
      +3
      Круто, спасибо, полезная нововведения!
        0

        Ребят, а вы писали где-нибудь про то, как архитектурно у вас сделано всё?

          +2
          такого огромного и всеобъемлющего, чтобы про «всё» не было. а что именно вам интересно?
            0

            Про облачное решение было бы интересно почитать.
            Как построено, как справляетесь с нагрузкой, какие инструменты/технологии используете.
            Также было бы интересно какой объём кода и насколько большие команды и как, грубо говоря, боретесь со сложностью разработки.

      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Потыкал — вроде работают ссылки. Конкретный пример есть?
          0
          Как дела с безопасностью?
            0
            Вы просто пишете js код. Можно сравнить с браузерным расширением.
            –4
            Что мне делать, если я категорически не хочу писать на JS?
              +7
              не писать плагины к веб приложениям)
                0
                @evocatus
                разработка на всём для всего от Verilog до Python

                Ну ну…
                  0
                  Чтобы написать подробнее не хватило места. Не на всём, конечно.
                0
                К сожалению, ods-очку мою ваш редактор прожевать не смог…

                Да и 2,5 гига оперативы, которые потребовались ему в попытке открыть 3 мб файл немного удивили.
                Все таки опенофис всегда в 500 мб укладывался для данного файла.
                  0
                  Если можно, скиньте файл в личку. Заранее спасибо.
                    +1
                    Не могу, к сожалению. Но вообще явно проблема в объеме, убираешь один из «больших» листов и файл грузится. Отдельно этот лист так же грузится, или в паре с другим тяжеловесом.
                    Забейте файл формулами и немножко текстом мегабайта на 3-4 и, думаю, легко повториться (хотя я на 64 битной версии это делал, если что)

                    Из замеченного:

                    1) «группировка» исчезает и фиг бы с ней, но проблема в том, что показать спрятанные столбцы — невозможно в итоге вообще. Т.е. команда «показать» не срабатывает.

                    2) В ООо можно объединить ячейку так, что в ней будет отображено только значение первой ячейки, но при этом все ячейки «под ней» останутся неизменными. В спрятанных таким образом ячейках может быть формула, которая продолжит работу. И на эти ячейки так же можно ссылаться.
                    У вас же вместо формулы туда записывается число, причем не совсем понятно откуда его вообще взяли, т.е. это не результат работы формулы ("=C21*D21*E21/1000000" превратилось в 3171, хотя даже значение было 0,00)

                    3) Анализ формул храмает на обе ноги:
                    Было:
                    ==IF(B6<>«Фасадный профиль матовое серебро [ VE21BIA06000A ]»;((I11*2)+(I14*2))*I17*1,1/1000;"")
                    Стало:
                    ==IF(B6<>«Фасадный профиль матовое серебро VE21BIA06000A ]»,(([!I11*2)+(I14*2))*I17*1.1/1000,"")
                    Подсказка: см на "[" и ";"

                    4) При этом исправить формулу невозможно. То есть исправляешь, нажимаешь энтер — ошибка… Удаляешь формулу, энтер, чтоб сохранилось, заново выделяешь ячейку, вставляешь тоже самое исправленное — всё отлично!
                    Нельзя откатить изменения до исходного текста неверной формулы. Изменил, удалил — обратно не получишь.
                    Нельзя вставить формулу в ячейку и исправить ее, редактор сразу говорит «неверная» и стирает ее.
                    Надо выделить ячейку и в область ввода данных вставить…

                    5) Тот же эксель старается выделить ошибку, которая ему мешает. (например, выделив 1.1 в формуле выше). Можно этапы вычисления вызвать. У вас — только гадать, где ошибка.
                    Или вон в формулах выше было "==" — это, конечно, описка, но ООо — плевать, а эксель же предложит при введении убрать лишний знак или вернуть на этап редактирования формулы, где подсветит проблемный участок.
                    У вас же просто ошибка и думай что хочешь

                    Из-за этих причин формулы наполовину к чертям слетели. Плюс почему то OFFSET не возвращает значение из ячеек…
                    В итоге, серьезно формулы писать в вашем редакторе менее удобно, чем в экселе или ООо, не говоря уж о том, что быстродействие ООо на моих файлах в разы выше: секунд по 5-10 изменения применяются в вашем редакторе, да и оперативки ООО у меня например 158 съел, а онлиофис 450-550 (причем это так с покоя скачет даже просто при просмотре-прокрутке листа)
                    Плюс формулы связанные — не пересчитываются автоматически.

                    Далее, как я понимаю, редактор с ODS работает на самом деле, как с экселем. Однако это не полностью совместимые форматы:

                    1) Если объединить ячейки, то данные и форматы прочих ячеек затираются, т.е. повторить пункт 2 нельзя
                    Это эксель, да, но не ООо

                    2) формула "=C21*D21*E21/1000000" выдаст ошибку, если в ячейках, из которых она берет данные будет формула вида "=IF(N270=«чему-то там»;1;"")" и это формула выдаст ответ из ветки ложь "" (т.е. пусто). С учетом, что реальное пустое поле в экселе такой ошибки не даст — то это ошибка (точнее «фича») именно экселя
                    А вот ООо выдаст ноль.

                    3) Функционал «проверка» в виде текстового списка к конкретной ячейки или ссылки на диапазон ячеек — не работает (в экселе, кстати, он есть, пусть и в виде только диапазона ячеек)

                    PS. Ищу работу тестировщиком. Даже не спрашивайте, чем я найду эти баги и как вообще можно было на них наткнуться, но ваши программисты будут меня ненавидеть.
                    Шутка)
                      0
                      1) «Групппировку» пока не поддерживаем, но показать скрытые строки/столбцы можно. Раскрыть их можно с помощью контекстного меню (как и обычные скрытые строки/столбцы).
                      2) А объединяли какие ячейки и в какой была такая формула, которая превратилась в 3171? Мы записываем не число, а значение левой верхней ячейки из объединения и в предупреждении об этом сообщаем. По поводу сохранения значений под объединением: мы рассмотрим данную возможность, формат такое позволяет сохранять. Часто возникает необходимость что-то держать под объединением?
                      3) ";" заменилась на "," из-за региональных настроек. В английской локали используется в качестве разделителя ",", а в русской — ";". По поводу символа "[". Возможно что-то не так распознали. Но уже смущает наличие двух символов « и », а также два символа "=". Они в таком виде не могут быть в формуле, поэтому и выдается ошибка. В оригинале как выглядит эта формула? Были бы признательны за файл.
                      4-5) Мы работаем над формулами, в ближайших релизах выйдет большое обновление с ускорениями в расчете формул и правкой багов. С ods мы не работаем. Мы конвертируем его в xlsx.

                      Ps. Мы любим тестировщиков, которые находят нам баги)
                        0
                        Посижу, смастерю файл с примером.

                        1) Группировка столбцов была в файле, и проблема в том, что у меня как раз не срабатывает для столбцов «показать» в этом случае (для строк — срабатывает)

                        2) Тут просто разница подходов:
                        — эксель просто затирает данные,
                        — ООо предлагает либо слить все данные в одну строку, либо оставить только левое. В последнем случае, данные никуда не пропадают и даже формулы — продолжают считаться.
                        Просто при любом подходе ссылка на ту ячейку конкретно в моем случае вернула бы «ноль» (в экселе 2003 как минимум пустая ячейка и 0 — одно и то же, а в OOo там формула бы выдала 0 и все было бы тип топ).
                        А тут получилось, что при конвертации данные там все же оказались, но — неверные.

                        Держать спрятанным по факту и не надо, просто у OOo — такая особенность, которую не учли в конвертере (боюсь, изначально разработчики ООо так же этот момент просто не учли на самом деле и забыли сделать стирание данных в тех ячейках)

                        3) В файле будет, однако, если честно, в редакторах видны только ", и ни каких « и ».
                        а вот "==" — это я описал ниже, в 5 пункте: ООо такую описку игнорирует.
                        В файле были еще формулы, в которых == не было, а вот знак [ смещался и становился [! и они не работали, просто они ооочень длинные, чтоб их приводить, а смысл тот же.

                        А вот Экселевский подход, когда пустая ячейка равна 0, а если формула вернуло пусто — то это не равно нулю и умножать на это нельзя — мне кажется явной ошибкой самого экселя. ООо в этом случае ведет себя вернее.

                        PS. Хотя я и шутил, однако, далеко не все те, с кем я сталкивался, любили, когда им на голову сыпалась кучка багов.
                          0
                          Будем признательны за файл.
                          С двойным равно разберемся. В планах есть пункт о добавлении подсказок в ошибках по формулам.
                          По поводу той формулы. Вот такая формула
                          =IF(B6<>"Фасадный профиль матовое серебро [ VE21BIA06000A ]",((I11*2)+(I14*2))*I17*1.1/1000,"")

                          добавляется и считается. Но мы передали проблему отделу тестирования.
                    0
                    и интересно провести сравнение основных редакторов конкурентов.
                      0
                      Оу… неблагодарная это работа.
                      За 14 лет я не встретил ни одного человека, который бы использовал все возможности офисных пакетов. Да даже на 50%. А теперь найдите такого, кто знает оба (ООо и либре различия минимальные) пакета одинаково глубоко, что бы провести сравнение.
                      При этом я сам, если что, участвовал в областных олимпиадах по офисному пакету (уж не знаю, проводят ли сейчас такие, ибо тот еще бред, на самом деле).

                      Но с экселем старым помню была главная проблема — очень маленькое количество вложенных друг в друга формул (уровня три-четыре, если не ошибаюсь). В ООо в этом плане я так и не достиг лимита, если что.
                      В 2010 не требовалось (в онлиофисе, кстати, мои ООо формулы проблем не вызвали)

                      Часть функций в формулах работают по разному, причем могут в мелочах, что не сразу сообразишь. Да и вообще стандартный набор функций немножко разный.
                      По разному какие-то действия выполняются (копи-паст в мс офисе после ООо — это такое убожество… зато есть удобный буфер обмена).
                      По-умолчанию в русском офисе — русские названия формул, и это бесит, потому что адреса ячеек и $ — из латинской раскладки, и в латинице в итоге удобнее всю формулу вбить, а перевести сам офис не может.

                      И это все нюансы разницы в двух редакторах которые понимаешь активно поработав в них, а тут третий еще сравнить с ними)
                      Хотя, в МС возможностей больше в итоге, по моему мнению.
                        0
                        думаю, достаточно скорости открытия и потребления ресурсов.
                        Конечно, важнейшим критерием является функционал, но сравнивать его не так уж просто
                          0
                          Помню лет восемь назад стояла задачка перенести табличку из двух столбцов и сколько-то там тысяч строк из экселя в ворд (требования такие были у госорганов)… Опенофис просто не смог открыть файл екселевский (во всяком случае за вменяемое время работы).
                          И из экселя в ворд вставлять копипастом было ооочень долго… Зато я обнаружил, что если вставить табличку экселя на страничку ворда, то в этом случае копипаст из нее (из режима редактировании ее, точнее) работал в разы быстрее.

                          А по поводу скорости открытия и потребления — в файлах, которыми я тестировал, формул просто безумное количество, причем сложных, многоуровневых. Это сильно не стандартная ситуация, если честно.

                          Если бы там был сплошной текст с сложными форматами, то при тех же объемах файла — это была бы абсолютно другая нагрузка.
                          Поэтому опять упремся в используемый функционал.
                          Хотя, если память не подводит, 2003 эксель жрал меньше ООо, а новые версии уже не сравнивал.
                          0
                          У нас, кстати, можно выбрать язык для формул, если вам не нравятся русские названия.
                        0
                        С печатью тоже сказка, у меня 8 страниц из docx в очереди принтера стали 1Гб raw
                        0
                        Плагины сумма прописью и вычисляемые значения в таблицах есть?
                        0
                        Спасибо вам огромное, заменить MS Office на Маке пока полностью не получается, но всё к тому идёт. В частности очень криво разбираются файлы rtf и doc с таблицами. Всяческие резюме и т.п. В эту сторону подвижки стоит ждать в ближайшее время.
                          +1
                          Что-то в вашем примере плагина хелловорлд какая-то жесть с евалом. Просто функцию передать нельзя что-ли?
                            0
                            Плагин работает в своем контексте (iframe). Так писать не очень удобно, лучше смотреть в сторону плагина templates.
                            0
                            А русскоязычная документация есть?
                            А так очень долгожданная новость…

                            Даже есть идеи, что начинать писать…
                              0
                              Рускоязычной нет. Пока. Но с английской версией не должно возникнуть проблем, там несложно). Если будете писать и возникнут проблемы — пишите, поможем.
                              0
                              ну наконец-то!!!
                              плагины это всегда хорошо.
                              может теперь кто-то с прямыми руками (нет, я сам попробую, но моими руками плагины писать, что блоху кувалдой ковать) напишет так нужные мне:
                              «Продолжить нумерацию» — для ворда
                              «Обрезать/кадрировать изображение» — для всего пакета.

                              плагины это всегда хорошо.
                              плагины с модерацией это очень хорошо.
                                0
                                Использовать docker контейнеры не есть лучшее решение.
                                Облачная версия неимоверно тупит. Разворачивал на виртуалке отдав под систему 2 ядра и 12 гб ram. Любой простой документ в облаке очень долго открывается. Да и в приницпе веб портал очень медленно работает.
                                Самый главный минус это отсутствие поддержки макросов.
                                  0
                                  Хотел начать пользоваться на работе. Но есть несколько «НО».
                                  1. Документ с имеющимся разрывом страницы открывается без него.
                                  2. Не особо быстро работает. Запускается дольше LibreOffice. Некоторые
                                  3. Для меня наверное самое главное. Очень мелкие значки и надписи. А при том что значки монохромны все, то постоянно приходится приближиться к монитору и вглядываться (при том на 24 дюймовом мониторе). Текст по размеру получается меньше в раза полтора точно, чем у того же Хрома или LibreOffice.
                                    0
                                    С разрывами страниц должно все быть отлично. Если пришлете файл, будем благодарны. По поводу последнего — очень странно это. Может зум выставлен у нас в редакторе? Если можно — пришлите скрины, настройки системы. Попробуем разобраться. Спасибо.
                                    0
                                    Desktop Editors version 4.1.2.270 (кстати в About выделить мышкой номер версии нельзя, только переколачивать ручками)
                                    Пытаемся отправить на печать
                                    image

                                    Получаем КУ
                                    image

                                    Без печати и с таким временем открытия документа как предполагается пользоваться-то?
                                      0
                                      Не получается повторить. Будем пробовать дальше. Всегда падает или случайно?
                                      0
                                      Возможна ли интеграция с Endnote? Как вообще со ссылками (для списка литературы) и референс-ссылками на изображения/формулы/таблицы?
                                        0
                                        В новой, т.е. уже следующей, версии будут добавлены сноски(на странице), концевые сноски в планах, и будут сделаны совсем скоро.
                                          0
                                          А что на счёт перекрёстных ссылок (labels/cross-references для формул, рисунков, таблиц, глав). Есть ли отдельная поддержка подписей (captions) под рисунками/таблицами или подписи оформляются просто абзацами не связанными с объектом?
                                          Можно ли надеяться на появление плагина для Endnote?
                                            0
                                            Пока нет. Но в планах.

                                            Про плагин. Мы настроены писать плагины в первую очередь «для всех». Т.е. плагины, которые будут полезны почти всем. Также помогать писать для тех заказчиков, которые начали писать, но возникли вопросы/не получается. Остальное будем добавлять так: появилась хорошая идея и появилась свободное время — сделали.
                                        0
                                        WPS стартует в 10 раз быстрее. Меню симпатичнее. Совместимость на таком же уровне.
                                          0
                                          В программе не нашел главный функционал динамическая таблица? Есть она вообще или нет?
                                            0
                                            Если вы про «Форматировать как таблицу (Format as table)», то у нас это есть.
                                            Format as table
                                              0
                                              Извиняюсь за мою ошибку в стране где я живу эта функция называется динамическая таблица, но в России Сводная таблица, который функционал отличается от вами предложенного, пожалуйста подтвердите где я могу его найти
                                                0
                                                Мы работаем над сводными таблицами и в ближайшее время добавим данную функциональность.
                                                  0
                                                  Большое спасибо, я без них как без рук!

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое