From ef983bbccf511e4cef8af4338a41db32f7c5f377 Mon Sep 17 00:00:00 2001 From: Joey Korkames Date: Wed, 23 Jul 2014 12:47:13 -0700 Subject: [PATCH] release to github Hello octocat! --- README.md | 52 ++++++ __init__.py | 284 +++++++++++++++++++++++++++++++ gui.py | 90 ++++++++++ install_deps_osx.sh | 9 + plugin-import-name-djvumaker.txt | 0 test.pdf | Bin 0 -> 111950 bytes 6 files changed, 435 insertions(+) create mode 100644 README.md create mode 100755 __init__.py create mode 100644 gui.py create mode 100755 install_deps_osx.sh create mode 100644 plugin-import-name-djvumaker.txt create mode 100644 test.pdf diff --git a/README.md b/README.md new file mode 100644 index 0000000..87e12b0 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +DjVuMaker Plugin for Calibre +--- +This plugin adds DJVU output conversion for Postscript documents (*.pdf, .ps). +Files can be converted through a GUI menu and optionally as FileType hook for automatically converting imports of all Postscript documents. + +[Screenshot of GUI Menu & Job log] + +DjVU files are best for rendering large image-based documents (100+ pg. black-and-white-scaned archive-books) on markup-ebook readers with sub-300MiB memory and sub-2GiB storage capacities. +The community-made Kindle readers kindlepdfviewer & koreader support DjVu files and can deliver noticable speed increase over PDF originals of such documents. +Some massive 1000+ page books can only be read unsplit on these devices in DjVu format. + +PDF is still better for vector/markup based "ebooks" so this plugin will not try to convert documents it detects having less than 1 raster image per page. + +Under the Hood +--- +There are a few implementations of DjVU tools in the wild, but the fastest and most robust free one is the DjVuLibre suite and its Ghostscript plugin "GsDjvu". +GsDjvu was witlessly licensed by AT&T with a "free" but GPL-incompatible license which makes pre-compiled packages impossible to publically distribute. +Therefore both packages must be built by the user in a complicated procedure, which the plugin tries to facilitate when installed into Calibre. + +Installation +--- +* Right click the preferences button in calibre, select get new plugins, scroll down the list and choose the DjVuMaker plugin to install +[screenshot] +* Or, download the zip and install it from the shell +```bash +wget github.com/kfix/calibre_plugin_djvumaker/master/zipfile +calibre-customize -b master.zip +``` +* Or++, clone this repo and install from source +```bash +git clone github.com/kfix/calibre-plugin-djvumaker +cd calibre-plugin-djvumaker +./__init__.py +``` + +* [Required] Build the conversion programs +```calibre-debug -R djvumaker install_deps``` +**Only works on OSX for now** + +* [Optional] run a test conversion out-of-GUI against the included PDF. Press CTRL-C to exit. +```calibre-debug -R djvumaker test.pdf``` + +* (Re)start Calibre and start converting your PDF books! + +Q: Why not write a "standard" Conversion Plugin for DjVU? +--- +Calibre's conversion API currently supports two pipelines: +1) markup-based ebooks (book.xfmt > book.OEB > book.yfmt): useless for working on image-based scans. +2) comic books (*.cbz): unusably slow for library books due to its over-reliance on Python for its transform pipeline. + +Only ghostscript+gsdjvu delivers usable conversion times for large scanned books. +Patching Calibre's conversion API to add a 3rd pipeline to support them would be far more involved than this sub-500-line plugin (excluding these explanations :-). diff --git a/__init__.py b/__init__.py new file mode 100755 index 0000000..10325d2 --- /dev/null +++ b/__init__.py @@ -0,0 +1,284 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +__license__ = 'GPL 3' +__copyright__ = '2014, Joey Korkames ' +__docformat__ = 'restructuredtext en' + +PLUGINNAME = 'djvumaker' # Name of the plugin + +#run this file directly to self-install the plugins to calibre +if __name__ == '__main__': + import os, sys + os.system("calibre-customize -b %s" % os.path.dirname(os.path.abspath(__file__))) + print 'plugin installed. test & debug with: `calibre-debug -r djvumaker -- test.pdf`' + sys.exit() + +import errno, os, sys, subprocess, traceback +from functools import partial +from calibre.ebooks import ConversionError +from calibre.constants import (isosx, iswindows, islinux, isbsd) +from calibre.utils.ipc.simple_worker import fork_job, WorkerError +from calibre import force_unicode, prints +from calibre.ptempfile import PersistentTemporaryFile +#from calibre.ebooks.pdf.pdftohtml import PDFTOHTML +#from xml.dom.minidom import parse, parseString + +from calibre.customize import FileTypePlugin, InterfaceActionBase + +if iswindows and hasattr(sys, 'frozen'): + subprocess.Popen = partial(subprocess.Popen, creationflags=0x08) # CREATE_NO_WINDOW=0x08 so that no ugly console is popped up +if (islinux or isbsd or isosx) and getattr(sys, 'frozen', False): + pass #shell messes up escaping of spaced filenames to the script #popen = partial(subprocess.Popen, shell=True) + +# -- DJVU conversion utilities wrapper functions -- see http://en.wikisource.org/wiki/User:Doug/DjVu_Files + +def c44(srcdoc, cmdflags=[], log=None): + #part of djvulibre, converts jpegs to djvu + # then combine with djvm -c book.djvu pageN.djvu pageN+1.djvu .. + #files end up being huge + pass + +def cjb2(srcdoc, cmdflags=[], log=None): + #part of djvulibre, converts tiff to djvu + # need to bitone/greyscale the tiff beforehand + # gs -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -dProcessColorModel=DeviceGray -dOverrideICC -f input.pdf -o output.pdf + #osx has Quartz and a little cocoa app can break down a pdf into tiffs: http://lists.apple.com/archives/cocoa-dev/2002/Jun/msg00729.html + # http://scraplab.net/print-production-with-quartz-and-cocoa/ + # then combine with djvm -c book.djvu pageN.djvu pageN+1.djvu .. + pass + +def minidjvu(srcdoc, cmdflags=[], log=None): + #http://minidjvu.sourceforge.net/ + #^foss license, supports raw TIFF images + #https://code.google.com/p/mupdf-converter/source/browse/trunk/MuPDF/MuPDFConverter.cs + pass + +def k2pdfopt(srcdoc, cmdflags=[], log=None): + #brilliant, if quirky, app for reflowing a raster doc to layout suitable on e-readers, + #reads DJVUs but only writes PDFs + pass + +def pdf2djvu(srcdoc, cmdflags=[], log=None): + #https://code.google.com/p/pdf2djvu/ + #pdf2djvu -o output_file input_file + pass + +def mupdf(srcdoc, cmdflags=[], log=None): + #https://github.com/Ernest0x/mupdf + #can dump pdfs into tiffs and vice versa + #mutool extract + pass + +def djvudigital(srcdoc, cmdflags=[], log=None): + #only supports pdf and ps, tricky to get compiled and installed, but is the fastest converter + #win32: http://code.google.com/p/osspack32/downloads/detail?name=ghostscript8.71_gsdjvu1.5_src.7z + #gentoo: emerge ghostscript-gpl --use-djvu + #osx: brew install --build-from-source --with-djvu ghostscript + + if 'CALIBRE_WORKER' in os.environ: + cmdbuf=0 #running as a fork_job, all process output piped to logfile, so don't buffer + else: + cmdbuf=1 #line-buffered + + if log: #divert our streaming output printing to the caller's logger + prints = partial(log.prints, 1) #log.print(INFO, yaddayadda) + else: + #def prints(p): print p + prints = sys.stdout.write + #prints = sys.__stdout__.write #unredirectable original fd + #`pip sarge` makes streaming subprocesses easier than sbp.Popen + + bookname = os.path.splitext(os.path.basename(srcdoc))[0] + with PersistentTemporaryFile(bookname + '.djvu') as djvu: #note, PTF() is from calibre + try: + cmd = ['djvudigital'] + cmdflags + [srcdoc, djvu.name] + prints('%s: subprocess: %s' % (PLUGINNAME, cmd)) + proc = subprocess.Popen(cmd, bufsize=cmdbuf, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) #stderr:csepdjvu, stdout: ghostscript & djvudigital + if cmdbuf > 0: #stream the output + while proc.poll() is None: prints(proc.stdout.readline()) + for line in proc.stdout.read().split('\n'): prints(line) #remainder of post-polled buffer + else: + proc.communicate() + prints('%s: subprocess returned %s' % (PLUGINNAME, proc.returncode)) + except OSError as e: + if e.errno == errno.ENOENT: + prints('%s: $PATH[%s]/djvudigital not available: you may need to install djvu' % (self.name, os.environ['PATH'])) + return False + + if proc.returncode != 0: return False #10 djvudigital shell/usage error + + return djvu.name + +def is_rasterbook_pdfimages(path): + '''identify whether this is a raster doc (ie. a scan) or a digitally authored text+graphic doc. skip conversion if source doc is not mostly raster-image based + ascertain this by checking whether there are as many image objects in the PDF as there are pages +/- 5 (google books and other scanners add pure-text preambles to their pdfs)''' + is_raster = False + #from calibre.ebooks.pdf.pdftohtml import PDFTOHTML + #^^need to get poppler-utils' pdfimages added to calibre makefile + # http://cgit.freedesktop.org/poppler/poppler/tree/utils/pdfimages.cc + try: + pdfimages = subprocess.check_output(["pdfimages", "-f", "2", "-l", "30", "-q", "-list", path]) #use pages 2-30 for the test, don't waste time parsing giant pdfs + pdfimages = [l for l in pdfimages.splitlines()[2:] if l.split()[2] == 'image'] #filter out real rgb images from masks and other weird entities + if len(pdfimages) > 0: #we found actual rasters in the PDF + is_raster = reduce(lambda p,i: p - i < 5, [int(i) for i in pdfimages.pop().split()[:2]]) #get the page# & image# of last obj scanned, cmp them +/- 5 + except OSError as e: + if e.errno == errno.ENOENT: + prints('%s: $PATH[%s]/pdfimages not available: you may need to install poppler-utils' % (self.name, os.environ['PATH'])) + prints(traceback.format_exc()) + raise #ConversionError + except subprocess.CalledProcessError as e: + prints('%s: subprocess failed with return code %d:\n\t%s\n' % (self.name, e.returncode, ' '.join(e.cmd), e.output)) + prints(traceback.format_exc()) + raise #ConversionError + + return is_raster + +# -- Calibre Plugin class -- + +class DJVUmaker(FileTypePlugin, InterfaceActionBase): #multiple inheritance for gui hooks! + name = PLUGINNAME # Name of the plugin + description = 'Convert raster-based document files (Postscript, PDF) to DJVU with GUI button and on-import' + supported_platforms = ['linux', 'osx', 'windows'] # Platforms this plugin will run on + author = 'Joey Korkames' # The author of this plugin + version = (1, 0, 0) # The version number of this plugin + file_types = set(['pdf','ps', 'eps']) # The file types that this plugin will be automatically applied to + on_postimport = True # Run this plugin after books are addded to the database + minimum_calibre_version = (1, 0, 0) #needs the new db api and id bugfix + actual_plugin = 'calibre_plugins.djvumaker.gui:ConvertToDJVUAction' #InterfaceAction plugin location + + def customization_help(self, gui=False): + return 'Enter additional `djvudigital --help` command-flags here:' # os.system('MANPAGER=cat djvudigital --help') + #todo: make custom config widget so we can have attrs for each of the wrappers: djvudigital minidjvu, c44, etc. + #todo: `man2html djvumaker` and gui=True for comprehensive help? + + def cli_main(self, args): + def prints(p): print p + id_or_path = args[1] + + if id_or_path.isdigit(): + '`calibre-debug -r 123 #id(123).pdf` -> tempfile(id(123).djvu)' + self.postimport(id_or_path, fmt) + elif id_or_path == "convert_all": + '`calibre-debug -r djvumaker convert_all`' + prints("Copy-convert all PDFs to DJVU? (press CTRL+C to abort)") + icl_user = raw_input('') + from calibre.library import db + db = db() # initialize calibre library database + for book_id in list(db.all_ids()): + if db.has_format(book_id, 'DJVU', index_is_id=True): + continue + if db.has_format(book_id, 'PDF', index_is_id=True): + db.run_plugins_on_postimport(book_id, 'pdf') + continue + elif id_or_path == "install_deps": + if isosx: + os.system("install_deps_osx.sh") #hmm, need to extract this from the self.plugin_path zipfile + #todo: make more install scripts + elif islinux: raise + elif iswindows: raise + elif isbsd: raise + else: + '`calibre-debug -r djvumaker test.pdf` -> tempfile(test.djvu)' + if is_rasterbook_pdfimages(id_or_path): + djvu = djvudigital(id_or_path) + if djvu: + prints("\n\nopening djvused in subshell, press Ctrl+D to exit and delete '%s'\n\n" % djvu) + #de-munge the tty + sys.stdin = sys.__stdin__ + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + os.system("stat '%s'" % djvu) + os.system("djvused -e dump '%s'" % djvu) + os.system("djvused -v '%s'" % djvu) + + # -- calibre filetype plugin mandatory methods -- + + def run(self, path_to_ebook): + return path_to_ebook #noop + + def postimport(self, book_id, book_format, db=None, log=None, fork_job=True): + if log: #divert our printing to the caller's logger + prints = partial(log.prints, 1) #log.print(INFO, yaddayadda) + else: + def prints(p): print p+'\n' + + if sys.__stdin__.isatty(): + fork_job = False #probably being run as `calibredb add`, do all conversions in main loop + rpc_refresh = True #use the calibre RPC to signal a GUI refresh + + if db is None: + from calibre.library import db + db = db() # initialize calibre library database + + if db.has_format(book_id, 'DJVU', index_is_id=True): + prints("%s: already have 'DJVU' format document for book ID #%s" % (PLUGINNAME, book_id)) + return None #don't auto convert, we already have a DJVU for this document + + path_to_ebook = db.format_abspath(book_id, book_format, index_is_id=True) + + if book_format == 'pdf': + if is_rasterbook_pdfimages(path_to_ebook): + pass #should add a 'scanned' or 'djvumaker' tag + else: + #this is a marked-up/vector-based pdf, no advantages to having another copy in DJVU format + prints("%s: %s document from book ID #%s determined to be a markup-based ebook, not converting to DJVU" % (self.name, book_format, book_id)) + return None #no-error in job panel + #todo: test the DPI to determine if a document is from a broad-sheeted book. if so, queue up k2pdfopt to try and chunk the content appropriately to letter size + + prints("%s: scheduling new %s document from book ID #%s for post-import DJVU conversion: %s" % (self.name, book_format, book_id, path_to_ebook)) + + cmdflags = [] + if self.site_customization is not None: cmdflags.extend(self.site_customization.split()) + #`--gsarg=-dFirstPage=1,-dLastPage=1` how to limit page range + #more gsargs: https://leanpub.com/pdfkungfoo + + if fork_job: #useful for not blocking calibre GUI when large PDFs are dropped into the automatic-import-folder + try: + #https://github.com/kovidgoyal/calibre/blob/master/src/calibre/utils/ipc/simple_worker.py #dispatch API for Worker() + #src/calibre/utils/ipc/launch.py #Worker() uses sbp.Popen to run a second Python to a logfile + #note that Calibre bungs the python loader to check the plugin directory when modules with calibre_plugin. prefixed are passed + # https://github.com/kovidgoyal/calibre/blob/master/src/calibre/customize/zipplugin.py#L192 + jobret = fork_job('calibre_plugins.%s' % self.name, 'djvudigital', + args=[path_to_ebook, cmdflags, log], + kwargs={}, + env={'PATH': os.environ['PATH'] + ':/usr/local/bin'}, #djvu and poppler-utils on osx + timeout=600) #todo: determine a resonable timeout= based on filesize or make a heartbeat= check + + except WorkerError as e: + prints('%s: djvudigital background conversion failed: \n%s' % (self.name,force_unicode(e.orig_tb))) + raise #ConversionError + except: + prints(traceback.format_exc()) + raise + + #dump djvudigital output logged in file by the Worker to calibre proc's (gui or console) log/stdout + with open(jobret['stdout_stderr'], 'rb') as f: + raw = f.read().strip() + prints(raw) + + if jobret['result']: + djvu = jobret['result'] + else: + WorkerError("djvu conversion error: %s" % jobret['result']) + #elif hasattr(self, gui): #if we have the calibre gui running, we can give it a threadedjob and not use fork_job + else: #!fork_job & !gui + djvu = djvudigital(path_to_ebook, cmdflags, log) + + if djvu: + db.new_api.add_format(book_id, 'DJVU', djvu, run_hooks=True) + prints("%s: added new 'DJVU' document to book ID #%s" % (PLUGINNAME, book_id)) + + if sys.__stdin__.isatty(): + #update calibre gui Out-Of-Band. Like if we were run as a command-line scripted import + #this resets current gui views/selections, no cleaner way to do it :-( + from calibre.utils.ipc import RC + t = RC(print_error=False) + t.start() + t.join(3) + if t.done: #GUI is running + t.conn.send('refreshdb:') + t.conn.close() + prints("%s: signalled Calibre GUI refresh" % PLUGINNAME) + else: + raise #ConversionError diff --git a/gui.py b/gui.py new file mode 100644 index 0000000..c992b3c --- /dev/null +++ b/gui.py @@ -0,0 +1,90 @@ +import sys +from functools import partial +from calibre import prints +from cStringIO import StringIO +from calibre.utils.logging import ERROR, WARN, DEBUG, INFO + +from calibre.gui2.actions import InterfaceAction +#http://manual.calibre-ebook.com/_modules/calibre/gui2/actions.html + +from calibre.customize.ui import run_plugins_on_postimport, find_plugin +from calibre.gui2.threaded_jobs import ThreadedJob + +#http://manual.calibre-ebook.com/creating_plugins.html#ui-py +class ConvertToDJVUAction(InterfaceAction): + name ='Convert to DJVU' + + action_spec = (_('Convert to DJVU'), 'mimetypes/djvu.png', _('engage the djvumaker plugin on this book'), None) + # (label, icon_path, tooltip, keyboard shortcut) + + action_type = 'current' + + #don't auto-add the button to any menus' top-level + dont_add_to = frozenset(['toolbar', 'toolbar-device', 'context-menu', + 'context-menu-device', 'toolbar-child', 'menubar', 'menubar-device', + 'context-menu-cover-browser']) + + def genesis(self): + self.qaction.triggered.connect(self.convert_book) + + def gui_layout_complete(self): + #append my top-level DJVU action to the built-in conversion menus + #https://github.com/kovidgoyal/calibre/blob/master/src/calibre/gui2/actions/convert.py + cb = self.gui.iactions['Convert Books'] + cm = partial(cb.create_menu_action, cb.qaction.menu()) + cm('convert-djvu-cvtm', _('Convert to DJVU'), icon=self.qaction.icon(), triggered=self.convert_book) + + def location_selected(self, loc): + # Currently values for loc are: ``library, main, card and cardb``. + enabled = loc == 'library' + self.qaction.setEnabled(enabled) + + def convert_book(self, triggered): + rows = self.gui.current_view().selectionModel().selectedRows() + self._convert_books(rows) + + def _convert_books(self, rows): + db = self.gui.current_db + if not rows or len(rows) == 0: + return error_dialog(self.gui, _('Cannot convert'), + _('No books selected'), show=True) + + if self.gui.current_view() is self.gui.library_view: + ids = list(map(self.gui.library_view.model().id, rows)) + for book_id in ids: + if db.has_format(book_id, 'DJVU', index_is_id=True): + continue + if db.has_format(book_id, 'PDF', index_is_id=True): + path_to_ebook = db.format_abspath(book_id, 'pdf', index_is_id=True) + job = ThreadedJob('ConvertToDJVU', + 'Converting %s to DJVU' % path_to_ebook, + func=self._tjob_djvu_convert, + args=(db, book_id, None, 'pdf'), #by book_id! + kwargs={}, + callback=self._tjob_refresh_books) + #there is an assumed log=GUILog() ! src/calibre/utils/logging.py + self.gui.job_manager.run_threaded_job(job) #too bad console utils and filetype plugins can't start a jobmanager..fork_job is a wretch + else: #!gui_library + #looking at a device's flash contents or some other non-library store, filepaths here are not to be tracked in the db + fpaths = self.gui.current_view().model().paths(rows) + for fpath in fpaths: + job = ThreadedJob('ConvertToDJVU', + 'Converting %s to DJVU' % path_to_ebook, + func=self._tjob_djvu_convert, + args=(None, None, fpath, 'pdf'), #by fpath! + kwargs={}) + self.gui.job_manager.run_threaded_job(job) + + def _tjob_djvu_convert(self, db, book_id, fpath, ftype, abort, log, notifications): + if book_id: + find_plugin('djvumaker').postimport(book_id, ftype, db, log, fork_job=False) + elif fpath: + find_plugin('djvumaker').djvudigital(path, flags, None) + + def _tjob_refresh_books(self, job): + book_id = job.args[1] + #self.gui.iactions['Edit Metadata'].refresh_gui([book_id], covers_changed=False) + self.gui.library_view.model().refresh_ids([book_id]) + self.gui.library_view.model().current_changed(self.gui.library_view.currentIndex(), + self.gui.library_view.currentIndex()) + self.gui.tags_view.recount() diff --git a/install_deps_osx.sh b/install_deps_osx.sh new file mode 100755 index 0000000..9b83d32 --- /dev/null +++ b/install_deps_osx.sh @@ -0,0 +1,9 @@ +#!/bin/sh +! (which brew >/dev/null) && echo "Homebrew required. Please visit http://github.com/Homebrew/homebrew" && exit 1 +brew install --with-djvu ghostscript +while read -p "Install DjView.app? (y/n): " input; do + ! [ "$input" == "y" ] && break + brew install caskroom/cask/brew-cask + brew cask install djview + #need a cask for the caminova finder/safari plugin too +done diff --git a/plugin-import-name-djvumaker.txt b/plugin-import-name-djvumaker.txt new file mode 100644 index 0000000..e69de29 diff --git a/test.pdf b/test.pdf new file mode 100644 index 0000000000000000000000000000000000000000..77c61c17ff2b090c92d55eb37449addc8b0d2068 GIT binary patch literal 111950 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�$oE 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