美文网首页
Nodejs生成pdf文件流+前端通过二进制流下载pdf

Nodejs生成pdf文件流+前端通过二进制流下载pdf

作者: R_X | 来源:发表于2023-03-28 14:03 被阅读0次
  • 后端:Nodejs + pdfkit 生成pdf
  • 前端:通过 downloadjs生成pdf文件

1、后端代码

const PDFDocument = require('pdfkit');
const fs = require('fs');
exports.createPdf = (req, res) => {
    const doc = new PDFDocument();
    // doc.pipe(fs.createWriteStream('output.pdf'));  // 在服务端生成pdf文件

    // Embed a font, set the font size, and render some text
    doc
        .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.pipe(res);  // 通过res 将pdf文件流返回给前端
    doc.end();
};

2、前端代码

    import axios from 'axios'
    import downloadjs from 'downloadjs';
    export default {
        mounted() {
            axios.get('http://localhost:9202/createPdf', {
                responseType: 'blob',
                headers: {
                    'Content-Type': 'application/json'
                }
            }).then(res => {
                downloadjs(res.data, 'demo.pdf', 'application/pdf');
            }).catch(err => {
                console.error(err);
            })
        }
    }

相关文章

网友评论

      本文标题:Nodejs生成pdf文件流+前端通过二进制流下载pdf

      本文链接:https://www.haomeiwen.com/subject/txztddtx.html