使用 JavaScript 在 Thunderbird 中以编程方式将电子邮件(标头和正文)保存为 PDF



我正在尝试在 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);
}

您正在使用的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);

但是,这只会导致我的结核病窗口消失。

相关内容

  • 没有找到相关文章

最新更新