将 html2pdf 生成的 pdf 发送回服务器

Posted

技术标签:

【中文标题】将 html2pdf 生成的 pdf 发送回服务器【英文标题】:Sending html2pdf generated pdf back to the server 【发布时间】:2019-02-08 10:15:27 【问题描述】:

我必须将使用html2pdf 在客户端生成的PDF 发送到服务器。我已设法将生成的 PDF 转换为 base64,并希望使用axios 将其发回。这是我的客户端代码:

  function myFunction()
           var element = document.getElementById('element-to-print');
           html2pdf().from(element).outputPdf().then(function(pdf) 
    //Convert to base 64
            const newpdf=btoa(pdf);
            console.log(newpdf)
            var formData = new FormData();
            formData.append("uploadedFile", newpdf);
            axios.post('/upload',formData).then(res =>  console.log(res) ).catch(error => 
            console.log(error.response)
        )
    );

这是我的服务器端代码:

app.post('/upload', fileUpload(), function(req, res)   
  const sampleFile = req.files.uploadedFile;
  // do something with file
  res.send('File uploaded');
)

我认为问题出在客户端,因为我在控制台上获得了转换后的 pdf 的 base64 版本,但之后出现错误:

POST http://localhost:3000/upload 500(内部服务器错误)

我该如何解决这个问题?谢谢。

【问题讨论】:

如果你能接收到base64编码的文件,请检查服务器端 在服务器端我得到 Cannot read property 'uploadedFile' of null 【参考方案1】:

对于express 中的FormData,您应该使用Multer 等中间件

你的代码会是这样的:

var express = require('express')
var multer  = require('multer')
var upload = multer( dest: 'uploads/' )

var app = express()

app.post('/upload', upload.single('uploadedFile'), function (req, res, next) 
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
)

【讨论】:

以上是关于将 html2pdf 生成的 pdf 发送回服务器的主要内容,如果未能解决你的问题,请参考以下文章

iText7高级教程之html2pdf——3.基于媒体查询生成PDF

iText7高级教程之html2pdf——3.基于媒体查询生成PDF

html2pdf取消隐藏后不会打印隐藏的div?

使用 JavaScript 将 HTML 转换为 PDF

Java实现HTML代码生成PDF文档

PHP 中的 HTML2PDF - 转换实用程序和脚本 - 示例和演示