gpt4 book ai didi

node.js - Node 无法通过管道传输 pdf 响应

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:32 25 4
gpt4 key购买 nike

尝试编写一个测试(mocha)来检查从我的 api 端点返回的 PDF 是否包含正确的数据并且看起来应该如此。 PDF是在服务器上生成的。当手动到达端点时,它返回“正确”,但想编写一些测试。我将一个“正确”PDF 示例上传到我的测试套件,我可以使用 hummus js 对其进行解析并提取必要的方面进行比较。

我想向我的端点(使用 super 代理)发出请求,然后将响应(pdf)通过管道传输到临时 pdf 中。然后我将解析两个 PDF(上传的完美 PDF 和从我的端点返回的 PDF)并确保它们匹配。

我的请求代码:

    it('Should look like the proposed pdf', function (done) {

request(app)
.get(url) //var that sets the path earlier
.expect(200)
.end(function (err, res) {
if(err) return done(err);

var writeStream = fs.createWriteStream('./test/materials/tmp.pdf');
writeStream.pipe(res); //ERROR can't pipe
writeStream.on('end', function() {
console.log('complete');
done();
})
});

});

当我运行测试时,我得到:未捕获错误:无法管道。不可读。我对 Node 非常陌生,所以我不确定是什么导致了错误。当我控制台输出时,我得到一个大的二进制编码困惑,所以也许这就是问题所在?我尝试了一些事情 - 使用鹰嘴 bean 泥 pdfWriter,尝试使用

进行解码

new Buffer(res, 'base64')

等等...但仍然没有运气。我相信我已经安装了这些操作所需的所有软件包,这似乎是管道/解码/ super 代理问题。感谢您的帮助!

编辑:我误解了管道。您可以简单地将响应写入文件:

fs.writeFile('./test/materials/test_tmp.pdf', new Buffer(res.text, 'ascii'));

在本例中转换为 ascii。我现在更接近了,但仍然卡在编码部分上。这将创建一个空白 PDF。当我在 sublime 中观察文件内容时,它们似乎与我正在比较的 PDF 相同,但编码不同。有谁知道如何匹配原始 PDF 的编码或弄清楚它是如何编码的?或者这是否可能?我使用 PDFkit 来构建 PDF。

最佳答案

我不认为(或不知道)有什么方法可以在本地做到这一点。如果您愿意使用其他模块,请使用 look at pdfkit

你可以做类似的事情

var pdf = new PDFDocument;  
pdf.pipe(fs.createWriteStream('./test/materials/tmp.pdf'));

编辑
抱歉,我读你的问题有点错误。不过该模块有一些示例。例如,来自他们的文档 -

PDFDocument = require 'pdfkit'

# Create a document
doc = new PDFDocument

# Pipe it's output somewhere, like to a file or HTTP response
# See below for browser usage
doc.pipe fs.createWriteStream('output.pdf')

# Embed a font, set the font size, and render some text
doc.font('fonts/PalatinoBold.ttf')
.fontSize(25)
.text('Some text with an embedded font!', 100, 100)

# Add another page
doc.addPage()
.fontSize(25)
.text('Here is some vector graphics...', 100, 100)

# Draw a triangle
doc.save()
.moveTo(100, 150)
.lineTo(100, 250)
.lineTo(200, 250)
.fill("#FF3300")

# Apply some transforms and render an SVG path with the 'even-odd' fill rule
doc.scale(0.6)
.translate(470, -380)
.path('M 250,75 L 323,301 131,161 369,161 177,301 z')
.fill('red', 'even-odd')
.restore()

# Add some text with annotations
doc.addPage()
.fillColor("blue")
.text('Here is a link!', 100, 100)
.underline(100, 100, 160, 27, color: "#0000FF")
.link(100, 100, 160, 27, 'http://google.com/')

# Finalize PDF file
doc.end()

关于node.js - Node 无法通过管道传输 pdf 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com