Jar*_*tin 12 javascript node.js meteor node-pdfkit collectionfs
我正在尝试将图像插入到pdf中,我正在使用PDFkit创建服务器端.我正在使用cfs:dropbox来存储我的文件.在我使用cvs:filesystem之前,很容易将图像添加到我的pdf中,因为它们就在那里.现在它们被远程存储,我不知道如何添加它们,因为PDFkit不支持仅使用url添加图像.但是,它会接受一个缓冲区.如何从我的CollectionFS文件中获取缓冲区?
到目前为止,我有这样的事情:
var portrait = Portraits.findOne('vS2yFy4gxXdjTtz5d');
readStream = portrait.createReadStream('portraits');
Run Code Online (Sandbox Code Playgroud)
到目前为止,我试过两种方式获取缓冲区:
首先使用dataMan,但最后一个命令永远不会回来:
var dataMan = new DataMan.ReadStream(readStream, portrait.type());
var buffer = Meteor.wrapAsync(Function.prototype.bind(dataMan.getBuffer, dataMan))();
Run Code Online (Sandbox Code Playgroud)
第二次手动缓冲流:
var buffer = new Buffer(0);
readStream.on('readable', function() {
buffer = Buffer.concat([buffer, readStream.read()]);
});
readStream.on('end', function() {
console.log(buffer.toString('base64'));
});
Run Code Online (Sandbox Code Playgroud)
这似乎永远不会回来.我仔细检查了我的文档以确保它在那里并且它有一个有效的URL并且当我将URL放入浏览器时图像出现.我错过了什么吗?
我不得不做类似的事情,既然这个问题没有答案,我就是这样做的:
// take a cfs file and return a base64 string
var getBase64Data = function(file, callback) {
// callback has the form function (err, res) {}
var readStream = file.createReadStream();
var buffer = [];
readStream.on('data', function(chunk) {
buffer.push(chunk);
});
readStream.on('error', function(err) {
callback(err, null);
});
readStream.on('end', function() {
callback(null, buffer.concat()[0].toString('base64'));
});
};
// wrap it to make it sync
var getBase64DataSync = Meteor.wrapAsync(getBase64Data);
// get a cfs file
var file = Files.findOne();
// get the base64 string
var base64str = getBase64DataSync(file);
// get the buffer from the string
var buffer = new Buffer(base64str, 'base64')
Run Code Online (Sandbox Code Playgroud)
希望它会有所帮助!
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |