Node-Webkit下载PDF

时间:2014-05-20 18:49:10

标签: javascript node-webkit fs

我正在构建一个node-webkit应用程序,我从网站收到下载特定文件的请求。当我启动Web服务调用时,我会在response.body中找回该文件。我正在尝试使用fs api中的示例将pdf保存到我的本地文件夹,即:。

(我将response.body传递给数据字段,并传递字符串'binary'以指定选项下的编码)

var options = { encoding: 'binary' };
console.log('File name:' + fileName);
fileOperations.write(fileName, response.body, options, null);

在fileOperations中:

module.exports = {
    write: function (filename, data, options, callback) {
    fs.writeFile(filename, data, options, function (err) {
      if (err) throw err;
      console.log('It\'s saved!');
    });
  }
};

文件将使用正确的文件名和扩展名以及文件大小保存到本地文件夹。但是,在预览中打开时,每个页面都是空白的我指定了错误的编码类型吗?

2 个答案:

答案 0 :(得分:1)

这听起来像我遇到的问题。下载文件(不仅仅是pdf)导致了奇怪的结果。这更可能是你的问题....而不是fs功能。我们选择使用请求库(npm请求)并以这种方式执行下载,而不是使用内置节点http内容:

 request({
      method: 'GET',
      uri: baseUrl + '/api/v1/documents/versions/contents/doc33',
      headers: {"Access-Control-Allow-Origin": baseUrl, "Cookie": cookie}
    }, function (error, response, body) {

      var contentDisp = response.headers['content-disposition'].split('"');
      var ext = contentDisp[1].split('.')[1];

      // you can rename the downloaded file (temp) and add the proper extension here...

    }).pipe(fs.createWriteStream('temp')); // you can append a directory to the temporary name as well..
}

我会试一试,看看它是否适合你。跨平台处理文件可能很困难。

答案 1 :(得分:0)

从node-webkit应用程序导出pdf文件。 首先你需要pdfkit;你可以看到doc here ..

然后你只需要在js:

中要求它
var pdfkit = require('pdfkit');
var fs = require('fs');

你必须像这里一样使用另存为方框: 我的应用程序中的一个示例:

<button id="export">Export</button>
<input style="display:none" id="fileDialog" type="file" class="button small" accept=".pdf" nwsaveas="">

使用导出功能:

$('#export').click(function(event) {
    chooseFile('#fileDialog');
});

function chooseFile(name)
{
    var chooser = $(name);
    chooser.change(function(event) {
        event.preventDefault();
        exp_to = $(this).val(); // where to export
            console.log($(this).val());
        exporT();
    });
        chooser.trigger('click');
}

和=&gt;最后

function exporT() // export() is already reserved
    {
        event.preventDefault();
        var doc = new pdfkit();
        doc.pipe(fs.createWriteStream(exp_to));
        doc.fontSize(20) // font size
            .text('your text here')//.whatyouwant()

            .end();
    }