在javascript或节点中将Blob数据转换为Raw缓冲区

时间:2015-12-08 14:31:27

标签: javascript node.js printing buffer jspdf

我正在使用插件jsPDF生成PDF并将其保存到本地文件系统。现在在jsPDF.js中,有一些代码以blob格式生成pdf数据: -

var blob = new Blob([array], {type: "application/pdf"});

并进一步将blob数据保存到本地文件系统。现在我不需要保存,而是需要使用插件node-printer打印PDF。

以下是一些示例代码

var fs = require('fs'),
var dataToPrinter;

fs.readFile('/home/ubuntu/test.pdf', function(err, data){
    dataToPrinter = data;
}

var printer = require("../lib");
printer.printDirect({
    data: dataToPrinter,
    printer:'Deskjet_3540',
    type: 'PDF',
    success: function(id) {
        console.log('printed with id ' + id);
    },
    error: function(err) {
        console.error('error on printing: ' + err);
    }
})

fs.readFile()读取PDF文件并以原始缓冲区格式生成数据。

现在我想要的是转换' Blob'数据进入原始缓冲区'这样我就可以打印PDF了。

3 个答案:

答案 0 :(得分:3)

           var blob = new Blob([array], {type: "application/pdf"});

            var arrayBuffer, uint8Array;
            var fileReader = new FileReader();
            fileReader.onload = function() {
                arrayBuffer = this.result;
                uint8Array  = new Uint8Array(arrayBuffer);

                var printer = require("./js/controller/lib");
                printer.printDirect({
                    data: uint8Array,
                    printer:'Deskjet_3540',
                    type: 'PDF',
                    success: function(id) {
                        console.log('printed with id ' + id);
                    },
                    error: function(err) {
                        console.error('error on printing: ' + err);
                    }
                })
            };
            fileReader.readAsArrayBuffer(blob);

这是对我有用的最终代码。打印机接受uint8Array编码格式。

答案 1 :(得分:2)

尝试:

var blob = new Blob([array], {type: "application/pdf"});
var buffer = new Buffer(blob, "binary");

答案 2 :(得分:0)

对我来说,它适用于以下情况:

const buffer=Buffer.from(blob,'binary');

因此,此缓冲区可以通过fs节点程序包存储在Google Cloud Storage和本地磁盘中。

我使用blob文件通过ddp协议(流星)将数据从客户端发送到服务器,因此,当此文件到达服务器时,我将其转换为缓冲区以进行存储。