printing - 数据表:打印在Angular 9和Electron中不起作用

标签 printing datatable electron angular9

我最近有一个Android 9应用程序转换为Electron应用程序。
对于DataTable,我已启用“打印”和“Excel”选项。 Excel上传正常,可以导出数据。
但是打印无法正常工作。
它给出以下错误

TypeError: Cannot read property 'close' of undefined at _Api.action (buttons.print.js:140) at action (dataTables.buttons.js:559)

我可以看到button.print.js中的win.document为空。

同样,如果我将其构建为普通的ANgular应用程序(ng serve),则打印效果也很好

在Angular.JSON中,我按以下顺序加载了脚本
"node_modules/jquery/dist/jquery.min.js",
"node_modules/jquery/dist/jquery.js",
"node_modules/datatables.net/js/jquery.dataTables.js",
"node_modules/datatables.net-buttons/js/dataTables.buttons.js",
"node_modules/datatables.net-buttons/js/buttons.colVis.js",
"node_modules/datatables.net-buttons/js/buttons.flash.js",
"node_modules/datatables.net-buttons/js/buttons.html5.js",
"node_modules/datatables.net-buttons/js/buttons.print.js",
"node_modules/bootstrap/dist/js/bootstrap.min.js",
"node_modules/jszip/dist/jszip.js"

package.json文件如下
"dependencies": {
    "jquery": "^3.4.1",
    "datatables.net": "^1.10.19",
    "datatables.net-buttons": "^1.5.4",
    "datatables.net-buttons-dt": "^1.5.4",
    "datatables.net-dt": "^1.10.19",
    "@angular-devkit/build-angular": "^0.900.2",
    "@angular/animations": "~9.0.1",
    "@angular/common": "~9.0.1",
    "@angular/compiler": "~9.0.1",
    "@angular/core": "~9.0.1",
    "@angular/forms": "~9.0.1",
    "@angular/localize": "9.0.1",
    "@angular/platform-browser": "~9.0.1",
    "@angular/platform-browser-dynamic": "~9.0.1",
    "@angular/router": "~9.0.1",
    "@fortawesome/angular-fontawesome": "^0.3.0",
    "@fortawesome/fontawesome-svg-core": "^1.2.14",
    "@fortawesome/free-solid-svg-icons": "^5.7.1",
    "@ng-bootstrap/ng-bootstrap": "4.2.2",
    "angular-datatables": "^7.0.0",
    "bootstrap": "^4.3.1",
    "core-js": "^2.5.4",
    "cors": "^2.8.5",
    "express": "^4.16.4",
    "indexeddb-angular": "^0.1.8",
    "jszip": "^3.1.5",
    "luxon": "^1.16.0",
    "moment": "^2.24.0",
    "moment-timezone": "^0.5.23",
    "ngx-indexed-db": "^2.0.5",
    "ngx-material-timepicker": "^3.1.0",
    "ngx-multi-window": "0.3.2",
    "ngx-print": "^1.1.4",
    "popper.js": "^1.14.6",
    "rxjs": "~6.5.4",
    "tslib": "1.10.0",
    "zone.js": "~0.10.2"
  },
  "devDependencies": {
    "@angular-builders/custom-webpack": "8.4.1",
    "@angular-eslint/builder": "0.0.1-alpha.18",
    "@angular/cli": "9.0.2",
    "@angular/compiler-cli": "9.0.1",
    "@angular/language-service": "9.0.1",
    "@ngx-translate/core": "12.0.0",
    "@ngx-translate/http-loader": "4.0.0",
    "@types/datatables.net": "^1.10.14",
    "@types/datatables.net-buttons": "^1.4.0",
    "@types/jasmine": "3.3.16",
    "@types/jasminewd2": "2.0.8",
    "@types/jquery": "^3.3.29",
    "@types/mocha": "5.2.7",
    "@types/node": "12.11.1",
    "@typescript-eslint/eslint-plugin": "2.19.0",
    "@typescript-eslint/parser": "2.19.0",
    "chai": "4.2.0",
    "codelyzer": "5.1.2",
    "conventional-changelog-cli": "2.0.32",
    "core-js": "3.1.4",
    "cross-env": "7.0.0",
    "electron": "8.0.0",
    "electron-builder": "22.3.2",
    "electron-reload": "1.5.0",
    "eslint": "6.8.0",
    "eslint-plugin-import": "2.20.1",
    "jasmine-core": "3.4.0",
    "jasmine-spec-reporter": "4.2.1",
    "karma": "4.2.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "2.1.1",
    "karma-electron": "6.3.0",
    "karma-jasmine": "2.0.1",
    "karma-jasmine-html-reporter": "1.4.2",
    "mocha": "6.2.2",
    "ngx-electron": "2.2.0",
    "npm-run-all": "4.1.5",
    "protractor": "~5.4.0",
    "spectron": "10.0.1",
    "ts-node": "8.3.0",
    "tslint": "~5.11.0",
    "typescript": "3.7.5",
    "wait-on": "4.0.0",
    "webdriver-manager": "12.1.7"
  },

关于此的任何指示将有所帮助

最佳答案

帖子中提供的信息对我有所帮助(angular application build in electron print a div shows blank window)。

答案是:在main.ts中,对于 Electron ,需要添加
nativeWindowOpen:如下所示为true。

win = new BrowserWindow({
    x: 0,
    y: 0,
    width: size.width,
    height: size.height,
    webPreferences: {
      nodeIntegration: true,
      nativeWindowOpen: true, //**** add this**
      allowRunningInsecureContent: (serve) ? true : false,
    },
  });

关于printing - 数据表:打印在Angular 9和Electron中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60236676/

相关文章:

javascript - IE中的window.print函数

c# - 在 C# 中向打印机发送 ESC 命令

javascript - 从 html 页面打印表格

c# - 使用 DataTable 时出现 IndexOutOfRange 异常

javascript - 与 Electron 生成器的文件关联

reactjs - 在 Electron 1.5 中导出/导入自定义 JSX 组件(ES6 模块)

javascript - Windows 商店应用程序 - 打印特定的 div

jquery - 没有嵌套的 DataTables 详细信息行

javascript - 未捕获的类型错误 : $(. ..)。Datatable 不是函数。但在我调用 datatable 之前 Jquery 已经加载了

javascript - [Electron][OSX] 始终显示托盘图标