与nodejs的html2canvas类似的解决方案

时间:2017-07-20 06:59:54

标签: html css node.js html2canvas

我正在使用css,jquery和nodejs(使用ejs和express)创建一个网站,我需要导出一个带有一些文本的div和一些带有background-image的div作为图像(jpg或png)但是最好是pdf。我试图使用html2canvas,但后来我读到它与nodejs不兼容。 我也尝试过使用jspdf,但它不会导出pdf文件中的css。 所以我想知道是否有人知道可以用nodejs做到这一点的解决方案。

以下是我的ejs代码的例子:

<%for(var j = 0; j < rawData.scanner.length; ++j) {%>
<div class="grid" id="grid-<%= data.scanner[j].camera%>" 
    style="
    width : <%= parseFloat(data.widthScreen) + 17%>px; 
    height : <%= parseFloat(data.heightScreen) + 17%>px; 
    position : absolute;
    left : 0px;
    top : 60px;
    overflow-x : scroll;
    overflow-y : scroll;
    display : none;">
    <%for(var i = 0; i < data.scanner[j].parts; ++i) {%>
    <div class="fenetre" id=<%= data.scanner[j].name + "-img" + i%>
        style="
        background-image : url(<%= (data.scanner[j].imagePath)%>);
        width : <%= data.scanner[j].width%>px; 
        height : <%= data.scanner[j].height%>px; 
        position:absolute; 
        top: 0px; 
        left: <%= (i * data.scanner[j].left)%>px;"
    >
    </div>
    <%}%>
</div>
<%}%>

2 个答案:

答案 0 :(得分:1)

我知道这个问题很旧,但是最近我会尝试puppeteer

const puppeteer = require("puppeteer");

async function printPDF() {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto("http:///stackoverflow.com", {
    waitUntil: "networkidle0",
  });
  const pdf = await page.pdf({
    width: 1200,
    height: 1920,
    pageRanges: "1-2",
    path: "so.pdf",
  });

  await browser.close();
  return pdf;
}
printPDF();

另请参见HTML to PDF with Node.js

答案 1 :(得分:0)

尝试html-pdf,它在pdf文件中导出css,它也是一个npm包,因此它将与nodejs兼容。

安装:

$ npm install -g html-pdf

命令行示例:

$ html-pdf test/businesscard.html businesscard.pdf

代码示例:

var fs = require('fs');
var pdf = require('html-pdf');
var html = fs.readFileSync('./test/businesscard.html', 'utf8');
var options = { format: 'Letter' };

pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) {
  if (err) return console.log(err);
  console.log(res); // { filename: '/app/businesscard.pdf' } 
});