2015-05-04 106 views
3

使用javascript,我需要創建一個.odt文件並使用javascript變量中的數據填充內容。我發現的唯一可能的工作是WebODF。一個似乎與它相似的例子是here使用WebODF/Javascript動態創建ODT

當我試圖做pdfkit(使用節點)類似PDF什麼事情我可以做這樣的事情:

PDFDocument = require('pdfkit'); 
var doc = new PDFDocument(); 
doc.pipe(fs.createWriteStream(fileName)); 
doc.text("Fist line"); 
doc.text("Second line"); 

是否有可能使用WebODF做類似它的東西?我發現ops.OpInsertText,但我不確定如何使用它來實際插入文本。

同樣,理想的解決方案只在javascript

回答

1

如果我的問題是正確的,您希望使用JavaScript變量中的數據動態創建一個新文件。

您可以參考this answer以字節數組的形式從javascript變量載入文件。 這將使您啓動並運行一個odt文件,您可以將它保存到所需的位置。

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

這可能會幫助你。在這個例子中,我將從promt返回的值附加到webodf中的光標位置。您可以類似地將數據插入到任何其他元素()。 按crtl +空格將顯示一個提示,並且我們鍵入的任何內容都會插入到odf中。

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;