如何将图像从请求pipe道到node.js中的pdfkit?

首先,我对JavaScript和Node.js都是一个新手,所以如果我的问题是愚蠢的,那么对不起。

我试图从网站上刮掉文本和图像,并使用请求,cheerio和pdfkit将其导出为pdf,但是我遇到了问题。

我能够刮这些图像,并保存在本地使用这个:

var $ = cheerio.load(body); $("#mediatab1 img").each(function(){ var image= 'http://WWW.WEBSITE.no' + $(this).attr('src'); images.push(image); }); for(var i = 0; i < images.length; i++){ request(images[i]).pipe(fs.createWriteStream('images/' + i + '.jpg')); } 

但! 这是问题:

1.意图:当我尝试使用PDF文件写入文件

 doc.image('images/0.jpg'); 

我所得到的就是

 Error: Unknown image format. at Function.PDFImage.open (C:\nodejs\node_modules\pdfkit\js\im age.js:41:15) at PDFDocument.module.exports.image (C:\nodejs\node_modules\pd fkit\js\mixins\images.js:27:26) at Request._callback (C:\nodejs\prosjekt.js:29:6) at Request.self.callback (C:\nodejs\node_modules\request\reque st.js:344:22) at Request.emit (events.js:98:17) at Request.<anonymous> (C:\nodejs\node_modules\request\request .js:1239:14) at Request.emit (events.js:117:20) at IncomingMessage.<anonymous> (C:\nodejs\node_modules\request \request.js:1187:12) at IncomingMessage.emit (events.js:117:20) at _stream_readable.js:944:16 

0.jpg是0字节,所以我怀疑这里有时间问题?

2.意图

我试图使用.pipe而不是本地保存:

 request(images[i]).pipe(doc.image(images[0])); 

但我得到的是:

 "Error: ENOENT, no such file or directory 'C:\nodejs\http:\www.WEBSITE.no\Common\Tools\ImageScaler.ashx?id=c7d73548-8198-4bd1-867d-33fc0dfe73d1&h=4 13' 

任何想法如何解决这个问题或以任何其他方式解决问题?

这是整个脚本:

 var request = require('request'), cheerio = require('cheerio'), PDFDocument = require('pdfkit'), doc = new PDFDocument, fs = require('fs'), prompt = require('prompt'); bilder = []; prompt.start(); prompt.get(['prosjekturl'], function (err, result) { request({url: 'http://www.WEBSITE.no/no/Prosjekter/Prosjekt/?pid=' + result.prosjekturl, encoding:null}, function(err, resp, body){ if(!err && resp.statusCode == 200){ // console.log(body); var $ = cheerio.load(body); $("#mediatab1 img").each(function(){ var bilde = 'http://www.WEBSITE.no' + $(this).attr('src'); bilder.push(bilde); }); console.log(bilder); for(var i = 0; i < bilder.length; i++){ request(bilder[i]).pipe(fs.createWriteStream('images/' + i + '.jpg')); } $("#MiddleRightContainer h1").each(function(){ var tittel = $(this).text(); console.log(tittel); doc.pipe(fs.createWriteStream('pdf/output.pdf')); doc.font('fonts/FONT-Regular.ttf'); doc.fontSize(32); doc.text(tittel); }); $("#MiddleRightContainer .user-content p").each(function(){ var tekst = $(this).text(); console.log(tekst); doc.pipe(fs.createWriteStream('pdf/output.pdf')); doc.fontSize(12); doc.text(tekst); }); $("#RightSidebar div.box2").each(function(){ var fakta = $(this).text(); console.log(fakta); }); } doc.end(); }); }); 

从文档:

PDFKit支持JPEG和PNG格式

在这里您可以看到它正在检查.jpeg和.png扩展名。 你的是一个.jpg文件。 这几次我遇到了麻烦,这已经解决了我的问题。

当涉及到文件加载我怀疑Windowspath可能是一个问题。 尝试使用node.js内置的pathparsing: https : //nodejs.org/api/path.html

当请求和加载图片时,它不应该超过:

 request({ url: url, // Prevents Request from converting response to string encoding: null }, function (err, response, body) { doc.image(body) }) 

希望它有助于一些。