1

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

我想向我的端点(使用超级代理)发出请求,然后将响应(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();
                })
          });

      });

当我运行测试时,我得到:未捕获的错误:无法管道。不可读。我对节点很陌生,所以我不确定是什么导致了错误。当我安慰 res 时,我得到一个大的二进制编码的混乱,所以也许这就是问题所在?我尝试了几件事 - 使用鹰嘴豆泥 pdfWriter,尝试用

新缓冲区(res,'base64')

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

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

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

在这种情况下转换为 ascii。我现在更近了,但仍然挂在编码片上。这将创建一个空白 PDF。当我以崇高的方式观察文件内容时,它们似乎与我要比较的 PDF 相同,但编码不同。有人知道如何匹配原始 PDF 的编码或弄清楚它是如何编码的吗?或者如果这甚至是可能的?我使用 PDFkit 构建 PDF。

4

1 回答 1

0

我不认为(或不知道)以本地方式执行此操作。如果您愿意使用其他模块,请查看 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()
于 2015-03-31T22:57:29.240 回答