webContents.printtoPDF () всегда возвращает пустые данные длиной 661 байт - PullRequest
0 голосов
/ 05 января 2019

Мой код выглядит следующим образом:

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 - это новый объект окна браузера, который был открыт, и я могу видеть его содержимое. Я подозреваю, что это какая-то проблема, связанная с тем, что содержимое окна браузера еще не доступно, но помещение этого события в готовое событие, похоже, ничего не делает или даже вообще предотвращает его запуск.

Длина данных (и размер файла pdf) всегда составляет 661 байт независимо от содержимого окна браузера. Вероятно, минимальный размер шаблона PDF или что-то.

Моя альтернативная стратегия использования wkhtmltopdf нежизнеспособна (некоторые функции css3 недоступны), поэтому я должен заставить эту работу работать.

1 Ответ

0 голосов
/ 05 января 2019

Я не понимаю психологию того, как, через 30 секунд после нажатия «Опубликовать свой вопрос» я всегда сам разбираюсь в этом, и мне хочется удалить это ... но другой версии, похоже, нет это на ТАК, так что здесь идет.

x.printToPDF () необходимо поместить в обработчик событий для объекта webContents, например:

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

did-finish-load является правильным событием для этой проблемы. Также нет ничего постыдного в том, чтобы копировать имена событий, чтобы избежать опечаток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...