puppeteer创建PDF时能否引用本地文件?

问题一:

做一个生成PDF的功能,html在本地读取,不进行网络连接。
在根目录下有一个test.jpg的文件,现在我直接写相对路径生成的PDF是没有图片的。

请问该怎么写,图片可以被加载出来?

const puppeteer = require('puppeteer');
const fs = require("fs");


(async () => {

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    
    //不从网站读取
    // try {
    //     await page.goto('http://www.baidu.cn');
    // } catch (error) {
    //     console.log("进入网站主页失败"+ error)
    // }
   
    await page.setContent(`<img src="/images/test.jpg" alt="">
    <div>dddddddd</div>`); 



    try{
        await page.pdf({
            displayHeaderFooter: true,
            path: 'demo.pdf',
            format: 'A3',
            margin: 
            {
            top: "100px",
            bottom: "200px",
            right: "30px",
            left: "30px",
            }
            
        });
    }catch(err){
        console.log("error:" + err)
    }

    await page.once('load', () => console.log('我执行完毕了'));
    await browser.close();

})();

问题二:
puppeteer中page.pdf方法设置页眉时如何添加页数?

截图是官方的文档,但我该怎么写,才能获得pageNumber的值?

clipboard.png

阅读 4.8k
3 个回答

前几天我也玩了一下puppeteer

  1. 图片地址尝试用path.resolve去拼接一下,src=${path.resolve('/image/test.jpg')},当然你得先引一下path模块。
  2. google了下 headerTemplate 别人是这样用得, pageNumber是class名。。。
{
  displayHeaderFooter: true,
  footerTemplate: `
      <span class="pageNumber"></span>/<span class="totalPages"></span>
  `,
  format: 'A4'
}

多谢以上两位网友作答,谢谢。
问题已经解决了,虽然你们没有直接帮我解决,但,也给了思路,再次感谢。

回答下第一个问题:

我将page.goto直接引用到了目录下,就好了。可能它这个模块需要一个载体才能读取文件。

try {

    var pp = await page.goto(`file:${path.join(__dirname)}`);
} catch (error) {
    console.log("进入网站主页失败"+ error)
}

问题二:
目前我测试了,只有date管用,不过我已经用其他方法实现了,也就不考虑这个问题了。

你这个应用到底是网络应用还是本地应用,即你的node.js是部署在哪里的?服务器端?客户端?
如果是服务器端,然后想客户端访问本地资源都是不允许的(安全需要)
如果是单独的客户端(所有的都在客户端,html仅仅是一种GUI设计),则应该是可以的,建议你详细了解electron 之类的应用开发。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题