Оперативное редактирование документов в веб-приложениях на основе J2EE с помощью OnlyOffice, но URL обратного вызова не работает
Мы работаем над веб-приложением с angularJS и используем spring/hibernate. Мы используем операционную систему Linux в производственной среде, а среда разработки - Windows. Мы пытаемся внедрить инструмент онлайн-редактирования документов, такой как ms-word, в наше приложение.
После некоторых исследований мы используем OnlyOffice https://api.onlyoffice.com/. Я использую следующий компонент angularJs для использования onlyOffice https://github.com/legalthings/angular-onlyoffice Мы можем интегрировать его с приложением, и мы можем увидеть открытый документ в редакторе в веб-браузере. Но мои изменения не сохраняются. Элемент управления не достигает callBackUrl.
Поскольку компонент angularJs использует метод onSave, которого больше нет в API OnlyOffice, я немного изменил код в html и JS-файле:- HTML-код файла: -
<div ng-controller="DocumentEditController">
<onlyoffice-editor src="{{ trustSrc(document.src) }}"
title="{{ document.name }}">
</onlyoffice-editor>
</div>
И код файла JS: -
angular.module('onlyoffice', []);
angular.module('onlyoffice').directive('onlyofficeEditor', [function () {
function key(k) {
var result = k.replace(new RegExp("[^0-9-.a-zA-Z_=]", "g"), "_") + (new
Date()).getTime();
return result.substring(result.length - Math.min(result.length, 50));
}
var getDocumentType = function (ext) {
if (".docx.doc.odt.rtf.txt.html.htm.mht.pdf.djvu.fb2.epub.xps".indexOf(ext) != -1) return "text";
if (".xls.xlsx.ods.csv".indexOf(ext) != -1) return "spreadsheet";
if (".pps.ppsx.ppt.pptx.odp".indexOf(ext) != -1) return "presentation";
return null;
};
return {
template: '<div id="onlyoffice-editor"></div>',
link: function ($scope, $element, $attrs) {
$scope.$watch(function () {
return $attrs.src;
}, function () {
if (!$attrs.src) return;
var docUrl = $attrs.src;
var docTitle = $attrs.title || docUrl;
var docKey = key(docUrl);
var docType = docUrl.split('?')[0].substring(docUrl.lastIndexOf(".") + 1).trim().toLowerCase();
var documentType = getDocumentType(docType);
var config = {
type: "desktop",
width: '100%',
height: '100%',
documentType: documentType,
document: {
title: docTitle,
url: docUrl,
fileType: docType,
key: docKey,
permissions: {
edit: true,
download: false
}
},
editorConfig: {
mode: 'edit',
callbackUrl:"/documentSave"
},
events: {
onReady: function () {alert("in on ready");
setTimeout(function () {
$scope.$apply(function () {
$scope.ready = true;
});
}, 5000);
},
onError: function (event) {
alert(event.data);
// var url = event.data;
// $scope.save({url: url, close: $scope.close});
},
}
};
//creating object editing
new DocsAPI.DocEditor("onlyoffice-editor", config);
});
}
}
}]);
Я изменил documentmenSave на полное имя, используя localhost и appname, но это также не работает. Любая помощь высоко ценится.
редактировать
CallBackUrl теперь вызывается при закрытии кнопки браузера... Но наше требование - сохранить документ нажатием кнопки сохранения. Заранее спасибо.
1 ответ
Дело в том, что нажатие на кнопку "Сохранить" создает временный файл в редакторе документов. Версия рабочего документа будет создана только после закрытия редактора документов всеми пользователями (через десять секунд). Невозможно загрузить измененный документ в режиме реального времени (до его закрытия).