我正在尝试在 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);
但是,这只会导致我的结核病窗口消失。