首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WebODF / Javascript动态创建ODT

使用WebODF / Javascript动态创建ODT
EN

Stack Overflow用户
提问于 2015-05-04 11:18:55
回答 2查看 2.5K关注 0票数 3

使用javascript,我需要创建一个.odt文件并使用javascript变量中的数据填充内容。我发现唯一可能有效的是WebODF。一个类似于它的例子是这里

当我尝试使用PDF (使用节点)做类似于pdfkit的事情时,我可以这样做:

代码语言:javascript
复制
PDFDocument = require('pdfkit');
var doc = new PDFDocument();
doc.pipe(fs.createWriteStream(fileName));
doc.text("Fist line");
doc.text("Second line");

是否可以使用WebODF进行类似的操作?我已经找到了ops.OpInsertText,但我不知道如何使用它来实际插入文本。

同样,理想情况下,解决方案只存在于javascript中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-12 06:43:01

如果我正确地回答了您的问题,您希望使用JavaScript变量中的数据动态创建一个新文件。

您可以引用这个答案以字节数组的形式从javascript变量加载文件。这将使您使用odt文件启动并运行,您可以将该文件保存到所需的位置。

代码语言:javascript
复制
function saveByteArrayLocally(error, data) {
    var mime = "application/vnd.oasis.opendocument.text";
    var blob = new Blob([data.buffer], {type: mime});

    var res = $http({
        method: 'POST', url: myWebServiceUrl,
        headers: {'Content-Type': undefined},
        data: blob
    });

    res.success(function(data, status, headers, config) {
        console.log(status);
    });
}

注意:您可以使用multer,express.js框架将服务设计为后端以保存文件。

票数 1
EN

Stack Overflow用户

发布于 2015-10-29 20:22:00

这可能有助于you.In这个示例,我正在将从promt返回的值附加到webodf内的游标位置。您也可以将数据插入到任何其他元素offest()。按下crtl+space将显示一个promt,无论我们在那里键入什么,都会插入到odf。

代码语言:javascript
复制
function insertBreakAtPoint(e) {
    var range;
    var textNode;
    var offset;
    var key = prompt("Enter the JSON Key", "name");
    {% raw %}
    var key_final = '{{address.'+key+'}}';
    {% endraw %} 

    var caretOverlay=$('.webodf-caretOverlay').offset();
    if (document.caretPositionFromPoint) {
        range = document.caretPositionFromPoint(
            caretOverlay.left, caretOverlay.top
        );
        textNode = range.offsetNode;
        offset = range.offset;
    } else if (document.caretRangeFromPoint) {
        range = document.caretRangeFromPoint(
            caretOverlay.left, caretOverlay.top
        );
        textNode = range.startContainer;
        offset = range.startOffset;
    }

    #only split TEXT_NODEs
    if (textNode.nodeType == 3) {
        var replacement = textNode.splitText(offset);
        var keynode = document.createTextNode(key_final);
        textNode.parentNode.insertBefore(keynode, replacement);
    }
}

function KeyPress(e) {
    var evtobj = window.event? event : e
    if (evtobj.keyCode == 32 && evtobj.ctrlKey) 
        insertBreakAtPoint();
}

document.onkeydown = KeyPress;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30028818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档