代码之家  ›  专栏  ›  技术社区  ›  John O

webcontents.printtopdf()总是返回长度为661字节的空数据

  •  0
  • John O  · 技术社区  · 6 年前

    我的代码如下所示:

    function pdfSettings(h, w) {
      var MICRONS_PER_IN = 25400;
    
      var option = {
          landscape: false,
          marginsType: 0,
          printBackground: true,
          printSelectionOnly: false,
          pageSize:{width:(w * MICRONS_PER_IN), height:(h * MICRONS_PER_IN)},
      };
      return option;
    }
    

      win.webContents.printToPDF(pdfSettings('8.25','5.375'), function(err, data) {
        fs.writeFile('/Users/me/.myapp/test.pdf', data, function (error) {
          if (err) {
              return console.log(err.message);
          }
          else { 
            console.log("shouldn't be here"); 
            console.log(data.length);
          }
        });
      });
    

    这将生成具有正确尺寸的新PDF文件,但为空。

    win 是一个新的BrowserWindow对象,我可以看到其中的内容。我怀疑这是BrowserWindow内容还不可用的问题,但是将它放在一个就绪事件中似乎没有任何作用,甚至根本无法阻止它开火。

    数据(和pdf文件大小)的长度始终为661字节,与browserwindow内容无关。可能是最小的pdf模板大小之类的。

    我使用wkhtmltopfd的后备策略是不可行的(一些css3功能不可用),所以我必须让它工作。

    1 回复  |  直到 6 年前
        1
  •  2
  •   John O    6 年前

    我不明白为什么,在点击“发布你的问题”30秒后,我总是自己想出来,我很想删除这个…但似乎没有其他版本,所以,这里。

    x.printtopdf()需要包装在WebContents对象的事件处理程序中,如下所示:

    win.webContents.on('did-finish-load', function() {
    

    did-finish-load 是此问题的正确事件。此外,复制粘贴事件名称以避免输入错误也不丢脸。