Create Bibliography: Use HiddenBrowser to fix printing
This commit is contained in:
parent
120d4cfacd
commit
8e7d9927ef
1 changed files with 20 additions and 39 deletions
|
@ -27,6 +27,10 @@ Components.utils.import("resource://gre/modules/Services.jsm");
|
||||||
var { FilePicker } = ChromeUtils.importESModule('chrome://zotero/content/modules/filePicker.mjs');
|
var { FilePicker } = ChromeUtils.importESModule('chrome://zotero/content/modules/filePicker.mjs');
|
||||||
import { ImportCitaviAnnotatons } from 'zotero/import/citavi';
|
import { ImportCitaviAnnotatons } from 'zotero/import/citavi';
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyModuleGetters(globalThis, {
|
||||||
|
HiddenBrowser: 'chrome://zotero/content/HiddenBrowser.jsm',
|
||||||
|
});
|
||||||
|
|
||||||
/****Zotero_File_Exporter****
|
/****Zotero_File_Exporter****
|
||||||
**
|
**
|
||||||
* A class to handle exporting of items, collections, or the entire library
|
* A class to handle exporting of items, collections, or the entire library
|
||||||
|
@ -881,46 +885,23 @@ var Zotero_File_Interface = new function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(io.method == "print") {
|
if(io.method == "print") {
|
||||||
// printable bibliography, using a hidden browser
|
let browser = new HiddenBrowser({
|
||||||
var browser = Zotero.Browser.createHiddenBrowser(window);
|
useHiddenFrame: false
|
||||||
|
});
|
||||||
var listener = function() {
|
await browser.load(
|
||||||
if(browser.contentDocument.location.href == "about:blank") return;
|
"data:text/html;charset=utf-8," + encodeURIComponent(bibliography)
|
||||||
browser.removeEventListener("pageshow", listener, false);
|
|
||||||
|
|
||||||
// this is kinda nasty, but we have to temporarily modify the user's
|
|
||||||
// settings to eliminate the header and footer. the other way to do
|
|
||||||
// this would be to attempt to print with an embedded browser, but
|
|
||||||
// it's not even clear how to attempt to create one
|
|
||||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"].
|
|
||||||
getService(Components.interfaces.nsIPrefBranch);
|
|
||||||
var prefsToClear = ["print.print_headerleft", "print.print_headercenter",
|
|
||||||
"print.print_headerright", "print.print_footerleft",
|
|
||||||
"print.print_footercenter", "print.print_footerright"];
|
|
||||||
var oldPrefs = [];
|
|
||||||
for(var i in prefsToClear) {
|
|
||||||
oldPrefs[i] = prefService.getCharPref(prefsToClear[i]);
|
|
||||||
prefService.setCharPref(prefsToClear[i], "");
|
|
||||||
}
|
|
||||||
|
|
||||||
// print
|
|
||||||
browser.contentWindow.print();
|
|
||||||
|
|
||||||
// set the prefs back
|
|
||||||
for(var i in prefsToClear) {
|
|
||||||
prefService.setCharPref(prefsToClear[i], oldPrefs[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO can't delete hidden browser object here or else print will fail...
|
|
||||||
}
|
|
||||||
|
|
||||||
browser.addEventListener("pageshow", listener, false);
|
|
||||||
browser.loadURI(
|
|
||||||
Services.io.newURI("data:text/html;charset=utf-8," + encodeURI(bibliography)),
|
|
||||||
{
|
|
||||||
flags: Components.interfaces.nsIWebNavigation.LOAD_FLAGS_BYPASS_HISTORY
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
|
await browser.print({
|
||||||
|
overrideSettings: {
|
||||||
|
headerStrLeft: "",
|
||||||
|
headerStrCenter: "",
|
||||||
|
headerStrRight: "",
|
||||||
|
footerStrLeft: "",
|
||||||
|
footerStrCenter: "",
|
||||||
|
footerStrRight: "",
|
||||||
|
}
|
||||||
|
});
|
||||||
|
browser.destroy();
|
||||||
} else if(io.method == "save-as-html") {
|
} else if(io.method == "save-as-html") {
|
||||||
let fStream = await _saveBibliography(name, "HTML");
|
let fStream = await _saveBibliography(name, "HTML");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue