如何在ElectronJS中打印DIV

我正在尝试将我的网站转换为ElectronJS制作的应用程序

在我的网站上,我会打印带有条形码的div。这工作得很好,但是在electronjs中我无法达到这个目的。

本来我会用这个功能

$scope.printDiv = function (divName) {

var printContents = document.getElementById(divName).innerHTML;

var popupWin = window.open('', '_blank', 'width=500,height=500');

popupWin.document.open();

popupWin.document.write('<html><head><link rel="stylesheet" type="text/css" href="styles/main.css" type=\"text/css\" media=\"print\" /></head><body onload="window.print()">' + printContents + '</body></html>');

popupWin.document.close();

}

与electronicjs

我不知道如何传递对象进行打印。

我也试图从我可以加载的内容生成PDF。但PDF损坏

var windowPrint = require('electron').remote.BrowserWindow;

var fs = require('fs');

var newWindow = new windowPrint({width: 800, height: 600, show: false});

console.log(newWindow);

newWindow.loadURL('http://github.com');

newWindow.show();

newWindow.webContents.print({silent: true, printBackground: true});

newWindow.webContents.printToPDF({printSelectionOnly : true, printBackground: true}, function (error, data) {

if (error) {

throw error;

}

console.log(error);

console.log(data);

fs.writeFile('print.pdf', function (data, error) {

if (error) {

throw error;

}

console.log(error);

console.log(data);

});

});

有一种简单的方法可以用electronjs打印DIV?

感谢您的阅读。

回答:

加载完成之前,您已经打印了此页面。

我的方法:1.创建一个主窗口和一个(不可见的)工作窗口

import {app, BrowserWindow, Menu, ipcMain, shell} from "electron";

const os = require("os");

const fs = require("fs");

const path = require("path");

let mainWindow: Electron.BrowserWindow = undefined;

let workerWindow: Electron.BrowserWindow = undefined;

async function createWindow() {

mainWindow = new BrowserWindow();

mainWindow.loadURL("file://" + __dirname + "/index.html");

mainWindow.webContents.openDevTools();

mainWindow.on("closed", () => {

// close worker windows later

mainWindow = undefined;

});

workerWindow = new BrowserWindow();

workerWindow.loadURL("file://" + __dirname + "/worker.html");

// workerWindow.hide();

workerWindow.webContents.openDevTools();

workerWindow.on("closed", () => {

workerWindow = undefined;

});

}

// retransmit it to workerWindow

ipcMain.on("printPDF", (event: any, content: any) => {

console.log(content);

workerWindow.webContents.send("printPDF", content);

});

// when worker window is ready

ipcMain.on("readyToPrintPDF", (event) => {

const pdfPath = path.join(os.tmpdir(), 'print.pdf');

// Use default printing options

workerWindow.webContents.printToPDF({}).then((data) {

fs.writeFile(pdfPath, data, function (error) {

if (error) {

throw error

}

shell.openItem(pdfPath)

event.sender.send('wrote-pdf', pdfPath)

})

}).catch((error) => {

throw error;

})

});

2,mainWindow.html

<head>

</head>

<body>

<button id="btn"> Save </button>

<script>

const ipcRenderer = require("electron").ipcRenderer;

// cannot send message to other windows directly https://github.com/electron/electron/issues/991

function sendCommandToWorker(content) {

ipcRenderer.send("printPDF", content);

}

document.getElementById("btn").addEventListener("click", () => {

// send whatever you like

sendCommandToWorker("<h1> hello </h1>");

});

</script>

</body>

3,worker.html

<head> </head>

<body>

<script>

const ipcRenderer = require("electron").ipcRenderer;

ipcRenderer.on("printPDF", (event, content) => {

document.body.innerHTML = content;

ipcRenderer.send("readyToPrintPDF");

});

</script>

</body>

以上是 如何在ElectronJS中打印DIV 的全部内容, 来源链接: utcz.com/qa/417711.html

回到顶部