def dragDataReceived(self, widget, context, x, y, selection, target_type, timestamp): if target_type == self.TARGET_TYPE_URI_LIST: uris = selection.data.strip('\r\n\x00').split() paths = [] for uri in uris: path = "" if uri.startswith('file:\\\\\\'): # windows path = uri[8:] elif uri.startswith('file://'): # nautilus, rox path = uri[7:] elif uri.startswith('file:'): # xffm path = uri[5:] path = urllib.url2pathname(path).strip('\r\n\x00') if os.path.isfile(path): paths.append(path) for path in paths: if os.path.splitext(path)[1] == '.pdf': folder = lib.convertPdfToImages(path, self.configuration_manager.TEMPORARY_FOLDER) self.__addImagesToReviewer(lib.getImagesFromFolder(folder)) else: try: self.__addImagesToReviewer([path]) except: pass
def addFolder(self, widget): file_open_dialog = widgetPresenter.FileDialog('select-folder') response = file_open_dialog.run() if response == gtk.RESPONSE_OK: filenames = file_open_dialog.get_filenames() file_open_dialog.destroy() for folder in filenames: self.__addImagesToReviewer(lib.getImagesFromFolder(folder)) file_open_dialog.destroy()
def __init__(self): # i18n languages = [] lc, encoding = locale.getdefaultlocale() if lc: languages = [lc] languages += DEFAULT_LANGUAGES gettext.bindtextdomain(OCRFEEDER_COMPACT_NAME, LOCALE_DIR) gettext.textdomain(OCRFEEDER_COMPACT_NAME) language = gettext.translation(OCRFEEDER_COMPACT_NAME, LOCALE_DIR, languages = languages, fallback = True) _ = language.gettext self.EXPORT_FORMATS = {0: ('ODT', _('ODT')), 1: ('HTML', _('HTML')), 2: ('PDF', _('PDF')), 3: ('TXT', _('Plain Text'))} self.title = OCRFEEDER_STUDIO_NAME self.main_window = widgetPresenter.MainWindow() self.main_window.set_title(self.title) self.document_generator_manager = DocumentGeneratorManager() self.configuration_manager = ConfigurationManager() self.ocr_engines_manager = OcrEnginesManager(self.configuration_manager) self.configuration_manager.loadConfiguration() user_engines_folder = self.configuration_manager.user_engines_folder self.engines_needing_update = \ self.ocr_engines_manager.makeEnginesFromFolder(user_engines_folder) self.ocr_engines = self.ocr_engines_manager.ocr_engines self.pages_icon_view = PagesIconView() self.pages_icon_view.setDeleteCurrentPageFunction(self.deleteCurrentPage) self.pages_icon_view.get_model().connect('row-inserted', self.__pagesUpdatedCallback) self.pages_icon_view.get_model().connect('row-deleted', self.__pagesUpdatedCallback) self.pages_icon_view.show() self.main_window.main_area_left.add_with_viewport(self.pages_icon_view) self.images_selectable_area = {} self.source_images_controler = ImageReviewer_Controler(self.main_window, self.pages_icon_view, self.ocr_engines, self.configuration_manager) self.project_name = None toolbar_callback_dict = {'recognizePage': self.__recognizePageAction, 'recognizeDocument': self.__recognizeDocumentAction, 'export_to_odt': self.exportToOdt} menubar_callback_dict = {'exit': self.quit, 'add_image': self.addImage, 'export_to_odt': self.exportToOdt, 'edit_page': self.choosePageSize, 'delete_page': self.deleteCurrentPage, 'export_dialog': self.exportDialog, 'add_folder': self.addFolder, 'import_pdf': self.importPdf, 'save_project': self.saveProject, 'save_project_as': self.saveProjectAs, 'open_project': self.openProject, 'append_project': self.appendProject,'clear': self.clear, 'unpaper': self.unpaper, 'preferences': self.preferences, 'about': self.about, 'ocr_engines': self.ocrEngines, 'zoom_in': self.zoomIn, 'zoom_out': self.zoomOut, 'zoom_fit': self.zoomFit, 'reset_zoom': self.resetZoom, 'recognize_areas': self.__recognizeSelectedAreas, 'import_from_scanner': self.importFromScanner, 'select_next_area': self.source_images_controler.selectNextArea, 'select_previous_area': self.source_images_controler.selectPreviousArea, 'select_all_areas': self.source_images_controler.selectAllAreas, 'delete_selected_areas': self.source_images_controler.deleteSelectedAreas, 'image_deskewer': self.source_images_controler.deskewCurrentImage, 'copy_to_clipboard': self.source_images_controler.copyRecognizedTextToClipboard, 'spell_checker': self.spellChecker, 'help_contents': self.showHelpContents, 'move_page_down': self.movePageDown, 'move_page_up': self.movePageUp, 'select_next_page': self.selectNextPage, 'select_previous_page': self.selectPreviousPage, } self.main_window.setHeader(menubar_callback_dict, toolbar_callback_dict) self.main_window.setDestroyEvent(self.quit) parser = ArgumentParser(description=OCRFEEDER_STUDIO_COMMENTS) parser.add_argument('images', metavar='IMAGE', nargs='*', help='images to be automatically added ' 'on start-up') parser.add_argument('-d', '--dir', help='directory with images to be ' 'added automatically on start-up') parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + OCRFEEDER_STUDIO_VERSION) args = parser.parse_args() imgs = args.images if imgs: self.__addImagesToReviewer(imgs) if args.dir: self.__addImagesToReviewer(lib.getImagesFromFolder(args.dir)) self.main_window.setHasSelectedBoxes(False) self.main_window.setHasContentBoxes(False) self.main_window.setNumberOfPages( self.pages_icon_view.getNumberOfPages()) # Show dialog to choose system-wide OCR engines when no engine was found if not self.ocr_engines: engines = self.configuration_manager.getEnginesInSystem() if engines: add_engines_dialog = widgetPresenter.SystemEnginesDialog(engines) response = add_engines_dialog.run() if response == Gtk.ResponseType.ACCEPT: for engine in add_engines_dialog.getChosenEngines(): self.ocr_engines_manager.addNewEngine(engine) add_engines_dialog.destroy() else: self.__askForEnginesMigration() self._last_images_dir = '' if not self.ocr_engines: self.warnNoOCREngines()
def __loadPdfFinishedCb(self, dialog, folder, error): self.__addImagesToReviewer(lib.getImagesFromFolder(folder)) dialog.destroy()
def __init__(self): # i18n languages = [] lc, encoding = locale.getdefaultlocale() if lc: languages = [lc] languages += DEFAULT_LANGUAGES gettext.bindtextdomain(OCRFEEDER_COMPACT_NAME, LOCALE_DIR) gettext.textdomain(OCRFEEDER_COMPACT_NAME) language = gettext.translation(OCRFEEDER_COMPACT_NAME, LOCALE_DIR, languages=languages, fallback=True) _ = language.gettext self.EXPORT_FORMATS = { 0: ('ODT', _('ODT')), 1: ('HTML', _('HTML')), 2: ('PDF', _('PDF')), 3: ('TXT', _('Plain Text')) } self.title = OCRFEEDER_STUDIO_NAME self.main_window = widgetPresenter.MainWindow() self.main_window.set_title(self.title) self.document_generator_manager = DocumentGeneratorManager() self.configuration_manager = ConfigurationManager() self.ocr_engines_manager = OcrEnginesManager( self.configuration_manager) self.configuration_manager.loadConfiguration() user_engines_folder = self.configuration_manager.user_engines_folder self.engines_needing_update = \ self.ocr_engines_manager.makeEnginesFromFolder(user_engines_folder) self.ocr_engines = self.ocr_engines_manager.ocr_engines self.pages_icon_view = PagesIconView() self.pages_icon_view.setDeleteCurrentPageFunction( self.deleteCurrentPage) self.pages_icon_view.get_model().connect('row-inserted', self.__pagesUpdatedCallback) self.pages_icon_view.get_model().connect('row-deleted', self.__pagesUpdatedCallback) self.pages_icon_view.show() self.main_window.main_area_left.add_with_viewport(self.pages_icon_view) self.images_selectable_area = {} self.source_images_controler = ImageReviewer_Controler( self.main_window, self.pages_icon_view, self.ocr_engines, self.configuration_manager) self.project_name = None toolbar_callback_dict = { 'recognizePage': self.__recognizePageAction, 'recognizeDocument': self.__recognizeDocumentAction, 'export_to_odt': self.exportToOdt } menubar_callback_dict = { 'exit': self.quit, 'add_image': self.addImage, 'export_to_odt': self.exportToOdt, 'edit_page': self.choosePageSize, 'delete_page': self.deleteCurrentPage, 'export_dialog': self.exportDialog, 'add_folder': self.addFolder, 'import_pdf': self.importPdf, 'save_project': self.saveProject, 'save_project_as': self.saveProjectAs, 'open_project': self.openProject, 'append_project': self.appendProject, 'clear': self.clear, 'unpaper': self.unpaper, 'preferences': self.preferences, 'about': self.about, 'ocr_engines': self.ocrEngines, 'zoom_in': self.zoomIn, 'zoom_out': self.zoomOut, 'zoom_fit': self.zoomFit, 'reset_zoom': self.resetZoom, 'recognize_areas': self.__recognizeSelectedAreas, 'import_from_scanner': self.importFromScanner, 'select_next_area': self.source_images_controler.selectNextArea, 'select_previous_area': self.source_images_controler.selectPreviousArea, 'select_all_areas': self.source_images_controler.selectAllAreas, 'delete_selected_areas': self.source_images_controler.deleteSelectedAreas, 'image_deskewer': self.source_images_controler.deskewCurrentImage, 'copy_to_clipboard': self.source_images_controler.copyRecognizedTextToClipboard, 'spell_checker': self.spellChecker, 'help_contents': self.showHelpContents, 'move_page_down': self.movePageDown, 'move_page_up': self.movePageUp, 'select_next_page': self.selectNextPage, 'select_previous_page': self.selectPreviousPage, } self.main_window.setHeader(menubar_callback_dict, toolbar_callback_dict) self.main_window.setDestroyEvent(self.quit) parser = ArgumentParser(description=OCRFEEDER_STUDIO_COMMENTS) parser.add_argument('images', metavar='IMAGE', nargs='*', help='images to be automatically added ' 'on start-up') parser.add_argument('-d', '--dir', help='directory with images to be ' 'added automatically on start-up') parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + OCRFEEDER_STUDIO_VERSION) args = parser.parse_args() imgs = args.images if imgs: self.__addImagesToReviewer(imgs) if args.dir: self.__addImagesToReviewer(lib.getImagesFromFolder(args.dir)) self.main_window.setHasSelectedBoxes(False) self.main_window.setHasContentBoxes(False) self.main_window.setNumberOfPages( self.pages_icon_view.getNumberOfPages()) # Show dialog to choose system-wide OCR engines when no engine was found if not self.ocr_engines: engines = self.configuration_manager.getEnginesInSystem() if engines: add_engines_dialog = widgetPresenter.SystemEnginesDialog( engines) response = add_engines_dialog.run() if response == Gtk.ResponseType.ACCEPT: for engine in add_engines_dialog.getChosenEngines(): self.ocr_engines_manager.addNewEngine(engine) add_engines_dialog.destroy() else: self.__askForEnginesMigration() self._last_images_dir = '' if not self.ocr_engines: self.warnNoOCREngines()
def __init__(self): # i18n languages = [] lc, encoding = locale.getdefaultlocale() if lc: languages = [lc] languages += DEFAULT_LANGUAGES gettext.bindtextdomain(OCRFEEDER_COMPACT_NAME, LOCALE_DIR) gettext.textdomain(OCRFEEDER_COMPACT_NAME) language = gettext.translation(OCRFEEDER_COMPACT_NAME, LOCALE_DIR, languages = languages, fallback = True) _ = language.gettext self.EXPORT_FORMATS = {0: ('ODT', _('ODT')), 1: ('HTML', _('HTML')), 2: ('PDF', _('PDF')), 3: ('TXT', _('Plain Text'))} self.title = OCRFEEDER_STUDIO_NAME self.main_window = widgetPresenter.MainWindow() self.main_window.setTitle(self.title) self.document_generator_manager = DocumentGeneratorManager() self.configuration_manager = ConfigurationManager() self.ocr_engines_manager = OcrEnginesManager(self.configuration_manager) self.configuration_manager.loadConfiguration() user_engines_folder = self.configuration_manager.user_engines_folder self.engines_needing_update = \ self.ocr_engines_manager.makeEnginesFromFolder(user_engines_folder) self.ocr_engines = self.ocr_engines_manager.ocr_engines self.source_images_list_store = SourceImagesListStore() self.source_images_icon_view = SourceImagesSelectorIconView(self.source_images_list_store) self.source_images_icon_view.setDeleteCurrentPageFunction(self.deleteCurrentPage) self.source_images_icon_view.connect('drag_data_received', self.dragDataReceived) self.source_images_icon_view.connect('drag_drop', self.dragDrop) self.source_images_icon_view.get_model().connect('row-inserted', self.__pagesUpdatedCallback) self.source_images_icon_view.get_model().connect('row-deleted', self.__pagesUpdatedCallback) self.source_images_icon_view.drag_dest_set(gtk.DEST_DEFAULT_MOTION | gtk.DEST_DEFAULT_HIGHLIGHT, [('text/uri-list', 0, self.TARGET_TYPE_URI_LIST)], gtk.gdk.ACTION_COPY) self.source_images_icon_view.show() self.main_window.main_area_left.add_with_viewport(self.source_images_icon_view) self.images_selectable_area = {} self.source_images_controler = ImageReviewer_Controler(self.main_window, self.source_images_icon_view, self.ocr_engines, self.configuration_manager) self.project_name = None toolbar_callback_dict = {'recognizePage': self.__recognizePageAction, 'recognizeDocument': self.__recognizeDocumentAction, 'export_to_odt': self.exportToOdt} menubar_callback_dict = {'exit': self.quit, 'add_image': self.addImage, 'export_to_odt': self.exportToOdt, 'edit_page': self.choosePageSize, 'delete_page': self.deleteCurrentPage, 'export_dialog': self.exportDialog, 'add_folder': self.addFolder, 'import_pdf': self.importPdf, 'save_project': self.saveProject, 'save_project_as': self.saveProjectAs, 'open_project': self.openProject, 'append_project': self.appendProject,'clear': self.clear, 'unpaper': self.unpaper, 'preferences': self.preferences, 'about': self.about, 'ocr_engines': self.ocrEngines, 'zoom_in': self.zoomIn, 'zoom_out': self.zoomOut, 'zoom_fit': self.zoomFit, 'reset_zoom': self.resetZoom, 'recognize_areas': self.source_images_controler.recognizeSelectedAreas, 'import_from_scanner': self.importFromScanner, 'select_next_area': self.source_images_controler.selectNextArea, 'select_previous_area': self.source_images_controler.selectPreviousArea, 'select_all_areas': self.source_images_controler.selectAllAreas, 'delete_selected_areas': self.source_images_controler.deleteSelectedAreas, 'image_deskewer': self.source_images_controler.deskewCurrentImage, 'copy_to_clipboard': self.source_images_controler.copyRecognizedTextToClipboard, 'spell_checker': self.spellChecker, 'help_contents': self.showHelpContents, 'move_page_down': self.movePageDown, 'move_page_up': self.movePageUp, 'select_next_page': self.selectNextPage, 'select_previous_page': self.selectPreviousPage, } self.main_window.setHeader(menubar_callback_dict, toolbar_callback_dict) self.main_window.setDestroyEvent(self.quit) parser = OptionParser(version = '%prog ' + OCRFEEDER_STUDIO_VERSION) parser.add_option('-i', '--images', dest = 'images', action = 'append', type = 'string', metavar = 'IMAGE1 [IMAGE2, ...]', default = [], help = 'images to be automatically added on start-up. ' 'Use the option before every image path.') parser.add_option('-d', '--dir', dest = 'directory', action = 'store', type = 'string', help = 'directory with images to be added' ' automatically on start-up') options, args = parser.parse_args() imgs = options.images if imgs: self.__addImagesToReviewer(imgs) if options.directory: self.__addImagesToReviewer( lib.getImagesFromFolder(options.directory)) self.main_window.setHasSelectedBoxes(False) self.main_window.setHasContentBoxes(False) self.main_window.setNumberOfPages( self.source_images_icon_view.getNumberOfPages()) # Show dialog to choose system-wide OCR engines when no engine was found if not self.ocr_engines: engines = self.configuration_manager.getEnginesInSystem() if engines: add_engines_dialog = widgetPresenter.SystemEnginesDialog(engines) response = add_engines_dialog.run() if response == gtk.RESPONSE_ACCEPT: for engine in add_engines_dialog.getChosenEngines(): self.ocr_engines_manager.addNewEngine(engine) add_engines_dialog.destroy() else: self.__askForEnginesMigration()