Пример #1
0
 def start_presentation(self):
     """
     Starts a presentation from the beginning.
     """
     log.debug('start_presentation')
     # SlideShowWindow measures its size/position by points, not pixels
     # https://technet.microsoft.com/en-us/library/dn528846.aspx
     try:
         dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88)
     except win32ui.error:
         try:
             dpi = win32ui.GetForegroundWindow().GetDC().GetDeviceCaps(
                 88)
         except win32ui.error:
             dpi = 96
     size = ScreenList().current['size']
     ppt_window = None
     try:
         ppt_window = self.presentation.SlideShowSettings.Run()
     except (AttributeError, pywintypes.com_error) as e:
         log.exception('Caught exception while in start_presentation')
         log.exception(e)
         trace_error_handler(log)
         self.show_error_msg()
     if ppt_window and not Settings().value(
             'presentations/powerpoint control window'):
         try:
             ppt_window.Top = size.y() * 72 / dpi
             ppt_window.Height = size.height() * 72 / dpi
             ppt_window.Left = size.x() * 72 / dpi
             ppt_window.Width = size.width() * 72 / dpi
         except AttributeError as e:
             log.exception('AttributeError while in start_presentation')
             log.exception(e)
     # Find the presentation window and save the handle for later
     self.presentation_hwnd = None
     if ppt_window:
         log.debug('main display size:  y={y:d}, height={height:d}, '
                   'x={x:d}, width={width:d}'.format(
                       y=size.y(),
                       height=size.height(),
                       x=size.x(),
                       width=size.width()))
         win32gui.EnumWindows(self._window_enum_callback, size)
     # Make sure powerpoint doesn't steal focus, unless we're on a single screen setup
     if len(ScreenList().screen_list) > 1:
         Registry().get('main_window').activateWindow()
Пример #2
0
    def load_presentation(self):
        """
        Called when a presentation is added to the SlideController. It generates images from the PDF.

        :return: True is loading succeeded, otherwise False.
        """
        log.debug('load_presentation pdf')
        # Check if the images has already been created, and if yes load them
        if os.path.isfile(
                os.path.join(self.get_temp_folder(), 'mainslide001.png')):
            created_files = sorted(os.listdir(self.get_temp_folder()))
            for fn in created_files:
                if os.path.isfile(os.path.join(self.get_temp_folder(), fn)):
                    self.image_files.append(
                        os.path.join(self.get_temp_folder(), fn))
            self.num_pages = len(self.image_files)
            return True
        size = ScreenList().current['size']
        # Generate images from PDF that will fit the frame.
        runlog = ''
        try:
            if not os.path.isdir(self.get_temp_folder()):
                os.makedirs(self.get_temp_folder())
            if self.controller.mudrawbin:
                runlog = check_output([
                    self.controller.mudrawbin, '-w',
                    str(size.width()), '-h',
                    str(size.height()), '-o',
                    os.path.join(self.get_temp_folder(), 'mainslide%03d.png'),
                    self.file_path
                ],
                                      startupinfo=self.startupinfo)
            elif self.controller.gsbin:
                resolution = self.gs_get_resolution(size)
                runlog = check_output([
                    self.controller.gsbin, '-dSAFER', '-dNOPAUSE', '-dBATCH',
                    '-sDEVICE=png16m', '-r' + str(resolution),
                    '-dTextAlphaBits=4', '-dGraphicsAlphaBits=4',
                    '-sOutputFile=' +
                    os.path.join(self.get_temp_folder(), 'mainslide%03d.png'),
                    self.file_path
                ],
                                      startupinfo=self.startupinfo)
            created_files = sorted(os.listdir(self.get_temp_folder()))
            for fn in created_files:
                if os.path.isfile(os.path.join(self.get_temp_folder(), fn)):
                    self.image_files.append(
                        os.path.join(self.get_temp_folder(), fn))
        except Exception as e:
            log.debug(e)
            log.debug(runlog)
            return False
        self.num_pages = len(self.image_files)
        # Create thumbnails
        self.create_thumbnails()
        return True
Пример #3
0
    def load_presentation(self):
        """
        Called when a presentation is added to the SlideController. It generates images from the PDF.

        :return: True is loading succeeded, otherwise False.
        """
        log.debug('load_presentation pdf')
        # Check if the images has already been created, and if yes load them
        if os.path.isfile(os.path.join(self.get_temp_folder(), 'mainslide001.png')):
            created_files = sorted(os.listdir(self.get_temp_folder()))
            for fn in created_files:
                if os.path.isfile(os.path.join(self.get_temp_folder(), fn)):
                    self.image_files.append(os.path.join(self.get_temp_folder(), fn))
            self.num_pages = len(self.image_files)
            return True
        size = ScreenList().current['size']
        # Generate images from PDF that will fit the frame.
        runlog = ''
        try:
            if not os.path.isdir(self.get_temp_folder()):
                os.makedirs(self.get_temp_folder())
            if self.controller.mudrawbin:
                log.debug('loading presentation using mudraw')
                # TODO: Find out where the string conversion actually happens
                runlog = check_output([self.controller.mudrawbin, '-w', str(size.width()), '-h', str(size.height()),
                                       '-o', os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), self.file_path],
                                      startupinfo=self.startupinfo)
            elif self.controller.mutoolbin:
                log.debug('loading presentation using mutool')
                # TODO: Find out where the string convertsion actually happens
                runlog = check_output([self.controller.mutoolbin, 'draw', '-w', str(size.width()), '-h',
                                       str(size.height()),
                                       '-o', os.path.join(self.get_temp_folder(), 'mainslide%03d.png'), self.file_path],
                                      startupinfo=self.startupinfo)
            elif self.controller.gsbin:
                log.debug('loading presentation using gs')
                resolution = self.gs_get_resolution(size)
                # TODO: Find out where the string conversion actually happens
                runlog = check_output([self.controller.gsbin, '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=png16m',
                                       '-r' + str(resolution), '-dTextAlphaBits=4', '-dGraphicsAlphaBits=4',
                                       '-sOutputFile=' + os.path.join(self.get_temp_folder(), 'mainslide%03d.png'),
                                       self.file_path], startupinfo=self.startupinfo)
            created_files = sorted(os.listdir(self.get_temp_folder()))
            for fn in created_files:
                if os.path.isfile(os.path.join(self.get_temp_folder(), fn)):
                    self.image_files.append(os.path.join(self.get_temp_folder(), fn))
        except Exception as e:
            log.debug(e)
            log.debug(runlog)
            return False
        self.num_pages = len(self.image_files)
        # Create thumbnails
        self.create_thumbnails()
        return True
Пример #4
0
 def start_presentation(self):
     """
     Starts a presentation from the beginning.
     """
     log.debug('start_presentation')
     # SlideShowWindow measures its size/position by points, not pixels
     # https://technet.microsoft.com/en-us/library/dn528846.aspx
     try:
         dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88)
     except win32ui.error:
         try:
             dpi = win32ui.GetForegroundWindow().GetDC().GetDeviceCaps(88)
         except win32ui.error:
             dpi = 96
     size = ScreenList().current['size']
     ppt_window = None
     try:
         ppt_window = self.presentation.SlideShowSettings.Run()
     except (AttributeError, pywintypes.com_error) as e:
         log.exception('Caught exception while in start_presentation')
         log.exception(e)
         trace_error_handler(log)
         self.show_error_msg()
     if ppt_window and not Settings().value('presentations/powerpoint control window'):
         try:
             ppt_window.Top = size.y() * 72 / dpi
             ppt_window.Height = size.height() * 72 / dpi
             ppt_window.Left = size.x() * 72 / dpi
             ppt_window.Width = size.width() * 72 / dpi
         except AttributeError as e:
             log.exception('AttributeError while in start_presentation')
             log.exception(e)
     # Find the presentation window and save the handle for later
     self.presentation_hwnd = None
     if ppt_window:
         log.debug('main display size:  y=%d, height=%d, x=%d, width=%d'
                   % (size.y(), size.height(), size.x(), size.width()))
         win32gui.EnumWindows(self._window_enum_callback, size)
     # Make sure powerpoint doesn't steal focus, unless we're on a single screen setup
     if len(ScreenList().screen_list) > 1:
         Registry().get('main_window').activateWindow()
Пример #5
0
 def start_presentation(self):
     """
     Starts a presentation from the beginning.
     """
     log.debug('start_presentation')
     #SlideShowWindow measures its size/position by points, not pixels
     try:
         dpi = win32ui.GetActiveWindow().GetDC().GetDeviceCaps(88)
     except win32ui.error:
         try:
             dpi = win32ui.GetForegroundWindow().GetDC().GetDeviceCaps(88)
         except win32ui.error:
             dpi = 96
     size = ScreenList().current['size']
     ppt_window = self.presentation.SlideShowSettings.Run()
     if not ppt_window:
         return
     ppt_window.Top = size.y() * 72 / dpi
     ppt_window.Height = size.height() * 72 / dpi
     ppt_window.Left = size.x() * 72 / dpi
     ppt_window.Width = size.width() * 72 / dpi