From 69c900f09273fc886609ef7302a08e18509d7dbc Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Thu, 22 Feb 2024 21:34:47 +0100 Subject: [PATCH 01/15] pref pane working in Z7 pref pane working in Z7 pref pane working in Z7 pref pane working in Z7 --- build.sh | 8 +- src-z6/chrome.manifest | 7 + src-z6/chrome/content/overlay.xul | 32 ++ src-z6/chrome/content/preferences.xul | 61 ++++ src-z6/chrome/content/zoteroocr.js | 234 +++++++++++++ src-z6/chrome/locale/en-US/zoteroocr.dtd | 2 + .../chrome/locale/en-US/zoteroocr.properties | 0 .../skin/default/zoteroocr/ubmannheim.png | Bin 0 -> 18131 bytes .../default/zoteroocr/ubmannheim32x32.png | Bin 0 -> 1112 bytes .../default/zoteroocr/ubmannheim64x64.png | Bin 0 -> 2256 bytes src-z6/defaults/preferences/defaults.js | 7 + src-z6/install.rdf | 34 ++ src-z6/update.rdf | 30 ++ src-z7/bootstrap.js | 42 +++ src-z7/locale/.DS_Store | Bin 0 -> 6148 bytes src-z7/locale/en-US/zotero-ocr.ftl | 5 + src-z7/manifest.json | 19 ++ src-z7/prefs.js | 6 + src-z7/prefs.xhtml | 26 ++ src-z7/style.css | 7 + src-z7/ubmannheim.png | Bin 0 -> 18131 bytes src-z7/ubmannheim32x32.png | Bin 0 -> 1112 bytes src-z7/ubmannheim64x64.png | Bin 0 -> 2256 bytes src-z7/updates.json | 18 + src-z7/zotero-ocr.js | 310 ++++++++++++++++++ 25 files changed, 846 insertions(+), 2 deletions(-) create mode 100644 src-z6/chrome.manifest create mode 100644 src-z6/chrome/content/overlay.xul create mode 100644 src-z6/chrome/content/preferences.xul create mode 100644 src-z6/chrome/content/zoteroocr.js create mode 100644 src-z6/chrome/locale/en-US/zoteroocr.dtd create mode 100644 src-z6/chrome/locale/en-US/zoteroocr.properties create mode 100644 src-z6/chrome/skin/default/zoteroocr/ubmannheim.png create mode 100644 src-z6/chrome/skin/default/zoteroocr/ubmannheim32x32.png create mode 100644 src-z6/chrome/skin/default/zoteroocr/ubmannheim64x64.png create mode 100644 src-z6/defaults/preferences/defaults.js create mode 100644 src-z6/install.rdf create mode 100644 src-z6/update.rdf create mode 100644 src-z7/bootstrap.js create mode 100644 src-z7/locale/.DS_Store create mode 100644 src-z7/locale/en-US/zotero-ocr.ftl create mode 100644 src-z7/manifest.json create mode 100644 src-z7/prefs.js create mode 100644 src-z7/prefs.xhtml create mode 100644 src-z7/style.css create mode 100644 src-z7/ubmannheim.png create mode 100644 src-z7/ubmannheim32x32.png create mode 100644 src-z7/ubmannheim64x64.png create mode 100644 src-z7/updates.json create mode 100644 src-z7/zotero-ocr.js diff --git a/build.sh b/build.sh index 7a23b1e..050d7e9 100755 --- a/build.sh +++ b/build.sh @@ -5,6 +5,10 @@ if [ -z "$version" ]; then read -p "Enter new version number: " version fi +mkdir build-z6 +rm -f build-z6/*.xpi +cd src-z6 && zip -r ../build-z6/zotero-ocr-${version}.xpi chrome/* defaults/* chrome.manifest install.rdf && cd .. -rm -f zotero-ocr-${version}.xpi -zip -r zotero-ocr-${version}.xpi chrome/* defaults/* chrome.manifest install.rdf +mkdir build-z7 +rm -f build-z7/*.xpi +cd src-z7 && zip -r ../build-z7/zotero-ocr-${version}.xpi * && cd .. diff --git a/src-z6/chrome.manifest b/src-z6/chrome.manifest new file mode 100644 index 0000000..e930f02 --- /dev/null +++ b/src-z6/chrome.manifest @@ -0,0 +1,7 @@ +content zoteroocr chrome/content/ + +overlay chrome://zotero/content/zoteroPane.xul chrome://zoteroocr/content/overlay.xul + +locale zoteroocr en-US chrome/locale/en-US/ + +skin zoteroocr default chrome/skin/default/zoteroocr/ diff --git a/src-z6/chrome/content/overlay.xul b/src-z6/chrome/content/overlay.xul new file mode 100644 index 0000000..528b12f --- /dev/null +++ b/src-z6/chrome/content/overlay.xul @@ -0,0 +1,32 @@ + + + + + + + \n\n'; + Zotero.File.putContents(htmlfile, pagecontent); + yield Zotero.Attachments.linkFromFile({ + file: OS.Path.join(dir, pagename), + contentType: "text/html", + parentItemID: item.id + }); + } + } + + // attach PDF if it is a new one + if (Zotero.Prefs.get("zoteroocr.outputPDF") && !(Zotero.Prefs.get("zoteroocr.overwritePDF"))) { + yield Zotero.Attachments.linkFromFile({ + file: ocrbase + '.pdf', + parentItemID: item.id + }); + } + + if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { + // delete image list + yield Zotero.File.removeIfExists(imageList); + // delete PNGs + for (let imageName of imageListArray) { + yield Zotero.File.removeIfExists(imageName); + } + } + } + }); + +}; diff --git a/src-z6/chrome/locale/en-US/zoteroocr.dtd b/src-z6/chrome/locale/en-US/zoteroocr.dtd new file mode 100644 index 0000000..256f175 --- /dev/null +++ b/src-z6/chrome/locale/en-US/zoteroocr.dtd @@ -0,0 +1,2 @@ + + diff --git a/src-z6/chrome/locale/en-US/zoteroocr.properties b/src-z6/chrome/locale/en-US/zoteroocr.properties new file mode 100644 index 0000000..e69de29 diff --git a/src-z6/chrome/skin/default/zoteroocr/ubmannheim.png b/src-z6/chrome/skin/default/zoteroocr/ubmannheim.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7011011387ddf99bd323f96f798faf686ee85e GIT binary patch literal 18131 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 BsfYjo literal 0 HcmV?d00001 diff --git a/src-z6/chrome/skin/default/zoteroocr/ubmannheim32x32.png b/src-z6/chrome/skin/default/zoteroocr/ubmannheim32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..394edbe0c296cc235f9a39550e99beca10dfdfdb GIT binary patch literal 1112 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 e!U`+=?C^hcW`TU7akn`D0000 + + + chrome://zoteroocr/content/preferences.xul + 2 + + + zotero@chnm.gmu.edu + 5.0 + 6.* + + + + + juris-m@juris-m.github.io + 5.0 + 6.* + + + + diff --git a/src-z6/update.rdf b/src-z6/update.rdf new file mode 100644 index 0000000..ed838cb --- /dev/null +++ b/src-z6/update.rdf @@ -0,0 +1,30 @@ + + + + + + + + 0.6.0 + + + zotero@chnm.gmu.edu + 6.0 + 7.* + https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.0/zotero-ocr-0.6.0.xpi + + + + + juris-m@juris-m.github.io + 6.0 + 7.* + https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.0/zotero-ocr-0.6.0.xpi + + + + + + + + diff --git a/src-z7/bootstrap.js b/src-z7/bootstrap.js new file mode 100644 index 0000000..20a7b1b --- /dev/null +++ b/src-z7/bootstrap.js @@ -0,0 +1,42 @@ +var ZoteroOCR; + +function log(msg) { + Zotero.debug("Zotero OCR: " + msg); +} + +function install() { + log("Installed Zotero OCR"); +} + +async function startup({ id, version, rootURI }) { + log("Starting Zotero OCR"); + + Zotero.PreferencePanes.register({ + pluginID: 'zotero-ocr@bib.uni-mannheim.de', + src: rootURI + 'prefs.xhtml', + //scripts: [rootURI + 'prefs.js'] + }); + + Services.scriptloader.loadSubScript(rootURI + 'zotero-ocr.js'); + ZoteroOCR.init({ id, version, rootURI }); + ZoteroOCR.addToAllWindows(); + await ZoteroOCR.main(); +} + +function onMainWindowLoad({ window }) { + ZoteroOCR.addToWindow(window); +} + +function onMainWindowUnload({ window }) { + ZoteroOCR.removeFromWindow(window); +} + +function shutdown() { + log("Shutting down Zotero OCR"); + ZoteroOCR.removeFromAllWindows(); + ZoteroOCR = undefined; +} + +function uninstall() { + log("Uninstalled Zotero OCR"); +} diff --git a/src-z7/locale/.DS_Store b/src-z7/locale/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f64f51d3adac4e65e5ad6ff1dccc466098c9ac28 GIT binary patch literal 6148 zcmeHKy-LJD5T4OH2-sXDmRs3boM7#G#3u;$l8bmn&OH$OypS&;_+EbVqg*s#rHIVH z?l(I-vp-+R&Mp!0>Zw~2Er_T>5oA#&M9h<22ktxvvX0SokL$iIrJoq)Z<=K7bGoAk zI-?sJt$)wl-!GeW+3tJ~7vrF9sq3~cEv(h?`RViJ%j?x=kM0|f-DZCV`5Ym^Krj#t z1Ovgq&oF?TEm9pBMjZ?U1Hr%t19Cnj6v6B`80yi1N}mA08O$os_3{c#VgP2x!4MV* zTPV;%*`F9};jkz7%Z`Jgg%j({7{_ORf4s0?ojIvHaW;%P7zhT&3>;c>A^HCrztZF* ze;g96U?3RyXAJPHZt4{_<+=6C_9WLPlv@-L@f$>eK-W|Z)KrXyoFgaNY5hrb^k>Jx UP(~5Eh6CdwpoByf4EzEEZ!iihf&c&j literal 0 HcmV?d00001 diff --git a/src-z7/locale/en-US/zotero-ocr.ftl b/src-z7/locale/en-US/zotero-ocr.ftl new file mode 100644 index 0000000..9050944 --- /dev/null +++ b/src-z7/locale/en-US/zotero-ocr.ftl @@ -0,0 +1,5 @@ +ocr-selected-pdfs = + .label = OCR selected PDF(s) + +ocr-preferences = + .label = Zotero OCR Preferences diff --git a/src-z7/manifest.json b/src-z7/manifest.json new file mode 100644 index 0000000..ac6877c --- /dev/null +++ b/src-z7/manifest.json @@ -0,0 +1,19 @@ +{ + "manifest_version": 2, + "name": "Zotero OCR", + "version": "0.6.1", + "description": "Zotero Plugin for OCR", + "author": "Philipp Zumstein", + "icons": { + "32": "ubmannheim32x32.png", + "64": "ubmannheim64x64.png" + }, + "applications": { + "zotero": { + "id": "zotero-ocr@bib.uni-mannheim.de", + "update_url": "https://raw.githubusercontent.com/UB-Mannheim/zotero-ocr/master/update.json", + "strict_min_version": "6.999", + "strict_max_version": "7.0.*" + } + } +} \ No newline at end of file diff --git a/src-z7/prefs.js b/src-z7/prefs.js new file mode 100644 index 0000000..7238aa6 --- /dev/null +++ b/src-z7/prefs.js @@ -0,0 +1,6 @@ +pref("extensions.zotero.zoteroocr.outputNote", true); +pref("extensions.zotero.zoteroocr.outputPDF", true); +pref("extensions.zotero.zoteroocr.overwritePDF", false); +pref("extensions.zotero.zoteroocr.outputHocr", true); +pref("extensions.zotero.zoteroocr.outputPNG", true); +pref("extensions.zotero.zoteroocr.maximumPagesAsHtml", "5"); diff --git a/src-z7/prefs.xhtml b/src-z7/prefs.xhtml new file mode 100644 index 0000000..152276d --- /dev/null +++ b/src-z7/prefs.xhtml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + diff --git a/src-z7/style.css b/src-z7/style.css new file mode 100644 index 0000000..57e6e0a --- /dev/null +++ b/src-z7/style.css @@ -0,0 +1,7 @@ +.row { + color: red; +} + +window[data-green-instead] .row { + color: green; +} diff --git a/src-z7/ubmannheim.png b/src-z7/ubmannheim.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7011011387ddf99bd323f96f798faf686ee85e GIT binary patch literal 18131 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 BsfYjo literal 0 HcmV?d00001 diff --git a/src-z7/ubmannheim32x32.png b/src-z7/ubmannheim32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..394edbe0c296cc235f9a39550e99beca10dfdfdb GIT binary patch literal 1112 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 e!U`+=?C^hcW`TU7akn`D0000 { + //ZoteroOCR.toggleGreen(window, menuitem.checked); + ZoteroOCR.recognize(); + }); + doc.getElementById('menu_ToolsPopup').appendChild(menuitem); + this.storeAddedElement(menuitem); + }, + + addToAllWindows() { + var windows = Zotero.getMainWindows(); + for (let win of windows) { + if (!win.ZoteroPane) continue; + this.addToWindow(win); + } + }, + + storeAddedElement(elem) { + if (!elem.id) { + throw new Error("Element must have an id"); + } + this.addedElementIDs.push(elem.id); + }, + + removeFromWindow(window) { + var doc = window.document; + // Remove all elements added to DOM + for (let id of this.addedElementIDs) { + doc.getElementById(id)?.remove(); + } + doc.querySelector('[href="zotero-ocr.ftl"]').remove(); + }, + + removeFromAllWindows() { + var windows = Zotero.getMainWindows(); + for (let win of windows) { + if (!win.ZoteroPane) continue; + this.removeFromWindow(win); + } + }, + + toggleGreen(window, enabled) { + window.document.documentElement + .toggleAttribute('data-green-instead', enabled); + }, + + async recognize() { + + // Look for the tesseract executable in the settings and at commonly used locations. + // If it is found, the settings are updated. + // Otherwise abort with an alert. + let ocrEngine = Zotero.Prefs.get("zoteroocr.ocrPath"); + let found = false; + if (ocrEngine) { + let pathOrFile = FileUtils.File(ocrEngine); + // If a directory is given, then try for the standard name of the tool. + if (pathOrFile.isDirectory()) { + if (Zotero.isWin) { + ocrEngine = OS.Path.join(ocrEngine, "tesseract.exe"); + } + else { + ocrEngine = OS.Path.join(ocrEngine, "tesseract"); + } + Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); + } + found = await OS.File.exists(ocrEngine); + } + else { + let path = ["", "/usr/local/bin/", "/usr/bin/", "C:\\Program Files\\Tesseract-OCR\\", "/opt/homebrew/bin/", "/usr/local/homebrew/bin/"]; + for (ocrEngine of path) { + ocrEngine += "tesseract"; + if (Zotero.isWin) { + ocrEngine += ".exe"; + } + if (await OS.File.exists(ocrEngine)) { + found = true; + Zotero.debug("Found " + ocrEngine); + Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); + break; + } + Zotero.debug("No " + ocrEngine); + } + } + if (!found) { + alert("Tesseract executable not found. Tried: " + ocrEngine); + return; + } + + // Use the special pdfinfo variant in the zotero directory (which comes along Zotero) + // See https://developer.mozilla.org/en-US/docs/Archive/Add-ons/Code_snippets/File_I_O#Getting_special_files + // and https://dxr.mozilla.org/mozilla-central/source/xpcom/io/nsDirectoryServiceDefs.h. + let zdir = FileUtils.getDir('GreBinD', []); + let pdfinfo = zdir.clone(); + pdfinfo.append("pdfinfo"); + pdfinfo = pdfinfo.path; + if (Zotero.isWin) { + pdfinfo = pdfinfo + ".exe"; + } + if (! (await OS.File.exists(pdfinfo)) ) { + alert("No " + pdfinfo + " executable found."); + return; + } + + // Look for a specific path in the preferences for pdftoppm + let pdftoppm = Zotero.Prefs.get("zoteroocr.pdftoppmPath"); + if (!pdftoppm) { + // alternatively use the also the Zotero directory to look for pdftoppm + pdftoppm = zdir.clone(); + pdftoppm.append("pdftoppm"); + pdftoppm = pdftoppm.path; + } + if (Zotero.isWin && !(pdftoppm.endsWith(".exe"))) { + pdftoppm = pdftoppm + ".exe"; + } + if (!(await OS.File.exists(pdftoppm))) { + alert("No " + pdftoppm + " executable found."); + return; + } + + let items = Zotero.getActiveZoteroPane().getSelectedItems(); + for (let item of items) { + // find the PDF + let pdfItem; + if (item.isAttachment()) { + if (item.isFileAttachment() && item.attachmentContentType == 'application/pdf') { + pdfItem = item; + item = Zotero.Items.get(item.parentItemID); + } + else { + alert("Item is attachment but not PDF and will be ignored."); + continue; + } + } + else { + let pdfAttachments = item.getAttachments(false) + .map(itemID => Zotero.Items.get(itemID)) + .filter(att => att.isFileAttachment() && att.attachmentContentType == 'application/pdf'); + if (pdfAttachments.length == 0) { + alert("No PDF found for the selected item."); + continue; + } + if (pdfAttachments.length > 1) { + alert("There are several PDFs attached to this item. Only the first one will be processed."); + } + pdfItem = pdfAttachments[0]; + } + let pdf = pdfItem.getFilePath(); + let base = pdf.replace(/\.pdf$/, ''); + let dir = OS.Path.dirname(pdf); + let infofile = dir + '/pdfinfo.txt'; + let ocrbase = Zotero.Prefs.get("zoteroocr.overwritePDF") ? base : base + '.ocr'; + // TODO filter out PDFs which have already a text layer + + // extract images from PDF + let imageList = OS.Path.join(dir, 'image-list.txt'); + if (!(await OS.File.exists(imageList))) { + try { + Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); + await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); + Zotero.debug("Running " + pdftoppm + ' -png -r 300 ' + pdf + ' ' + dir + '/page'); + await Zotero.Utilities.Internal.exec(pdftoppm, ['-png', '-r', 300, pdf, dir + '/page']); + } + catch (e) { + Zotero.logError(e); + } + // save the list of images in a separate file + let info = await Zotero.File.getContentsAsync(infofile); + let numPages = info.match('Pages:[^0-9]+([0-9]+)')[1]; + var imageListArray = []; + for (let i = 1; i <= parseInt(numPages, 10); i++) { + let paddedIndex = "0".repeat(numPages.length) + i; + imageListArray.push(dir + '/page-' + paddedIndex.substr(-numPages.length) + '.png'); + } + Zotero.File.putContents(Zotero.File.pathToFile(imageList), imageListArray.join('\n')); + } + + let parameters = [dir + '/image-list.txt']; + parameters.push(ocrbase); + if (Zotero.Prefs.get("zoteroocr.language")) { + parameters.push('-l'); + parameters.push(Zotero.Prefs.get("zoteroocr.language")); + } + parameters.push('txt'); + if (Zotero.Prefs.get("zoteroocr.outputPDF")) { + parameters.push('pdf'); + } + if (Zotero.Prefs.get("zoteroocr.outputHocr")) { + parameters.push('hocr'); + } + try { + Zotero.debug("Running " + ocrEngine + ' ' + parameters.join(' ')); + await Zotero.Utilities.Internal.exec(ocrEngine, parameters); + } + catch (e) { + Zotero.logError(e); + } + + if (Zotero.Prefs.get("zoteroocr.outputNote")) { + let contents = await Zotero.File.getContentsAsync(ocrbase + '.txt'); + contents = contents.replace(/(?:\r\n|\r|\n)/g, '
'); + let newNote = new Zotero.Item('note'); + newNote.setNote(contents); + newNote.parentID = item.id; + await newNote.saveTx(); + } + + + if (Zotero.Prefs.get("zoteroocr.outputHocr")) { + let contents = await Zotero.File.getContentsAsync(ocrbase + '.hocr'); + // replace the absolute paths of images with relative ones + let escapedDir = dir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + let regexp = new RegExp(escapedDir + "/", 'g'); + contents = contents.replace(regexp, ''); + // split content into the preamble and pages + contents = contents.replace("\n", ''); + let parts = contents.split("
\n\n'; + Zotero.File.putContents(htmlfile, pagecontent); + await Zotero.Attachments.linkFromFile({ + file: OS.Path.join(dir, pagename), + contentType: "text/html", + parentItemID: item.id + }); + } + } + + // attach PDF if it is a new one + if (Zotero.Prefs.get("zoteroocr.outputPDF") && !(Zotero.Prefs.get("zoteroocr.overwritePDF"))) { + await Zotero.Attachments.linkFromFile({ + file: ocrbase + '.pdf', + parentItemID: item.id + }); + } + + if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { + // delete image list + await Zotero.File.removeIfExists(imageList); + // delete PNGs + for (let imageName of imageListArray) { + await Zotero.File.removeIfExists(imageName); + } + } + } + }, + + async main() { + // Global properties are included automatically in Zotero 7 + var host = new URL('https://foo.com/path').host; + this.log(`Host is ${host}`); + + // Retrieve a global pref + this.log(`Intensity is ${Zotero.Prefs.get('extensions.make-it-red.intensity', true)}`); + }, +}; From c42d192394b4d8bc2274bd449b305a40a6f1ef0f Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Fri, 23 Feb 2024 06:25:57 +0100 Subject: [PATCH 02/15] alert() messages fix --- src-z7/zotero-ocr.js | 587 ++++++++++++++++++++++--------------------- 1 file changed, 294 insertions(+), 293 deletions(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index b3191ae..ae29762 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -6,305 +6,306 @@ Components.utils.import("resource://gre/modules/osfile.jsm"); ZoteroOCR = { - id: null, - version: null, - rootURI: null, - initialized: false, - addedElementIDs: [], - - init({ id, version, rootURI }) { - if (this.initialized) return; - this.id = id; - this.version = version; - this.rootURI = rootURI; - this.initialized = true; - }, - - log(msg) { - Zotero.debug("ZoteroOCR: " + msg); - }, - - addToWindow(window) { - let doc = window.document; - - // Add a stylesheet to the main Zotero pane - let link1 = doc.createElement('link'); - link1.id = 'make-it-red-stylesheet'; - link1.type = 'text/css'; - link1.rel = 'stylesheet'; - link1.href = this.rootURI + 'style.css'; - doc.documentElement.appendChild(link1); - this.storeAddedElement(link1); - - // Use Fluent for localization - window.MozXULElement.insertFTLIfNeeded("zotero-ocr.ftl"); - - // Add menu option - let menuitem = doc.createXULElement('menuitem'); - menuitem.id = 'ocr-selected-pdfs'; - menuitem.setAttribute('type', 'checkbox'); - menuitem.setAttribute('data-l10n-id', 'ocr-selected-pdfs'); - // MozMenuItem#checked is available in Zotero 7 - menuitem.addEventListener('command', () => { - //ZoteroOCR.toggleGreen(window, menuitem.checked); - ZoteroOCR.recognize(); - }); - doc.getElementById('menu_ToolsPopup').appendChild(menuitem); - this.storeAddedElement(menuitem); - }, - - addToAllWindows() { - var windows = Zotero.getMainWindows(); - for (let win of windows) { - if (!win.ZoteroPane) continue; - this.addToWindow(win); - } - }, - - storeAddedElement(elem) { - if (!elem.id) { - throw new Error("Element must have an id"); - } - this.addedElementIDs.push(elem.id); - }, - - removeFromWindow(window) { - var doc = window.document; - // Remove all elements added to DOM - for (let id of this.addedElementIDs) { - doc.getElementById(id)?.remove(); - } - doc.querySelector('[href="zotero-ocr.ftl"]').remove(); - }, - - removeFromAllWindows() { - var windows = Zotero.getMainWindows(); - for (let win of windows) { - if (!win.ZoteroPane) continue; - this.removeFromWindow(win); - } - }, - - toggleGreen(window, enabled) { - window.document.documentElement - .toggleAttribute('data-green-instead', enabled); - }, - - async recognize() { + id: null, + version: null, + rootURI: null, + initialized: false, + addedElementIDs: [], + + init({ id, version, rootURI }) { + if (this.initialized) return; + this.id = id; + this.version = version; + this.rootURI = rootURI; + this.initialized = true; + }, + + log(msg) { + Zotero.debug("ZoteroOCR: " + msg); + }, + + addToWindow(window) { + let doc = window.document; + + // Add a stylesheet to the main Zotero pane + let link1 = doc.createElement('link'); + link1.id = 'make-it-red-stylesheet'; + link1.type = 'text/css'; + link1.rel = 'stylesheet'; + link1.href = this.rootURI + 'style.css'; + doc.documentElement.appendChild(link1); + this.storeAddedElement(link1); + + // Use Fluent for localization + window.MozXULElement.insertFTLIfNeeded("zotero-ocr.ftl"); + + // Add menu option + let menuitem = doc.createXULElement('menuitem'); + menuitem.id = 'ocr-selected-pdfs'; + menuitem.setAttribute('type', 'checkbox'); + menuitem.setAttribute('data-l10n-id', 'ocr-selected-pdfs'); + // MozMenuItem#checked is available in Zotero 7 + menuitem.addEventListener('command', () => { + //ZoteroOCR.toggleGreen(window, menuitem.checked); + ZoteroOCR.recognize(window); + }); + doc.getElementById('menu_ToolsPopup').appendChild(menuitem); + this.storeAddedElement(menuitem); + }, + + addToAllWindows() { + var windows = Zotero.getMainWindows(); + for (let win of windows) { + if (!win.ZoteroPane) continue; + this.addToWindow(win); + } + }, + + storeAddedElement(elem) { + if (!elem.id) { + throw new Error("Element must have an id"); + } + this.addedElementIDs.push(elem.id); + }, + + removeFromWindow(window) { + var doc = window.document; + // Remove all elements added to DOM + for (let id of this.addedElementIDs) { + doc.getElementById(id)?.remove(); + } + doc.querySelector('[href="zotero-ocr.ftl"]').remove(); + }, + + removeFromAllWindows() { + var windows = Zotero.getMainWindows(); + for (let win of windows) { + if (!win.ZoteroPane) continue; + this.removeFromWindow(win); + } + }, + + toggleGreen(window, enabled) { + window.document.documentElement + .toggleAttribute('data-green-instead', enabled); + }, + + async recognize(window) { - // Look for the tesseract executable in the settings and at commonly used locations. - // If it is found, the settings are updated. - // Otherwise abort with an alert. - let ocrEngine = Zotero.Prefs.get("zoteroocr.ocrPath"); - let found = false; - if (ocrEngine) { - let pathOrFile = FileUtils.File(ocrEngine); - // If a directory is given, then try for the standard name of the tool. - if (pathOrFile.isDirectory()) { - if (Zotero.isWin) { - ocrEngine = OS.Path.join(ocrEngine, "tesseract.exe"); - } - else { - ocrEngine = OS.Path.join(ocrEngine, "tesseract"); - } - Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); - } - found = await OS.File.exists(ocrEngine); - } - else { - let path = ["", "/usr/local/bin/", "/usr/bin/", "C:\\Program Files\\Tesseract-OCR\\", "/opt/homebrew/bin/", "/usr/local/homebrew/bin/"]; - for (ocrEngine of path) { - ocrEngine += "tesseract"; - if (Zotero.isWin) { - ocrEngine += ".exe"; - } - if (await OS.File.exists(ocrEngine)) { - found = true; - Zotero.debug("Found " + ocrEngine); - Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); - break; - } - Zotero.debug("No " + ocrEngine); - } - } - if (!found) { - alert("Tesseract executable not found. Tried: " + ocrEngine); - return; - } + // Look for the tesseract executable in the settings and at commonly used locations. + // If it is found, the settings are updated. + // Otherwise abort with an alert. + Zotero.debug("entering recognize()"); + let ocrEngine = Zotero.Prefs.get("zoteroocr.ocrPath"); + let found = false; + if (ocrEngine) { + let pathOrFile = FileUtils.File(ocrEngine); + // If a directory is given, then try for the standard name of the tool. + if (pathOrFile.isDirectory()) { + if (Zotero.isWin) { + ocrEngine = OS.Path.join(ocrEngine, "tesseract.exe"); + } + else { + ocrEngine = OS.Path.join(ocrEngine, "tesseract"); + } + Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); + } + found = await OS.File.exists(ocrEngine); + } + else { + let path = ["", "/usr/local/bin/", "/usr/bin/", "C:\\Program Files\\Tesseract-OCR\\", "/opt/homebrew/bin/", "/usr/local/homebrew/bin/"]; + for (ocrEngine of path) { + ocrEngine += "tesseract"; + if (Zotero.isWin) { + ocrEngine += ".exe"; + } + if (await OS.File.exists(ocrEngine)) { + found = true; + Zotero.debug("Found " + ocrEngine); + Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); + break; + } + Zotero.debug("No " + ocrEngine); + } + } + if (!found) { + window.alert("Tesseract executable not found. Tried: " + ocrEngine); + return; + } - // Use the special pdfinfo variant in the zotero directory (which comes along Zotero) - // See https://developer.mozilla.org/en-US/docs/Archive/Add-ons/Code_snippets/File_I_O#Getting_special_files - // and https://dxr.mozilla.org/mozilla-central/source/xpcom/io/nsDirectoryServiceDefs.h. - let zdir = FileUtils.getDir('GreBinD', []); - let pdfinfo = zdir.clone(); - pdfinfo.append("pdfinfo"); - pdfinfo = pdfinfo.path; - if (Zotero.isWin) { - pdfinfo = pdfinfo + ".exe"; - } - if (! (await OS.File.exists(pdfinfo)) ) { - alert("No " + pdfinfo + " executable found."); - return; - } + // Use the special pdfinfo variant in the zotero directory (which comes along Zotero) + // See https://developer.mozilla.org/en-US/docs/Archive/Add-ons/Code_snippets/File_I_O#Getting_special_files + // and https://dxr.mozilla.org/mozilla-central/source/xpcom/io/nsDirectoryServiceDefs.h. + let zdir = FileUtils.getDir('GreBinD', []); + let pdfinfo = zdir.clone(); + pdfinfo.append("pdfinfo"); + pdfinfo = pdfinfo.path; + if (Zotero.isWin) { + pdfinfo = pdfinfo + ".exe"; + } + if (! (await OS.File.exists(pdfinfo)) ) { + window.alert("No " + pdfinfo + " executable found."); + return; + } - // Look for a specific path in the preferences for pdftoppm - let pdftoppm = Zotero.Prefs.get("zoteroocr.pdftoppmPath"); - if (!pdftoppm) { - // alternatively use the also the Zotero directory to look for pdftoppm - pdftoppm = zdir.clone(); - pdftoppm.append("pdftoppm"); - pdftoppm = pdftoppm.path; - } - if (Zotero.isWin && !(pdftoppm.endsWith(".exe"))) { - pdftoppm = pdftoppm + ".exe"; - } - if (!(await OS.File.exists(pdftoppm))) { - alert("No " + pdftoppm + " executable found."); - return; - } + // Look for a specific path in the preferences for pdftoppm + let pdftoppm = Zotero.Prefs.get("zoteroocr.pdftoppmPath"); + if (!pdftoppm) { + // alternatively use the also the Zotero directory to look for pdftoppm + pdftoppm = zdir.clone(); + pdftoppm.append("pdftoppm"); + pdftoppm = pdftoppm.path; + } + if (Zotero.isWin && !(pdftoppm.endsWith(".exe"))) { + pdftoppm = pdftoppm + ".exe"; + } + if (!(await OS.File.exists(pdftoppm))) { + window.alert("No " + pdftoppm + " executable found."); + return; + } - let items = Zotero.getActiveZoteroPane().getSelectedItems(); - for (let item of items) { - // find the PDF - let pdfItem; - if (item.isAttachment()) { - if (item.isFileAttachment() && item.attachmentContentType == 'application/pdf') { - pdfItem = item; - item = Zotero.Items.get(item.parentItemID); - } - else { - alert("Item is attachment but not PDF and will be ignored."); - continue; - } - } - else { - let pdfAttachments = item.getAttachments(false) - .map(itemID => Zotero.Items.get(itemID)) - .filter(att => att.isFileAttachment() && att.attachmentContentType == 'application/pdf'); - if (pdfAttachments.length == 0) { - alert("No PDF found for the selected item."); - continue; - } - if (pdfAttachments.length > 1) { - alert("There are several PDFs attached to this item. Only the first one will be processed."); - } - pdfItem = pdfAttachments[0]; - } - let pdf = pdfItem.getFilePath(); - let base = pdf.replace(/\.pdf$/, ''); - let dir = OS.Path.dirname(pdf); - let infofile = dir + '/pdfinfo.txt'; - let ocrbase = Zotero.Prefs.get("zoteroocr.overwritePDF") ? base : base + '.ocr'; - // TODO filter out PDFs which have already a text layer + let items = Zotero.getActiveZoteroPane().getSelectedItems(); + for (let item of items) { + // find the PDF + let pdfItem; + if (item.isAttachment()) { + if (item.isFileAttachment() && item.attachmentContentType == 'application/pdf') { + pdfItem = item; + item = Zotero.Items.get(item.parentItemID); + } + else { + window.alert("Item is attachment but not PDF and will be ignored."); + continue; + } + } + else { + let pdfAttachments = item.getAttachments(false) + .map(itemID => Zotero.Items.get(itemID)) + .filter(att => att.isFileAttachment() && att.attachmentContentType == 'application/pdf'); + if (pdfAttachments.length == 0) { + window.alert("No PDF found for the selected item."); + continue; + } + if (pdfAttachments.length > 1) { + window.alert("There are several PDFs attached to this item. Only the first one will be processed."); + } + pdfItem = pdfAttachments[0]; + } + let pdf = pdfItem.getFilePath(); + let base = pdf.replace(/\.pdf$/, ''); + let dir = OS.Path.dirname(pdf); + let infofile = dir + '/pdfinfo.txt'; + let ocrbase = Zotero.Prefs.get("zoteroocr.overwritePDF") ? base : base + '.ocr'; + // TODO filter out PDFs which have already a text layer - // extract images from PDF - let imageList = OS.Path.join(dir, 'image-list.txt'); - if (!(await OS.File.exists(imageList))) { - try { - Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); - await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); - Zotero.debug("Running " + pdftoppm + ' -png -r 300 ' + pdf + ' ' + dir + '/page'); - await Zotero.Utilities.Internal.exec(pdftoppm, ['-png', '-r', 300, pdf, dir + '/page']); - } - catch (e) { - Zotero.logError(e); - } - // save the list of images in a separate file - let info = await Zotero.File.getContentsAsync(infofile); - let numPages = info.match('Pages:[^0-9]+([0-9]+)')[1]; - var imageListArray = []; - for (let i = 1; i <= parseInt(numPages, 10); i++) { - let paddedIndex = "0".repeat(numPages.length) + i; - imageListArray.push(dir + '/page-' + paddedIndex.substr(-numPages.length) + '.png'); - } - Zotero.File.putContents(Zotero.File.pathToFile(imageList), imageListArray.join('\n')); - } + // extract images from PDF + let imageList = OS.Path.join(dir, 'image-list.txt'); + if (!(await OS.File.exists(imageList))) { + try { + Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); + await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); + Zotero.debug("Running " + pdftoppm + ' -png -r 300 ' + pdf + ' ' + dir + '/page'); + await Zotero.Utilities.Internal.exec(pdftoppm, ['-png', '-r', 300, pdf, dir + '/page']); + } + catch (e) { + Zotero.logError(e); + } + // save the list of images in a separate file + let info = await Zotero.File.getContentsAsync(infofile); + let numPages = info.match('Pages:[^0-9]+([0-9]+)')[1]; + var imageListArray = []; + for (let i = 1; i <= parseInt(numPages, 10); i++) { + let paddedIndex = "0".repeat(numPages.length) + i; + imageListArray.push(dir + '/page-' + paddedIndex.substr(-numPages.length) + '.png'); + } + Zotero.File.putContents(Zotero.File.pathToFile(imageList), imageListArray.join('\n')); + } - let parameters = [dir + '/image-list.txt']; - parameters.push(ocrbase); - if (Zotero.Prefs.get("zoteroocr.language")) { - parameters.push('-l'); - parameters.push(Zotero.Prefs.get("zoteroocr.language")); - } - parameters.push('txt'); - if (Zotero.Prefs.get("zoteroocr.outputPDF")) { - parameters.push('pdf'); - } - if (Zotero.Prefs.get("zoteroocr.outputHocr")) { - parameters.push('hocr'); - } - try { - Zotero.debug("Running " + ocrEngine + ' ' + parameters.join(' ')); - await Zotero.Utilities.Internal.exec(ocrEngine, parameters); - } - catch (e) { - Zotero.logError(e); - } + let parameters = [dir + '/image-list.txt']; + parameters.push(ocrbase); + if (Zotero.Prefs.get("zoteroocr.language")) { + parameters.push('-l'); + parameters.push(Zotero.Prefs.get("zoteroocr.language")); + } + parameters.push('txt'); + if (Zotero.Prefs.get("zoteroocr.outputPDF")) { + parameters.push('pdf'); + } + if (Zotero.Prefs.get("zoteroocr.outputHocr")) { + parameters.push('hocr'); + } + try { + Zotero.debug("Running " + ocrEngine + ' ' + parameters.join(' ')); + await Zotero.Utilities.Internal.exec(ocrEngine, parameters); + } + catch (e) { + Zotero.logError(e); + } - if (Zotero.Prefs.get("zoteroocr.outputNote")) { - let contents = await Zotero.File.getContentsAsync(ocrbase + '.txt'); - contents = contents.replace(/(?:\r\n|\r|\n)/g, '
'); - let newNote = new Zotero.Item('note'); - newNote.setNote(contents); - newNote.parentID = item.id; - await newNote.saveTx(); - } - - - if (Zotero.Prefs.get("zoteroocr.outputHocr")) { - let contents = await Zotero.File.getContentsAsync(ocrbase + '.hocr'); - // replace the absolute paths of images with relative ones - let escapedDir = dir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - let regexp = new RegExp(escapedDir + "/", 'g'); - contents = contents.replace(regexp, ''); - // split content into the preamble and pages - contents = contents.replace("\n", ''); - let parts = contents.split("
\n\n'; - Zotero.File.putContents(htmlfile, pagecontent); - await Zotero.Attachments.linkFromFile({ - file: OS.Path.join(dir, pagename), - contentType: "text/html", - parentItemID: item.id - }); - } - } + if (Zotero.Prefs.get("zoteroocr.outputNote")) { + let contents = await Zotero.File.getContentsAsync(ocrbase + '.txt'); + contents = contents.replace(/(?:\r\n|\r|\n)/g, '
'); + let newNote = new Zotero.Item('note'); + newNote.setNote(contents); + newNote.parentID = item.id; + await newNote.saveTx(); + } + + + if (Zotero.Prefs.get("zoteroocr.outputHocr")) { + let contents = await Zotero.File.getContentsAsync(ocrbase + '.hocr'); + // replace the absolute paths of images with relative ones + let escapedDir = dir.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + let regexp = new RegExp(escapedDir + "/", 'g'); + contents = contents.replace(regexp, ''); + // split content into the preamble and pages + contents = contents.replace("\n", ''); + let parts = contents.split("
\n\n'; + Zotero.File.putContents(htmlfile, pagecontent); + await Zotero.Attachments.linkFromFile({ + file: OS.Path.join(dir, pagename), + contentType: "text/html", + parentItemID: item.id + }); + } + } - // attach PDF if it is a new one - if (Zotero.Prefs.get("zoteroocr.outputPDF") && !(Zotero.Prefs.get("zoteroocr.overwritePDF"))) { - await Zotero.Attachments.linkFromFile({ - file: ocrbase + '.pdf', - parentItemID: item.id - }); - } - - if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { - // delete image list - await Zotero.File.removeIfExists(imageList); - // delete PNGs - for (let imageName of imageListArray) { - await Zotero.File.removeIfExists(imageName); - } - } - } - }, - - async main() { - // Global properties are included automatically in Zotero 7 - var host = new URL('https://foo.com/path').host; - this.log(`Host is ${host}`); - - // Retrieve a global pref - this.log(`Intensity is ${Zotero.Prefs.get('extensions.make-it-red.intensity', true)}`); - }, + // attach PDF if it is a new one + if (Zotero.Prefs.get("zoteroocr.outputPDF") && !(Zotero.Prefs.get("zoteroocr.overwritePDF"))) { + await Zotero.Attachments.linkFromFile({ + file: ocrbase + '.pdf', + parentItemID: item.id + }); + } + + if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { + // delete image list + await Zotero.File.removeIfExists(imageList); + // delete PNGs + for (let imageName of imageListArray) { + await Zotero.File.removeIfExists(imageName); + } + } + } + }, + + async main() { + // Global properties are included automatically in Zotero 7 + var host = new URL('https://foo.com/path').host; + this.log(`Host is ${host}`); + + // Retrieve a global pref + this.log(`Intensity is ${Zotero.Prefs.get('extensions.make-it-red.intensity', true)}`); + }, }; From 5859d41c4c1b756cce6d287e09c0de3b4fbc219b Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Fri, 23 Feb 2024 06:49:24 +0100 Subject: [PATCH 03/15] commented out pdftools checks --- src-z7/zotero-ocr.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index ae29762..2062003 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -137,6 +137,9 @@ ZoteroOCR = { // See https://developer.mozilla.org/en-US/docs/Archive/Add-ons/Code_snippets/File_I_O#Getting_special_files // and https://dxr.mozilla.org/mozilla-central/source/xpcom/io/nsDirectoryServiceDefs.h. let zdir = FileUtils.getDir('GreBinD', []); + + // TODO is this still necessary in anyway? + /* let pdfinfo = zdir.clone(); pdfinfo.append("pdfinfo"); pdfinfo = pdfinfo.path; @@ -147,6 +150,7 @@ ZoteroOCR = { window.alert("No " + pdfinfo + " executable found."); return; } + */ // Look for a specific path in the preferences for pdftoppm let pdftoppm = Zotero.Prefs.get("zoteroocr.pdftoppmPath"); @@ -202,8 +206,9 @@ ZoteroOCR = { let imageList = OS.Path.join(dir, 'image-list.txt'); if (!(await OS.File.exists(imageList))) { try { - Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); - await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); + // TODO is this still useful in any way? + /* Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); + await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); */ Zotero.debug("Running " + pdftoppm + ' -png -r 300 ' + pdf + ' ' + dir + '/page'); await Zotero.Utilities.Internal.exec(pdftoppm, ['-png', '-r', 300, pdf, dir + '/page']); } From b7a51d2edeeb408d6dc0cc56251446b38e454984 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sat, 24 Feb 2024 13:18:49 +0100 Subject: [PATCH 04/15] OCR partially working --- src-z7/zotero-ocr.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index 2062003..ed453ee 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -210,20 +210,27 @@ ZoteroOCR = { /* Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); */ Zotero.debug("Running " + pdftoppm + ' -png -r 300 ' + pdf + ' ' + dir + '/page'); - await Zotero.Utilities.Internal.exec(pdftoppm, ['-png', '-r', 300, pdf, dir + '/page']); + await Zotero.Utilities.Internal.exec(pdftoppm, ['-progress', '-png', '-r', 300, pdf, dir + '/page']); } catch (e) { Zotero.logError(e); } - // save the list of images in a separate file - let info = await Zotero.File.getContentsAsync(infofile); - let numPages = info.match('Pages:[^0-9]+([0-9]+)')[1]; + + + var iterator = new OS.File.DirectoryIterator(dir); var imageListArray = []; - for (let i = 1; i <= parseInt(numPages, 10); i++) { - let paddedIndex = "0".repeat(numPages.length) + i; - imageListArray.push(dir + '/page-' + paddedIndex.substr(-numPages.length) + '.png'); - } + await iterator.forEach(function onEntry(entry) { + Zotero.debug(entry); + if (entry.name.includes('.png')) { + imageListArray.push(entry.path); + } + }); + Zotero.debug('Files are now:') + Zotero.debug(imageListArray); + + // save the list of images in a separate file Zotero.File.putContents(Zotero.File.pathToFile(imageList), imageListArray.join('\n')); + } let parameters = [dir + '/image-list.txt']; @@ -256,7 +263,6 @@ ZoteroOCR = { await newNote.saveTx(); } - if (Zotero.Prefs.get("zoteroocr.outputHocr")) { let contents = await Zotero.File.getContentsAsync(ocrbase + '.hocr'); // replace the absolute paths of images with relative ones From 874684fa448d54d6ceeae93064be5a8cb6e9468f Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sat, 24 Feb 2024 13:48:53 +0100 Subject: [PATCH 05/15] OCR OK, cleanup --- src-z7/zotero-ocr.js | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index ed453ee..5c55b8b 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -133,25 +133,10 @@ ZoteroOCR = { return; } - // Use the special pdfinfo variant in the zotero directory (which comes along Zotero) // See https://developer.mozilla.org/en-US/docs/Archive/Add-ons/Code_snippets/File_I_O#Getting_special_files // and https://dxr.mozilla.org/mozilla-central/source/xpcom/io/nsDirectoryServiceDefs.h. let zdir = FileUtils.getDir('GreBinD', []); - // TODO is this still necessary in anyway? - /* - let pdfinfo = zdir.clone(); - pdfinfo.append("pdfinfo"); - pdfinfo = pdfinfo.path; - if (Zotero.isWin) { - pdfinfo = pdfinfo + ".exe"; - } - if (! (await OS.File.exists(pdfinfo)) ) { - window.alert("No " + pdfinfo + " executable found."); - return; - } - */ - // Look for a specific path in the preferences for pdftoppm let pdftoppm = Zotero.Prefs.get("zoteroocr.pdftoppmPath"); if (!pdftoppm) { From a35039c4345a2dbaf09415a83d4ebe75a0be6eeb Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 25 Feb 2024 09:04:11 +0100 Subject: [PATCH 06/15] added pdftoppm detection --- src-z7/zotero-ocr.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index 5c55b8b..e265d7f 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -119,7 +119,8 @@ ZoteroOCR = { if (Zotero.isWin) { ocrEngine += ".exe"; } - if (await OS.File.exists(ocrEngine)) { + let tesseractFound = await OS.File.exists(ocrEngine); + if (tesseractFound) { found = true; Zotero.debug("Found " + ocrEngine); Zotero.Prefs.set("zoteroocr.ocrPath", ocrEngine); @@ -140,10 +141,22 @@ ZoteroOCR = { // Look for a specific path in the preferences for pdftoppm let pdftoppm = Zotero.Prefs.get("zoteroocr.pdftoppmPath"); if (!pdftoppm) { - // alternatively use the also the Zotero directory to look for pdftoppm - pdftoppm = zdir.clone(); - pdftoppm.append("pdftoppm"); - pdftoppm = pdftoppm.path; + // look for pdftoppm in various possible directories + let path = ["", "/usr/local/bin/", "/usr/bin/", "/opt/homebrew/bin/", "/usr/local/homebrew/bin/", zdir.clone()]; + for (pdftoppm of path) { + pdftoppm += "pdftoppm"; + if (Zotero.isWin) { + ocrEngine += ".exe"; + } + let pdftoppmFound = await OS.File.exists(pdftoppm); + if (pdftoppmFound) { + found = true; + Zotero.debug("Found " + pdftoppm); + Zotero.Prefs.set("zoteroocr.pdftoppmPath", pdftoppm); + break; + } + Zotero.debug("No " + pdftoppm); + } } if (Zotero.isWin && !(pdftoppm.endsWith(".exe"))) { pdftoppm = pdftoppm + ".exe"; @@ -183,7 +196,7 @@ ZoteroOCR = { let pdf = pdfItem.getFilePath(); let base = pdf.replace(/\.pdf$/, ''); let dir = OS.Path.dirname(pdf); - let infofile = dir + '/pdfinfo.txt'; + // let infofile = dir + '/pdfinfo.txt'; let ocrbase = Zotero.Prefs.get("zoteroocr.overwritePDF") ? base : base + '.ocr'; // TODO filter out PDFs which have already a text layer From 3cc060f2014791ea81b81560ec67419947df804b Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 25 Feb 2024 09:18:18 +0100 Subject: [PATCH 07/15] minor cleanup --- src-z7/zotero-ocr.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index e265d7f..c0f5ede 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -204,9 +204,6 @@ ZoteroOCR = { let imageList = OS.Path.join(dir, 'image-list.txt'); if (!(await OS.File.exists(imageList))) { try { - // TODO is this still useful in any way? - /* Zotero.debug("Running " + pdfinfo + ' ' + pdf + ' ' + infofile); - await Zotero.Utilities.Internal.exec(pdfinfo, [pdf, infofile]); */ Zotero.debug("Running " + pdftoppm + ' -png -r 300 ' + pdf + ' ' + dir + '/page'); await Zotero.Utilities.Internal.exec(pdftoppm, ['-progress', '-png', '-r', 300, pdf, dir + '/page']); } From 267d544f063463e231720451f77221d605110d95 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 25 Feb 2024 09:30:58 +0100 Subject: [PATCH 08/15] safer listing of PNG files --- src-z7/zotero-ocr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-z7/zotero-ocr.js b/src-z7/zotero-ocr.js index c0f5ede..18c06b9 100644 --- a/src-z7/zotero-ocr.js +++ b/src-z7/zotero-ocr.js @@ -216,7 +216,7 @@ ZoteroOCR = { var imageListArray = []; await iterator.forEach(function onEntry(entry) { Zotero.debug(entry); - if (entry.name.includes('.png')) { + if (entry.name.match(/-\d+\.png$/)) { imageListArray.push(entry.path); } }); From 7c5fb16058444aa84577650fd57e7a3dc0c9094c Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 25 Feb 2024 09:51:32 +0100 Subject: [PATCH 09/15] add updates.json --- src-z7/updates.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src-z7/updates.json b/src-z7/updates.json index 7fc0732..fad9e10 100644 --- a/src-z7/updates.json +++ b/src-z7/updates.json @@ -3,9 +3,8 @@ "zotero-ocr@bib.uni-mannheim.de": { "updates": [ { - "version": "2.0", - "update_link": "https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.1/zotero-ocr-0.6.1.xpi", - "update_hash": "sha256:4a6dd04c197629a02a9c6beaa9ebd52a69bb683f8400243bcdf95847f0ee254a", + "version": "0.7.0", + "update_link": "https://github.com/UB-Mannheim/zotero-ocr/releases/tag/0.7.0/zotero-ocr-0.7.0.xpi", "applications": { "zotero": { "strict_min_version": "6.999" From 878fb70d9edbbeef2291d60dfaefc9dcf2a45c92 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sat, 9 Mar 2024 14:38:20 +0100 Subject: [PATCH 10/15] going zotero7-only remove stray z6 files .DS_Store removal --- build.sh | 15 +- chrome.manifest | 7 - chrome/content/overlay.xul | 32 --- chrome/content/preferences.xul | 61 ----- chrome/content/zoteroocr.js | 234 ------------------ chrome/locale/en-US/zoteroocr.dtd | 2 - chrome/locale/en-US/zoteroocr.properties | 0 defaults/preferences/defaults.js | 7 - install.rdf | 34 --- screenshots/Zotero-OCR-Preferences.png | Bin 18727 -> 150435 bytes src-z6/chrome.manifest | 7 - src-z6/chrome/content/overlay.xul | 32 --- src-z6/chrome/content/preferences.xul | 61 ----- src-z6/chrome/content/zoteroocr.js | 234 ------------------ src-z6/chrome/locale/en-US/zoteroocr.dtd | 2 - .../chrome/locale/en-US/zoteroocr.properties | 0 .../skin/default/zoteroocr/ubmannheim.png | Bin 18131 -> 0 bytes .../default/zoteroocr/ubmannheim32x32.png | Bin 1112 -> 0 bytes .../default/zoteroocr/ubmannheim64x64.png | Bin 2256 -> 0 bytes src-z6/defaults/preferences/defaults.js | 7 - src-z6/install.rdf | 34 --- src-z6/update.rdf | 30 --- src-z7/locale/.DS_Store | Bin 6148 -> 0 bytes src-z7/ubmannheim.png | Bin 18131 -> 0 bytes src-z7/ubmannheim32x32.png | Bin 1112 -> 0 bytes src-z7/ubmannheim64x64.png | Bin 2256 -> 0 bytes {src-z7 => src}/bootstrap.js | 0 {src-z7 => src}/locale/en-US/zotero-ocr.ftl | 0 {src-z7 => src}/manifest.json | 0 {src-z7 => src}/prefs.js | 0 {src-z7 => src}/prefs.xhtml | 0 {src-z7 => src}/style.css | 0 .../default/zoteroocr => src}/ubmannheim.png | Bin .../zoteroocr => src}/ubmannheim32x32.png | Bin .../zoteroocr => src}/ubmannheim64x64.png | Bin {src-z7 => src}/updates.json | 0 {src-z7 => src}/zotero-ocr.js | 2 + update.rdf | 30 --- 38 files changed, 10 insertions(+), 821 deletions(-) delete mode 100644 chrome.manifest delete mode 100644 chrome/content/overlay.xul delete mode 100644 chrome/content/preferences.xul delete mode 100644 chrome/content/zoteroocr.js delete mode 100644 chrome/locale/en-US/zoteroocr.dtd delete mode 100644 chrome/locale/en-US/zoteroocr.properties delete mode 100644 defaults/preferences/defaults.js delete mode 100644 install.rdf delete mode 100644 src-z6/chrome.manifest delete mode 100644 src-z6/chrome/content/overlay.xul delete mode 100644 src-z6/chrome/content/preferences.xul delete mode 100644 src-z6/chrome/content/zoteroocr.js delete mode 100644 src-z6/chrome/locale/en-US/zoteroocr.dtd delete mode 100644 src-z6/chrome/locale/en-US/zoteroocr.properties delete mode 100644 src-z6/chrome/skin/default/zoteroocr/ubmannheim.png delete mode 100644 src-z6/chrome/skin/default/zoteroocr/ubmannheim32x32.png delete mode 100644 src-z6/chrome/skin/default/zoteroocr/ubmannheim64x64.png delete mode 100644 src-z6/defaults/preferences/defaults.js delete mode 100644 src-z6/install.rdf delete mode 100644 src-z6/update.rdf delete mode 100644 src-z7/locale/.DS_Store delete mode 100644 src-z7/ubmannheim.png delete mode 100644 src-z7/ubmannheim32x32.png delete mode 100644 src-z7/ubmannheim64x64.png rename {src-z7 => src}/bootstrap.js (100%) rename {src-z7 => src}/locale/en-US/zotero-ocr.ftl (100%) rename {src-z7 => src}/manifest.json (100%) rename {src-z7 => src}/prefs.js (100%) rename {src-z7 => src}/prefs.xhtml (100%) rename {src-z7 => src}/style.css (100%) rename {chrome/skin/default/zoteroocr => src}/ubmannheim.png (100%) rename {chrome/skin/default/zoteroocr => src}/ubmannheim32x32.png (100%) rename {chrome/skin/default/zoteroocr => src}/ubmannheim64x64.png (100%) rename {src-z7 => src}/updates.json (100%) rename {src-z7 => src}/zotero-ocr.js (99%) delete mode 100644 update.rdf diff --git a/build.sh b/build.sh index 050d7e9..3a06065 100755 --- a/build.sh +++ b/build.sh @@ -5,10 +5,11 @@ if [ -z "$version" ]; then read -p "Enter new version number: " version fi -mkdir build-z6 -rm -f build-z6/*.xpi -cd src-z6 && zip -r ../build-z6/zotero-ocr-${version}.xpi chrome/* defaults/* chrome.manifest install.rdf && cd .. - -mkdir build-z7 -rm -f build-z7/*.xpi -cd src-z7 && zip -r ../build-z7/zotero-ocr-${version}.xpi * && cd .. +if [ -d build ]; then + if [ -f build/*.xpi ]; then + rm -f build/*.xpi + fi +else + mkdir build +fi +cd src && zip -r ../build/zotero-ocr-${version}.xpi * -x "*.DS_Store" && cd .. diff --git a/chrome.manifest b/chrome.manifest deleted file mode 100644 index e930f02..0000000 --- a/chrome.manifest +++ /dev/null @@ -1,7 +0,0 @@ -content zoteroocr chrome/content/ - -overlay chrome://zotero/content/zoteroPane.xul chrome://zoteroocr/content/overlay.xul - -locale zoteroocr en-US chrome/locale/en-US/ - -skin zoteroocr default chrome/skin/default/zoteroocr/ diff --git a/chrome/content/overlay.xul b/chrome/content/overlay.xul deleted file mode 100644 index 528b12f..0000000 --- a/chrome/content/overlay.xul +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - \n\n'; - Zotero.File.putContents(htmlfile, pagecontent); - yield Zotero.Attachments.linkFromFile({ - file: OS.Path.join(dir, pagename), - contentType: "text/html", - parentItemID: item.id - }); - } - } - - // attach PDF if it is a new one - if (Zotero.Prefs.get("zoteroocr.outputPDF") && !(Zotero.Prefs.get("zoteroocr.overwritePDF"))) { - yield Zotero.Attachments.linkFromFile({ - file: ocrbase + '.pdf', - parentItemID: item.id - }); - } - - if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { - // delete image list - yield Zotero.File.removeIfExists(imageList); - // delete PNGs - for (let imageName of imageListArray) { - yield Zotero.File.removeIfExists(imageName); - } - } - } - }); - -}; diff --git a/chrome/locale/en-US/zoteroocr.dtd b/chrome/locale/en-US/zoteroocr.dtd deleted file mode 100644 index 256f175..0000000 --- a/chrome/locale/en-US/zoteroocr.dtd +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/chrome/locale/en-US/zoteroocr.properties b/chrome/locale/en-US/zoteroocr.properties deleted file mode 100644 index e69de29..0000000 diff --git a/defaults/preferences/defaults.js b/defaults/preferences/defaults.js deleted file mode 100644 index b8d17a2..0000000 --- a/defaults/preferences/defaults.js +++ /dev/null @@ -1,7 +0,0 @@ -// don't set ocrPath, language by default -pref("extensions.zotero.zoteroocr.outputNote", true); -pref("extensions.zotero.zoteroocr.outputPDF", true); -pref("extensions.zotero.zoteroocr.overwritePDF", false); -pref("extensions.zotero.zoteroocr.outputHocr", true); -pref("extensions.zotero.zoteroocr.outputPNG", true); -pref("extensions.zotero.zoteroocr.maximumPagesAsHtml", "5"); diff --git a/install.rdf b/install.rdf deleted file mode 100644 index 035a007..0000000 --- a/install.rdf +++ /dev/null @@ -1,34 +0,0 @@ - - - - chrome://zoteroocr/content/preferences.xul - 2 - - - zotero@chnm.gmu.edu - 5.0 - 6.* - - - - - juris-m@juris-m.github.io - 5.0 - 6.* - - - - diff --git a/screenshots/Zotero-OCR-Preferences.png b/screenshots/Zotero-OCR-Preferences.png index c9773c4a200e3d0f6e45111f13390816b42090a6..33e3f3a5a9f4abb73429ca9ee588cccc098c42e4 100644 GIT binary patch literal 150435 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�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�Qk@>;*+4K6MBCTeq>b%5;4-b*D{s{WocQkQF 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 aMdPv1vf?1O#l3hA>9mr%Vv4-U?f(HngChn2 literal 18727 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 - - - - - - \n\n'; - Zotero.File.putContents(htmlfile, pagecontent); - yield Zotero.Attachments.linkFromFile({ - file: OS.Path.join(dir, pagename), - contentType: "text/html", - parentItemID: item.id - }); - } - } - - // attach PDF if it is a new one - if (Zotero.Prefs.get("zoteroocr.outputPDF") && !(Zotero.Prefs.get("zoteroocr.overwritePDF"))) { - yield Zotero.Attachments.linkFromFile({ - file: ocrbase + '.pdf', - parentItemID: item.id - }); - } - - if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { - // delete image list - yield Zotero.File.removeIfExists(imageList); - // delete PNGs - for (let imageName of imageListArray) { - yield Zotero.File.removeIfExists(imageName); - } - } - } - }); - -}; diff --git a/src-z6/chrome/locale/en-US/zoteroocr.dtd b/src-z6/chrome/locale/en-US/zoteroocr.dtd deleted file mode 100644 index 256f175..0000000 --- a/src-z6/chrome/locale/en-US/zoteroocr.dtd +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src-z6/chrome/locale/en-US/zoteroocr.properties b/src-z6/chrome/locale/en-US/zoteroocr.properties deleted file mode 100644 index e69de29..0000000 diff --git a/src-z6/chrome/skin/default/zoteroocr/ubmannheim.png b/src-z6/chrome/skin/default/zoteroocr/ubmannheim.png deleted file mode 100644 index 1d7011011387ddf99bd323f96f798faf686ee85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18131 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 BsfYjo diff --git a/src-z6/chrome/skin/default/zoteroocr/ubmannheim32x32.png b/src-z6/chrome/skin/default/zoteroocr/ubmannheim32x32.png deleted file mode 100644 index 394edbe0c296cc235f9a39550e99beca10dfdfdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 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 e!U`+=?C^hcW`TU7akn`D0000 - - - chrome://zoteroocr/content/preferences.xul - 2 - - - zotero@chnm.gmu.edu - 5.0 - 6.* - - - - - juris-m@juris-m.github.io - 5.0 - 6.* - - - - diff --git a/src-z6/update.rdf b/src-z6/update.rdf deleted file mode 100644 index ed838cb..0000000 --- a/src-z6/update.rdf +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - 0.6.0 - - - zotero@chnm.gmu.edu - 6.0 - 7.* - https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.0/zotero-ocr-0.6.0.xpi - - - - - juris-m@juris-m.github.io - 6.0 - 7.* - https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.0/zotero-ocr-0.6.0.xpi - - - - - - - - diff --git a/src-z7/locale/.DS_Store b/src-z7/locale/.DS_Store deleted file mode 100644 index f64f51d3adac4e65e5ad6ff1dccc466098c9ac28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-LJD5T4OH2-sXDmRs3boM7#G#3u;$l8bmn&OH$OypS&;_+EbVqg*s#rHIVH z?l(I-vp-+R&Mp!0>Zw~2Er_T>5oA#&M9h<22ktxvvX0SokL$iIrJoq)Z<=K7bGoAk zI-?sJt$)wl-!GeW+3tJ~7vrF9sq3~cEv(h?`RViJ%j?x=kM0|f-DZCV`5Ym^Krj#t z1Ovgq&oF?TEm9pBMjZ?U1Hr%t19Cnj6v6B`80yi1N}mA08O$os_3{c#VgP2x!4MV* zTPV;%*`F9};jkz7%Z`Jgg%j({7{_ORf4s0?ojIvHaW;%P7zhT&3>;c>A^HCrztZF* ze;g96U?3RyXAJPHZt4{_<+=6C_9WLPlv@-L@f$>eK-W|Z)KrXyoFgaNY5hrb^k>Jx UP(~5Eh6CdwpoByf4EzEEZ!iihf&c&j diff --git a/src-z7/ubmannheim.png b/src-z7/ubmannheim.png deleted file mode 100644 index 1d7011011387ddf99bd323f96f798faf686ee85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18131 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 BsfYjo diff --git a/src-z7/ubmannheim32x32.png b/src-z7/ubmannheim32x32.png deleted file mode 100644 index 394edbe0c296cc235f9a39550e99beca10dfdfdb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 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 e!U`+=?C^hcW`TU7akn`D0000 - - - - - - - 0.6.0 - - - zotero@chnm.gmu.edu - 5.0 - 6.* - https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.0/zotero-ocr-0.6.0.xpi - - - - - juris-m@juris-m.github.io - 5.0 - 6.* - https://github.com/UB-Mannheim/zotero-ocr/releases/download/0.6.0/zotero-ocr-0.6.0.xpi - - - - - - - - From 4067d9384c2e669a7255edbe15383653ed0d478e Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Wed, 20 Mar 2024 20:25:18 +0100 Subject: [PATCH 11/15] intermediate commit: several fixes in response to feedback --- src/zotero-ocr.js | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/zotero-ocr.js b/src/zotero-ocr.js index b958522..0de3135 100644 --- a/src/zotero-ocr.js +++ b/src/zotero-ocr.js @@ -27,17 +27,6 @@ ZoteroOCR = { addToWindow(window) { let doc = window.document; - // Add a stylesheet to the main Zotero pane - /* - let link1 = doc.createElement('link'); - link1.id = 'make-it-red-stylesheet'; - link1.type = 'text/css'; - link1.rel = 'stylesheet'; - link1.href = this.rootURI + 'style.css'; - doc.documentElement.appendChild(link1); - this.storeAddedElement(link1); - */ - // Use Fluent for localization window.MozXULElement.insertFTLIfNeeded("zotero-ocr.ftl"); @@ -48,11 +37,35 @@ ZoteroOCR = { menuitem.setAttribute('data-l10n-id', 'ocr-selected-pdfs'); // MozMenuItem#checked is available in Zotero 7 menuitem.addEventListener('command', () => { - //ZoteroOCR.toggleGreen(window, menuitem.checked); ZoteroOCR.recognize(window); }); doc.getElementById('menu_ToolsPopup').appendChild(menuitem); this.storeAddedElement(menuitem); + + + let popupmenuitem = doc.createXULElement('menuitem'); + popupmenuitem.id = 'zotero-ocr-item-menu'; + popupmenuitem.class = 'menuitem-iconic zotero-menuitem-ocr' + //popupmenuitem.setAttribute('type', 'checkbox'); + popupmenuitem.setAttribute('data-l10n-id', 'ocr-selected-pdfs'); + doc.getElementById('zotero-itemmenu').appendChild(popupmenuitem); + popupmenuitem.addEventListener('command', () => { + ZoteroOCR.recognize(window); + }); + this.storeAddedElement(popupmenuitem); + + /* + const menupopup = doc.getElementById("zotero-itemmenu").appendChild(elements.create("menu", { + id: "zotero-ocr-item-menu", + label: "Zotero-OCR" //, + //class: "menuitem-iconic", + //image: "chrome://zotero-better-bibtex/content/skin/bibtex-menu.svg" + })).appendChild(elements.create("menupopup")); + menupopup.appendChild(elements.create("menuitem", { + label: "Test OCR", + oncommand: () => ZoteroOCR.recognize(window) + })); + */ }, addToAllWindows() { @@ -87,11 +100,6 @@ ZoteroOCR = { } }, - toggleGreen(window, enabled) { - window.document.documentElement - .toggleAttribute('data-green-instead', enabled); - }, - async recognize(window) { // Look for the tesseract executable in the settings and at commonly used locations. @@ -311,9 +319,6 @@ ZoteroOCR = { async main() { // Global properties are included automatically in Zotero 7 var host = new URL('https://foo.com/path').host; - this.log(`Host is ${host}`); - // Retrieve a global pref - this.log(`Intensity is ${Zotero.Prefs.get('extensions.make-it-red.intensity', true)}`); }, }; From cc903a5f383f94f4ea42281f480860a624ba64e6 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Wed, 20 Mar 2024 20:50:19 +0100 Subject: [PATCH 12/15] remove unnecessary spaces --- src/locale/en-US/zotero-ocr.ftl | 2 +- src/zotero-ocr.js | 30 ++++++++++++++---------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/locale/en-US/zotero-ocr.ftl b/src/locale/en-US/zotero-ocr.ftl index 9050944..95e2abf 100644 --- a/src/locale/en-US/zotero-ocr.ftl +++ b/src/locale/en-US/zotero-ocr.ftl @@ -1,5 +1,5 @@ ocr-selected-pdfs = .label = OCR selected PDF(s) -ocr-preferences = +ocr-preferences = .label = Zotero OCR Preferences diff --git a/src/zotero-ocr.js b/src/zotero-ocr.js index 0de3135..5518379 100644 --- a/src/zotero-ocr.js +++ b/src/zotero-ocr.js @@ -11,7 +11,7 @@ ZoteroOCR = { rootURI: null, initialized: false, addedElementIDs: [], - + init({ id, version, rootURI }) { if (this.initialized) return; this.id = id; @@ -19,17 +19,17 @@ ZoteroOCR = { this.rootURI = rootURI; this.initialized = true; }, - + log(msg) { Zotero.debug("ZoteroOCR: " + msg); }, - + addToWindow(window) { let doc = window.document; - + // Use Fluent for localization window.MozXULElement.insertFTLIfNeeded("zotero-ocr.ftl"); - + // Add menu option let menuitem = doc.createXULElement('menuitem'); menuitem.id = 'ocr-selected-pdfs'; @@ -67,7 +67,7 @@ ZoteroOCR = { })); */ }, - + addToAllWindows() { var windows = Zotero.getMainWindows(); for (let win of windows) { @@ -75,14 +75,14 @@ ZoteroOCR = { this.addToWindow(win); } }, - + storeAddedElement(elem) { if (!elem.id) { throw new Error("Element must have an id"); } this.addedElementIDs.push(elem.id); }, - + removeFromWindow(window) { var doc = window.document; // Remove all elements added to DOM @@ -91,7 +91,7 @@ ZoteroOCR = { } doc.querySelector('[href="zotero-ocr.ftl"]').remove(); }, - + removeFromAllWindows() { var windows = Zotero.getMainWindows(); for (let win of windows) { @@ -99,7 +99,7 @@ ZoteroOCR = { this.removeFromWindow(win); } }, - + async recognize(window) { // Look for the tesseract executable in the settings and at commonly used locations. @@ -221,7 +221,6 @@ ZoteroOCR = { Zotero.logError(e); } - var iterator = new OS.File.DirectoryIterator(dir); var imageListArray = []; await iterator.forEach(function onEntry(entry) { @@ -232,7 +231,7 @@ ZoteroOCR = { }); Zotero.debug('Files are now:') Zotero.debug(imageListArray); - + // save the list of images in a separate file Zotero.File.putContents(Zotero.File.pathToFile(imageList), imageListArray.join('\n')); @@ -267,7 +266,7 @@ ZoteroOCR = { newNote.parentID = item.id; await newNote.saveTx(); } - + if (Zotero.Prefs.get("zoteroocr.outputHocr")) { let contents = await Zotero.File.getContentsAsync(ocrbase + '.hocr'); // replace the absolute paths of images with relative ones @@ -304,7 +303,7 @@ ZoteroOCR = { parentItemID: item.id }); } - + if (!Zotero.Prefs.get("zoteroocr.outputPNG") && imageListArray) { // delete image list await Zotero.File.removeIfExists(imageList); @@ -315,10 +314,9 @@ ZoteroOCR = { } } }, - + async main() { // Global properties are included automatically in Zotero 7 var host = new URL('https://foo.com/path').host; - }, }; From 4ecbce0412780a7bd7ae4d6c178535d7ad19c354 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 24 Mar 2024 14:31:48 +0100 Subject: [PATCH 13/15] code formatting fixes --- src/bootstrap.js | 4 ++-- src/manifest.json | 4 ++-- src/updates.json => updates.json | 0 3 files changed, 4 insertions(+), 4 deletions(-) rename src/updates.json => updates.json (100%) diff --git a/src/bootstrap.js b/src/bootstrap.js index 20a7b1b..b270d45 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -10,13 +10,13 @@ function install() { async function startup({ id, version, rootURI }) { log("Starting Zotero OCR"); - + Zotero.PreferencePanes.register({ pluginID: 'zotero-ocr@bib.uni-mannheim.de', src: rootURI + 'prefs.xhtml', //scripts: [rootURI + 'prefs.js'] }); - + Services.scriptloader.loadSubScript(rootURI + 'zotero-ocr.js'); ZoteroOCR.init({ id, version, rootURI }); ZoteroOCR.addToAllWindows(); diff --git a/src/manifest.json b/src/manifest.json index ac6877c..2e9fe27 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -11,9 +11,9 @@ "applications": { "zotero": { "id": "zotero-ocr@bib.uni-mannheim.de", - "update_url": "https://raw.githubusercontent.com/UB-Mannheim/zotero-ocr/master/update.json", + "update_url": "https://raw.githubusercontent.com/UB-Mannheim/zotero-ocr/master/updates.json", "strict_min_version": "6.999", "strict_max_version": "7.0.*" } } -} \ No newline at end of file +} diff --git a/src/updates.json b/updates.json similarity index 100% rename from src/updates.json rename to updates.json From 5ad75941186abce8307e726831432390796c6064 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 24 Mar 2024 14:46:17 +0100 Subject: [PATCH 14/15] cleaning up unncessary lines --- src/bootstrap.js | 1 - src/style.css | 7 ------- src/zotero-ocr.js | 35 ++--------------------------------- updates.json | 2 +- 4 files changed, 3 insertions(+), 42 deletions(-) delete mode 100644 src/style.css diff --git a/src/bootstrap.js b/src/bootstrap.js index b270d45..e2db3b8 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -20,7 +20,6 @@ async function startup({ id, version, rootURI }) { Services.scriptloader.loadSubScript(rootURI + 'zotero-ocr.js'); ZoteroOCR.init({ id, version, rootURI }); ZoteroOCR.addToAllWindows(); - await ZoteroOCR.main(); } function onMainWindowLoad({ window }) { diff --git a/src/style.css b/src/style.css deleted file mode 100644 index 57e6e0a..0000000 --- a/src/style.css +++ /dev/null @@ -1,7 +0,0 @@ -.row { - color: red; -} - -window[data-green-instead] .row { - color: green; -} diff --git a/src/zotero-ocr.js b/src/zotero-ocr.js index 5518379..136e722 100644 --- a/src/zotero-ocr.js +++ b/src/zotero-ocr.js @@ -30,42 +30,16 @@ ZoteroOCR = { // Use Fluent for localization window.MozXULElement.insertFTLIfNeeded("zotero-ocr.ftl"); - // Add menu option - let menuitem = doc.createXULElement('menuitem'); - menuitem.id = 'ocr-selected-pdfs'; - menuitem.setAttribute('type', 'checkbox'); - menuitem.setAttribute('data-l10n-id', 'ocr-selected-pdfs'); - // MozMenuItem#checked is available in Zotero 7 - menuitem.addEventListener('command', () => { - ZoteroOCR.recognize(window); - }); - doc.getElementById('menu_ToolsPopup').appendChild(menuitem); - this.storeAddedElement(menuitem); - - + // Add context menu option let popupmenuitem = doc.createXULElement('menuitem'); popupmenuitem.id = 'zotero-ocr-item-menu'; popupmenuitem.class = 'menuitem-iconic zotero-menuitem-ocr' - //popupmenuitem.setAttribute('type', 'checkbox'); popupmenuitem.setAttribute('data-l10n-id', 'ocr-selected-pdfs'); doc.getElementById('zotero-itemmenu').appendChild(popupmenuitem); popupmenuitem.addEventListener('command', () => { ZoteroOCR.recognize(window); }); this.storeAddedElement(popupmenuitem); - - /* - const menupopup = doc.getElementById("zotero-itemmenu").appendChild(elements.create("menu", { - id: "zotero-ocr-item-menu", - label: "Zotero-OCR" //, - //class: "menuitem-iconic", - //image: "chrome://zotero-better-bibtex/content/skin/bibtex-menu.svg" - })).appendChild(elements.create("menupopup")); - menupopup.appendChild(elements.create("menuitem", { - label: "Test OCR", - oncommand: () => ZoteroOCR.recognize(window) - })); - */ }, addToAllWindows() { @@ -313,10 +287,5 @@ ZoteroOCR = { } } } - }, - - async main() { - // Global properties are included automatically in Zotero 7 - var host = new URL('https://foo.com/path').host; - }, + } }; diff --git a/updates.json b/updates.json index fad9e10..05292a3 100644 --- a/updates.json +++ b/updates.json @@ -14,4 +14,4 @@ ] } } -} \ No newline at end of file +} From c6b7c80e1d1df7ead832939f82754580be530201 Mon Sep 17 00:00:00 2001 From: Alain Borel Date: Sun, 24 Mar 2024 15:02:19 +0100 Subject: [PATCH 15/15] logging clean-up --- src/bootstrap.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bootstrap.js b/src/bootstrap.js index e2db3b8..a6fa87d 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -5,11 +5,11 @@ function log(msg) { } function install() { - log("Installed Zotero OCR"); + log("Installed"); } async function startup({ id, version, rootURI }) { - log("Starting Zotero OCR"); + log("Starting"); Zotero.PreferencePanes.register({ pluginID: 'zotero-ocr@bib.uni-mannheim.de', @@ -31,11 +31,11 @@ function onMainWindowUnload({ window }) { } function shutdown() { - log("Shutting down Zotero OCR"); + log("Shutting down"); ZoteroOCR.removeFromAllWindows(); ZoteroOCR = undefined; } function uninstall() { - log("Uninstalled Zotero OCR"); + log("Uninstalled"); }