如何使用Node JS / Webdriver.io / Chimp打印到PDF?

时间:2018-05-04 03:57:06

标签: node.js webdriver webdriver-io chimp.js

我正在尝试使用Node JS中的Chimp / Webdriver.io / Selenium来测试我的@media print CSS,以确保当人们从我的网站打印时,一切都正确显示。

我如何以编程方式将Chrome / Firefox打印为PDF?我不想将屏幕截图转换为PDF。我希望PDF看起来像打印时的样子。

然后,我如何扫描PDF以确保结果正确?

1 个答案:

答案 0 :(得分:0)

成功!我必须安装/使用以下工具:

npm install html-pdf-chrome --save-dev
npm install pdfreader --save-dev

html-pdf-chrome用于神奇地调用Chrome,以Chrome通常用于打印的方式将某些HTML转换为PDF。 pdfreader是一个包,它读取所述PDF,然后在其中提供文本。

浏览到我想用webdriver打印的页面后,我可以打电话:

this.When(/^I print the page to a PDF named "([^"]*)"$/,
  async function(outputFilename) {

    console.log("Getting the html...");
    let sourceHTML = await browser.getSource();

    console.log("Printing the html using Chrome...");
    let pdf = await HtmlPdf.create(sourceHTML);

    console.log("Saving the PDF to " + outputFilename + "...");
    await pdf.toFile(path.join(DEFAULT_PRINT_PATH, outputFilename));
  });

然后,为了获得PDF中的文本,我将此函数称为:

function readPdfText(filename) {
  return new Promise((resolve, reject) => {
    let pdfText = "";
    new pdfReader.PdfReader().parseFileItems(path.join(DEFAULT_PRINT_PATH, filename), function(err, item){
      if (err){
        console.log("Error received on parsing PDF: " + err, err.stack);
        reject(err);
      }
      else if (!item) {
        resolve(pdfText);
      }
      else if (item.text) {
        if(item.text.trim() === ":") {
          pdfText += item.text;
        } else {
          pdfText += "\n" + item.text;
        }
      }
    });
  });
}