node.js - 如何在node.js中将图像从请求传输到pdfkit?

标签 node.js web-scraping cheerio node-pdfkit

首先,我对 Javascript 和 Node.js 都是新手,如果我的问题很愚蠢,我很抱歉。

我正在尝试从网站上抓取文本和图像,并使用 request、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 格式

Here您可以看到它正在检查 .jpeg 和 .png 扩展名。您的是 .jpg 文件。我曾多次遇到此问题,这解决了我的问题。

关于node.js - 如何在node.js中将图像从请求传输到pdfkit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28585324/

相关文章:

node.js - Azure 网站上的 iisnode 和 cors

html - XPath - 选择所有文本作为单行

javascript - 使用 Cheerio 和 Response for Node 网络抓取工具,将响应函数结果传递到 View

node.js - 如何访问 Node.js 请求模块的输出

javascript - Node.js TCP 服务器,用于评估和打印数据

javascript - 在将图像保存到服务器之前如何使用 event.target.files 填充 img src

mysql - 对不存在的记录进行序列化响应

python - python中的多个异常(exception)

python - 如何将特定html标签中的数据转换为字典

javascript - Cheeriojs 出现错误 : exports. load.initialize