Angular Electron - Печать в PDF работает в разработке, но не в производстве - PullRequest
0 голосов
/ 07 апреля 2020

Я занимаюсь разработкой приложения Angular -Electron, в котором я использую функцию printToPDF электрона, которая работает для разработки. Я использую IP C для печати в PDF.

main.ts

const electron = require('electron')
const fs = require('fs');
const ipc = electron.ipcMain;
const shell = electron.shell;

ipc.handle('print-to-pdf', async (event)=> {
  console.log('called Print to PDF');
  let date = new Date().toISOString();
  var filePDFName = 'pdf_export' + date + '.pdf';
  var DonwloadsPath = path.resolve(app.getPath("downloads"), (filePDFName));

  const pdfPath = path.join(DonwloadsPath, '');
  const win = BrowserWindow.fromWebContents(event.sender);

  console.log('window contents received');

  win.webContents.printToPDF({}).then(data => {
    fs.writeFile(pdfPath, data, err => {
      if (err) return console.log(err.message);
      shell.openExternal('file://' + pdfPath);
      event.sender.send('write-pdf-complete', pdfPath);
      console.log('PDF written');
    })
  }).catch(error => {
    console.log(error)
  })
})

home.component.ts

const ipc = require('electron').ipcRenderer;

@NgModule({
  imports: [],
  exports: [HomeComponent],
  declarations: [HomeComponent],
  providers: [],
})
@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {
    saveToPDF() {
       console.log('button clickied')
       ipc.on('write-pdf-complete', (event, path) => {
          console.log('pdf writing complete');
       })
    }
}

ngOnInit(){
    var printPDFButton = document.getElementById('print-pdf');
    printPDFButton.addEventListener('click', event => {
       console.log('click event triggered');
       ipc.invoke('print-to-pdf');
    });
}

home.component.html

<button id='print-pdf' (click)="saveToPDF()">Save to PDF</button>

Это отлично работает в разработке, когда я готовлю PDF-файл для сохранения. Но когда я создаю exe, используя электронный упаковщик и в exe, когда я нажимаю на кнопку, ipcMain.handle вообще не вызывается. Просто чтобы быть уверенным, я также пытался использовать ipcMain.on , но возникает та же проблема. Вызывается ли main.ts по-другому для exe электрона? Пожалуйста, предложите что-нибудь.

...