I updated the PDF Booklet project and removed Python 2 dependencies so that it will run under Ubuntu 22.04.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

183 lines
6.0 KiB

#!/usr/bin/python
# coding: utf-8 -*-
# version 3.0.3
import os, sys
from gi.repository import Gtk, Gio
from pdfbooklet.PyPDF2_G import PdfFileReader
def alert(message, type = 0) :
dialog = Gtk.MessageDialog(None, Gtk.DialogFlags.MODAL, Gtk.MessageType.WARNING,
Gtk.ButtonsType.CLOSE , message)
dialog.run()
dialog.destroy()
class Chooser:
def __init__(self,
inputFiles_a = None,
share_path_u = "",
mru_dir = ""):
self.inputFiles_a = inputFiles_a
self.chooser1 = Gtk.Builder()
self.chooser1.add_from_file(os.path.join(share_path_u, 'data/chooser_dialog.glade'))
self.chooser1.connect_signals(self)
self.chooser = self.chooser1.get_object("filechooserdialog1")
# treeview
self.treeview1 = self.chooser1.get_object("treeview1")
# create a TreeStore with one string column to use as the model
#self.treestore = self.treeview1.get_model()
self.treestore = Gtk.ListStore(str,int)
self.cell = Gtk.CellRendererText()
# set the model for TreeView
self.treeview1.set_model(self.treestore)
self.tvcolumn = Gtk.TreeViewColumn(_('Filename'))
self.treeview1.append_column(self.tvcolumn)
# add the cell to the tvcolumn and allow it to expand
self.tvcolumn.pack_start(self.cell, True)
# set the cell "text" attribute to column 0 - retrieve text
# from that column in treestore
self.tvcolumn.add_attribute(self.cell, 'text', 0)
## self.tvcolumn = Gtk.TreeViewColumn(_('Pages'))
## self.treeview1.append_column(self.tvcolumn)
## self.tvcolumn.pack_start(self.cell, True)
## self.tvcolumn.add_attribute(self.cell, 'text', 1)
# Allow drag and drop reordering of rows
self.treeview1.set_reorderable(True)
# load files in parameter list
for key in self.inputFiles_a :
self.treestore.append([self.inputFiles_a[key], 0])
old_dir = ""
old_name = ""
chooser = self.chooser1.get_object("filechooserdialog1")
chooser.set_current_folder(mru_dir)
chooser.set_select_multiple(True)
filter_all = Gtk.FileFilter()
filter_all.set_name(_('All files'))
filter_all.add_pattern('*')
chooser.add_filter(filter_all)
filter_pdf = Gtk.FileFilter()
filter_pdf.set_name(_('PDF files'))
filter_pdf.add_mime_type('application/pdf')
filter_pdf.add_pattern('*.pdf')
chooser.add_filter(filter_pdf)
chooser.set_filter(filter_pdf)
response = chooser.run()
def chooserClose(self, widget) :
self.chooser.destroy()
def chooserOK(self, widget) :
self.treestore.clear()
self.genFilesArray()
self.chooser.destroy()
def pdf_remove(self, widget) :
selection = self.treeview1.get_selection()
#sel = selection.get_selected_rows()
model, iter0 = selection.get_selected()
model.remove(iter0)
def pdf_up(self, widget) :
selection = self.treeview1.get_selection()
model, iter0 = selection.get_selected()
string = model.get_string_from_iter(iter0)
newpos = int(string) - 1
if newpos < 0 : newpos = 0
newpos = model.get_iter_from_string(str(newpos))
model.move_before(iter0, newpos)
def pdf_down(self, widget) :
selection = self.treeview1.get_selection()
model, iter0 = selection.get_selected()
model.move_after(iter0, model.iter_next(iter0))
# clears the list and open a file
def pdf_open(self,widget) :
self.treestore.clear()
self.add_file("")
def add_file(self, widget):
for filename in self.chooser.get_filenames():
if os.path.isfile(filename):
# FIXME
## f = Gio.File(filename)
## f_info = f.query_info('standard::content-type')
## mime_type = f_info.get_content_type()
mime_type = ".pdf"
if mime_type == 'application/pdf' or mime_type == '.pdf':
self.loadPdfFile(filename)
else :
print(_('File type not supported!'))
else:
print(_('File %s does not exist') % filename)
def loadPdfFile(self,filename) :
pdfFile = PdfFileReader(open(filename, "rb"))
numpages = pdfFile.getNumPages()
self.treestore.append([filename, numpages])
# regenerate the array of files (easier to use than the treestore)
def genFilesArray(self, dummy = "") :
inputFiles_a = {}
selectedFiles1 = self.chooser.get_filenames()
# eliminate directories
selectedFiles = []
for file_u in selectedFiles1 :
if os.path.isdir(file_u) :
alert(_("You have chosen a directory, it is not supported"))
else :
# FIXME
## f = gio.File(filename)
## f_info = f.query_info('standard::content-type')
## mime_type = f_info.get_content_type()
## if mime_type == 'application/pdf' or mime_type == '.pdf':
## self.loadPdfFile(filename)
## else :
## print(_('File type not supported!'))
selectedFiles.append(file_u)
if len(selectedFiles) == 0 :
print(_('Closed, no files selected'))
return
size_i = len(self.treestore)
if size_i == 0 : # nothing in the list
for i in range(len(selectedFiles)) :
inputFiles_a[i + 1] = selectedFiles[i]
else : # use the list
for i in range(size_i) :
iter0 = self.treestore.get_iter(i)
filename_s = self.treestore.get_value(iter0,0)
inputFiles_a[i + 1] = filename_s
self.inputFiles_a = inputFiles_a