【问题标题】:Save email(header and body) as PDF programmatically in Thunderbird using JavaScript使用 JavaScript 在 Thunderbird 中以编程方式将电子邮件(标题和正文)保存为 PDF
【发布时间】:2017-08-22 23:30:06
【问题描述】:

我正在尝试在 Thunderbird 中以编程方式将电子邮件另存为 PDF。

我已经能够成功保存电子邮件的正文,但我无法包含标题(收件人、发件人、日期、主题等)。

我基本上想获得与文件 > 打印类似的输出。

以下是我正在使用的内容。

function printEmail() {
  var outputFormat = Components.interfaces.nsIPrintSettings.kOutputFormatPDF;

  var webBrowserPrint = window.content.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
    .getInterface(Components.interfaces.nsIWebBrowserPrint);

  var PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
    .getService(Components.interfaces.nsIPrintSettingsService);

  var printSettings = PSSVC.newPrintSettings;
  var printerName = "";
  try {
    printerName = "printer_" + PSSVC.defaultPrinterName.replace(" ", "_", "g");
  } catch (e) {
    alert(e);
  }

  printSettings.printToFile = true;
  printSettings.toFileName = completeFilePath;
  printSettings.printSilent = true;
  printSettings.outputFormat = outputFormat;

  webBrowserPrint.print(printSettings, null);
}

【问题讨论】:

    标签: thunderbird thunderbird-addon


    【解决方案1】:

    您使用的webBrowserPrint.print 功能似乎是通用功能,用于打印各种内容。我认为它是由更高级别的函数调用的。我试图追踪这一点,这就是我发现的。

    实现的 UI 打印命令 https://dxr.mozilla.org/thunderbird/source/mail/base/content/messageWindow.js

    调用PrintEnginePrint() 打开msgPrintEngine.xul 并触发OnLoadPrintEngine()

    更深处有一个对DisplayMessageForPrinting 的调用,它设置了一个标志mPrintingOperation。结果,正在打印的 url 会附加一个额外的参数&header=print

    我试图复制OnLoadPrintEngine() 所做的,在途中修改打印设置。但是,我无法让它工作:

    var webBrowserPrint = window.content.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIWebBrowserPrint);
    var PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"].getService(Components.interfaces.nsIPrintSettingsService);
    var printEngine = Components.classes["@mozilla.org/messenger/msgPrintEngine;1"].createInstance();
    printEngine = printEngine.QueryInterface(Components.interfaces.nsIMsgPrintEngine);
    printEngine.setWindow(window);
    var printSettings = PSSVC.globalPrintSettings; //Any changes to the settings go here.
    printEngine.startPrintOperation(printSettings);
    

    但是,这只会使我的 TB 窗口消失。

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 2017-05-28
      • 2021-05-14
      相关资源
      最近更新 更多