0

How can I save the created PDF with hummus.js to file instead of sending it as a response of my route? I couldn't find any example.

res.writeHead(200, { "Content-Type": "application/pdf" });

var hummus = require("hummus");
var pdfWriter = hummus.createWriter(new hummus.PDFStreamForResponse(res));
var page = pdfWriter.createPage(0, 0, 240.94512, 155.9052);
pdfWriter
    .startPageContentContext(page)
    .writeText("Hello " + (req.query.id ? req.query.id : "World"), 0, 100, {
        font: pdfWriter.getFontForFile(__dirname + "\\arial.ttf"),
        size: 20,
        colorspace: "gray",
        color: 0x00
    });
pdfWriter.writePage(page);

var cxt = pdfWriter.startPageContentContext(page);
cxt
    .drawImage(0, 0, __dirname + "\\testCard.png", {
        transformation: { width: 240.94512, height: 155.9052 }
    })
    // .drawImage(10, 10, __dirname + "\\test.jpg");
    .drawImage(10, 10, __dirname + "\\simple.pdf");

// .drawImage(200,500,'./TestMaterials/images/png/original.png')

pdfWriter.writePage(page);
pdfWriter.end();

res.end();

ps: I tried like 5 different node.js pdf libraries.. somehow none of them can do all of these things:

  • create custom page sizes
  • append multiple images on same page
  • jpg, png and base64 formats as image input
  • write to file
Suisse
  • 3,467
  • 5
  • 36
  • 59

1 Answers1

0

Since I somehow lost a lot of time achieving this, I won't delete my stupid question, instead I'll provide an answer to my stupid question:

instead of provding a new hummus.PDFStreamForResponse(res) object to the writer, you just have to provide a path:

var pdfWriter = hummus.createWriter("./pathAndPdfName.pdf");

so the whole code looks like this:

var hummus = require("hummus");
var pdfWriter = hummus.createWriter("./outPut.pdf");
var page = pdfWriter.createPage(0, 0, 240.94512, 155.9052);
var cxt = pdfWriter.startPageContentContext(page);
cxt
    .drawImage(0, 0, __dirname + "\\testCard.png", {
        transformation: { width: 240.94512, height: 155.9052 }
    })
    .drawImage(10, 10, __dirname + "\\test.jpg");
pdfWriter.writePage(page);
var page1 = pdfWriter.createPage(0, 0, 240.94512, 155.9052);
var cxt1 = pdfWriter.startPageContentContext(page1);
cxt1.drawImage(0, 0, __dirname + "\\testCard.png", {
    transformation: { width: 240.94512, height: 155.9052 }
});
pdfWriter.writePage(page1);
pdfWriter.end();

ps: If you know how to use a base64 string as image input for ctx.drawImage() that would be nice.

Suisse
  • 3,467
  • 5
  • 36
  • 59