Приложение Node.js, создающее документ PDF, не может впоследствии загрузить документ PDF - PullRequest
0 голосов
/ 12 ноября 2019

Мои знания о node.js и его библиотеках ограничены, так что будьте терпеливы со мной. Я сделал приложение, которое создает файл PDF, и все работает отлично, но проблема в том, что я не знаю, как позволить пользователю загрузить файл. Я перепробовал все, и я просто застрял. Приложение либо возвращает пустой файл, либо файл размером 1 КБ, оба не читаемые. Я был бы очень признателен за вашу помощь, и я прошу прощения за любые ошибки в моем коде, но этот материал является новым для меня.

//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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...