You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gtk.PrintOperation.PRINT无对话框打印事件未触发如何解决?

无对话框GTK打印不触发事件的解决方法

调整步骤

  • 确认打印配置中的打印机信息有效:跳过打印对话框后系统不会自动选择默认打印机,你保存的printsettings.conf必须包含合法的打印机名称。可以在加载配置后加一行校验:
console.log('当前配置的打印机:', printSettings.getString('printer'))

如果返回空值,需要重新用对话框流程选一次打印机再导出配置,或者手动调用printSettings.setPrinter('你的打印机名称')指定打印机。如果配置为打印到文件,需要确认output-file路径存在且有写入权限。

  • 放开allow-async配置:注释掉的allow-async: true必须开启,node-gtk依赖这个参数正确派发打印相关的异步事件。
  • 校验配置加载结果:loadFile方法会返回布尔值表示加载是否成功,建议加判断避免配置文件异常:
const pageSetupLoaded = pageSetup.loadFile(Assets.absoluteFilePath('pagesetup.conf'))
const settingsLoaded = printSettings.loadFile(Assets.absoluteFilePath('printsettings.conf'))
if (!pageSetupLoaded || !settingsLoaded) {
  console.error('打印配置加载失败')
  return
}

修改后完整代码

botao2.on('clicked', () => {
  let printSettings = new Gtk.PrintSettings();
  let pageSetup = new Gtk.PageSetup();
  // 校验配置加载结果
  const pageSetupLoaded = pageSetup.loadFile(Assets.absoluteFilePath('pagesetup.conf'));
  const settingsLoaded = printSettings.loadFile(Assets.absoluteFilePath('printsettings.conf'));
  if (!pageSetupLoaded || !settingsLoaded) {
    console.error('打印配置加载失败');
    return;
  }
  // 校验打印机配置是否存在
  if (!printSettings.getString('printer')) {
    // 手动指定打印机,或者重新导出带打印机信息的配置
    printSettings.setPrinter('你的实际打印机名称');
  }
  let print = new Gtk.PrintOperation({
    'allow-async': true, // 开启异步支持
  });
  print.setUnit(Gtk.Unit.NONE);
  print.setPrintSettings(printSettings);
  print.setDefaultPageSetup(pageSetup);
  print.setUseFullPage(true);
  print.setShowProgress(true);

  console.log({ pageSetup, printSettings });

  print.on('begin-print', (printContext, num) => {
    print.nPages = 1;
    width = Math.floor(printContext.getWidth());
    height = Math.floor(printContext.getHeight());
  });

  print.on('draw-page', (printContext) => {
    console.log('draw-page', printContext);
  });

  print.on('status-changed', (...args) => {
    console.log('status-changed', args);
  });

  print.on('done', (res) => {
    console.log('done', res);
  });

  console.log(print.run(Gtk.PrintOperationAction.PRINT));
});

内容的提问来源于stack exchange,提问作者rogeriojlle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:54:04