之后,创建pdf文档的Node.js应用无法下载pdf文档

时间:2019-11-11 21:22:03

标签: javascript node.js express pdfkit

我对node.js及其库的了解有限,所以请耐心等待。我制作了一个可以创建pdf文件的应用程序,并且一切正常,但是问题是我不知道如何让用户下载该文件。我已经尝试了所有方法,但是我一直陷于困境。该应用程序返回一个空文件或大小为1kB的文件,两者都不可读。非常感谢您的帮助,对于代码中的任何错误,我们深表歉意,但这对我来说是新的。

//my script.js file
var pdf=require ('pdfkit');
var fs=require('fs');
const url = require('url');
const http = require('http');
var path = require('path');
const express = require('express');
var qs = require('querystring');
const app = express();
app.use(express.static('public'));
app.listen(process.env.PORT || 3000, () => {
  console.log('listening on 3000');
});


app.get('/', (req, res) => {
  res.sendfile(path.join('index.html'));
});

app.use(express.json());
app.use(express.urlencoded({ extended: true }))
app.post('', function(req,res) {
    createDoc(req.body.name,req.body.school,req.body.diplom);
    res.download(req.body.diplom+".pdf");
    res.sendfile(path.join('index.html'));
});
function createDoc(name,school,diplom){
  var myDoc=new pdf;
   var pdfFile = path.join(__dirname, diplom+".pdf");
    var pdfStream = fs.createWriteStream(pdfFile);
    myDoc.registerFont('Cardo', 'Cardo-Regular.ttf')
    myDoc.registerFont('Cardo-Bold', 'Cardo-Bold.ttf')
    myDoc.font('Cardo');
    myDoc.fontSize(100);
    myDoc.text("Diplom",150,300);
    myDoc.fontSize(30);
    myDoc.font('Cardo-Bold');

    myDoc.text("Jméno:",37,458);
    myDoc.text("Škola:",53,558);
    myDoc.font('Cardo');
    myDoc.text(name,145,458);
    myDoc.text(school,145,558);


    myDoc.moveTo(145,490);
    myDoc.lineTo(467,490);
    myDoc.fill('black');

    myDoc.moveTo(145,590);
    myDoc.lineTo(467,590);
    myDoc.fill('black');

    myDoc.image('medal.png', 156, 0, {width: 300})

    myDoc.moveTo(0, 0)
    myDoc.lineTo(0, 100)
    myDoc.lineTo(100, 0)
    myDoc.fill('#FF3300');

    myDoc.moveTo(612, 0)
    myDoc.lineTo(612, 100)
    myDoc.lineTo(512,0)
    myDoc.fill('#FF3300');

    myDoc.moveTo(612, 800)
    myDoc.lineTo(612, 700)
    myDoc.lineTo(512,800)
    myDoc.fill('#FF3300');

    myDoc.moveTo(0, 800)
    myDoc.lineTo(100, 800)
    myDoc.lineTo(0, 700)
    myDoc.fill('#FF3300');
    myDoc.pipe(pdfStream);

    myDoc.end();

}

//part of my index.html, but I don't think this is the problem
<form method="POST" action="" id="mainForm">
      <p id="p_name">Příjemce: <input type="text" name="name" id="name" required></p>
      <p id="p_school">Škola: <input type="text" name="school" id="school" required></p>
      <p id="p_diplom">Jméno diplomu: <input type="text" name="diplom" id="diplom" required></p>
      <button type="submit">Vytvořit diplom!</button>
    </form>

0 个答案:

没有答案