Конфигурирование библиотеки javascript docxtemplater в XPages
Я пытаюсь использовать библиотеку docxtemplater в приложении XPages.
Библиотека Javascript docxtemplater ( https://docxtemplater.com/) используется в качестве
зависимость другая библиотека с открытым исходным кодом jszip-utils.js
( http://stuk.github.io/jszip/), чтобы сжать и разархивировать файлы DOCX.
Проблема в том, что javascript библиотеки jszip-utils.js в XPages нет
за работой.
Я вставил библиотеки javascript в папку (jslib), которая находится в папке WebContent.
Вот моя тестовая страница;
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<script src="jslib/main.min.js"></script>
<script src="jslib/angular-expressions.js"></script>
<script src="jslib/jszip.js"></script>
<script src="jslib/jszip-utils.js"></script>
<script src="jslib/FileSaver.min.js"></script>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[
var loadFile=function(url,callback){
JSZipUtils.getBinaryContent(url,callback);
}
loadFile("tagExample.docx",function(err,content){
doc=new DocxGen(content)
doc.setData( {"first_name":"Hipp",
"last_name":"Edgar",
"phone":"0652455478",
"description":"New Website",
"image":'image.png'
}
) //set the templateVariables
doc.render() //apply them (replace all occurences of {first_name} by Hipp, ...)
out=doc.getZip().generate({type:"blob"}) //Output the document using Data-URI
saveAs(out,"output.docx")
})]]></xp:this.script>
</xp:eventHandler></xp:button>
</xp:view>
Кто-нибудь имел дело с проблемой?
3 ответа
Это проблема загрузчика AMD. Это конфликтует с Doge в XPage.
Используйте этот XSnippet для обхода.
Ваш код будет выглядеть так:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.resources>
<!-- temporary redefine define.amd object (Dojo AMD loader) -->
<xp:script clientSide="true" type="text/javascript">
<xp:this.contents><![CDATA[${javascript:"if (typeof define === 'function' && define.amd) {if(define.amd.vendor =='dojotoolkit.org'){define._amd = define.amd;delete define.amd;}}";}]]></xp:this.contents>
</xp:script>
<xp:script src="jslib/jszip.js" clientSide="true"></xp:script>
<xp:script src="jslib/jszip-utils.js" clientSide="true"></xp:script>
...
<!-- restore define.amd object (Dojo AMD loader) -->
<xp:script clientSide="true">
<xp:this.contents><![CDATA[${javascript:"if (typeof define === 'function' && define._amd) {define.amd = define._amd; delete define._amd;}"}]]></xp:this.contents>
</xp:script>
</xp:this.resources>
...
Просто обратитесь к приведенному ниже java-скрипту на своей html-странице.
<script src="http://kendo.cdn.telerik.com/2016.1.112/js/jszip.min.js"></script>
Когда вы посмотрите на firebug на своей веб-странице, вы, скорее всего, увидите 404 для JavaScript. Вам нужно либо добавить их как библиотеки сценариев в xpages и использовать тег сценария xpages с атрибутом client, либо добавить их в каталог web-inf и загрузить их с помощью тегов сценария. Вам все еще понадобится событие на стороне клиента, чтобы вызвать их.