Skip to content

Commit c926b69

Browse files
committed
Started work on the Background/Stamp/Number Tab
1 parent d8fed2e commit c926b69

2 files changed

Lines changed: 258 additions & 6 deletions

File tree

mainwindow.ui

Lines changed: 179 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,180 @@
361361
<property name="column">0</property>
362362
<property name="propagate">True</property>
363363
<property name="row">0</property>
364+
<rows>
365+
<row id="0">
366+
<property name="weight">1</property>
367+
</row>
368+
</rows>
369+
<columns>
370+
<column id="0">
371+
<property name="weight">1</property>
372+
</column>
373+
</columns>
364374
</layout>
375+
<child>
376+
<object class="ttk.Frame" id="BgOptionsFrame">
377+
<property name="height">200</property>
378+
<property name="width">200</property>
379+
<layout>
380+
<property name="column">0</property>
381+
<property name="propagate">True</property>
382+
<property name="row">0</property>
383+
<rows>
384+
<row id="0">
385+
<property name="weight">0</property>
386+
</row>
387+
</rows>
388+
<columns>
389+
<column id="2">
390+
<property name="weight">0</property>
391+
</column>
392+
</columns>
393+
</layout>
394+
<child>
395+
<object class="ttk.Radiobutton" id="BgOptionsBackground">
396+
<property name="command">bgtab_choose_bg_option</property>
397+
<property name="text" translatable="yes">Background</property>
398+
<property name="value">BG</property>
399+
<property name="variable">string:bg_command</property>
400+
<layout>
401+
<property name="column">0</property>
402+
<property name="padx">10</property>
403+
<property name="propagate">True</property>
404+
<property name="row">0</property>
405+
</layout>
406+
</object>
407+
</child>
408+
<child>
409+
<object class="ttk.Radiobutton" id="BgOptionsStamp">
410+
<property name="command">bgtab_choose_stamp_option</property>
411+
<property name="text" translatable="yes">Stamp</property>
412+
<property name="value">STAMP</property>
413+
<property name="variable">string:bg_command</property>
414+
<layout>
415+
<property name="column">1</property>
416+
<property name="padx">10</property>
417+
<property name="propagate">True</property>
418+
<property name="row">0</property>
419+
</layout>
420+
</object>
421+
</child>
422+
<child>
423+
<object class="ttk.Radiobutton" id="BgOptionsNumber">
424+
<property name="command">bgtab_choose_number_option</property>
425+
<property name="state">disabled</property>
426+
<property name="text" translatable="yes">Number</property>
427+
<property name="value">NUMBER</property>
428+
<property name="variable">string:bg_command</property>
429+
<layout>
430+
<property name="column">2</property>
431+
<property name="padx">10</property>
432+
<property name="propagate">True</property>
433+
<property name="row">0</property>
434+
</layout>
435+
</object>
436+
</child>
437+
<child>
438+
<object class="ttk.Checkbutton" id="BgOnlyFirstButton">
439+
<property name="offvalue">False</property>
440+
<property name="onvalue">True</property>
441+
<property name="text" translatable="yes">Apply background to only the first page</property>
442+
<property name="textvariable">string:bg_options_only_first_button</property>
443+
<property name="variable">boolean:bg_only_first_page</property>
444+
<layout>
445+
<property name="column">0</property>
446+
<property name="columnspan">3</property>
447+
<property name="pady">20</property>
448+
<property name="propagate">True</property>
449+
<property name="row">1</property>
450+
</layout>
451+
</object>
452+
</child>
453+
<child>
454+
<object class="ttk.Button" id="BgOptionsSourcePDF">
455+
<property name="command">bgtab_choose_source_file</property>
456+
<property name="text" translatable="yes">Source PDF Document …</property>
457+
<property name="width">25</property>
458+
<layout>
459+
<property name="column">0</property>
460+
<property name="columnspan">3</property>
461+
<property name="propagate">True</property>
462+
<property name="row">2</property>
463+
</layout>
464+
</object>
465+
</child>
466+
<child>
467+
<object class="ttk.Label" id="BgSourceFileInfo">
468+
<property name="textvariable">string:source_file_info</property>
469+
<layout>
470+
<property name="column">0</property>
471+
<property name="columnspan">3</property>
472+
<property name="propagate">True</property>
473+
<property name="row">3</property>
474+
</layout>
475+
</object>
476+
</child>
477+
<child>
478+
<object class="ttk.Button" id="BgOptionsBackgroundPDF">
479+
<property name="command">bgtab_choose_bg_file</property>
480+
<property name="text" translatable="yes">Choose Background …</property>
481+
<property name="textvariable">string:bg_options_bg_button</property>
482+
<property name="width">25</property>
483+
<layout>
484+
<property name="column">0</property>
485+
<property name="columnspan">3</property>
486+
<property name="propagate">True</property>
487+
<property name="row">4</property>
488+
</layout>
489+
</object>
490+
</child>
491+
<child>
492+
<object class="ttk.Label" id="BgBgFileInfo">
493+
<property name="textvariable">string:bg_file_info</property>
494+
<layout>
495+
<property name="column">0</property>
496+
<property name="columnspan">3</property>
497+
<property name="propagate">True</property>
498+
<property name="row">5</property>
499+
</layout>
500+
</object>
501+
</child>
502+
</object>
503+
</child>
504+
<child>
505+
<object class="ttk.Frame" id="BgCommandFrame">
506+
<property name="padding">0 20</property>
507+
<layout>
508+
<property name="column">0</property>
509+
<property name="propagate">True</property>
510+
<property name="row">3</property>
511+
</layout>
512+
<child>
513+
<object class="ttk.Button" id="BgSaveButton">
514+
<property name="command">bgtab_save_as</property>
515+
<property name="text" translatable="yes">Save As …</property>
516+
<layout>
517+
<property name="column">0</property>
518+
<property name="padx">10</property>
519+
<property name="propagate">True</property>
520+
<property name="row">0</property>
521+
</layout>
522+
</object>
523+
</child>
524+
<child>
525+
<object class="ttk.Button" id="BgExitButton">
526+
<property name="command">quit</property>
527+
<property name="text" translatable="yes">Exit</property>
528+
<layout>
529+
<property name="column">1</property>
530+
<property name="padx">10</property>
531+
<property name="propagate">True</property>
532+
<property name="row">0</property>
533+
</layout>
534+
</object>
535+
</child>
536+
</object>
537+
</child>
365538
</object>
366539
</child>
367540
</object>
@@ -606,10 +779,10 @@
606779
<property name="label" translatable="yes">File</property>
607780
<child>
608781
<object class="tk.Menuitem.Command" id="FileExit">
782+
<property name="accelerator">Alt+F4</property>
609783
<property name="command">quit</property>
610784
<property name="command_id_arg">false</property>
611785
<property name="label" translatable="yes">Exit</property>
612-
<property name="accelerator">Alt+F4</property>
613786
</object>
614787
</child>
615788
</object>
@@ -619,44 +792,44 @@
619792
<property name="label" translatable="yes">View</property>
620793
<child>
621794
<object class="tk.Menuitem.Command" id="ViewJoin">
795+
<property name="accelerator">Strg+J</property>
622796
<property name="command">select_tab_join</property>
623797
<property name="command_id_arg">false</property>
624798
<property name="label" translatable="yes">Join Files</property>
625-
<property name="accelerator">Strg+J</property>
626799
</object>
627800
</child>
628801
<child>
629802
<object class="tk.Menuitem.Command" id="ViewSplit">
803+
<property name="accelerator">Strg+S</property>
630804
<property name="command">select_tab_split</property>
631805
<property name="command_id_arg">false</property>
632806
<property name="label" translatable="yes">Split Files</property>
633-
<property name="accelerator">Strg+S</property>
634807
</object>
635808
</child>
636809
<child>
637810
<object class="tk.Menuitem.Command" id="ViewBg">
811+
<property name="accelerator">Strg+B</property>
638812
<property name="command">select_tab_bg</property>
639813
<property name="command_id_arg">false</property>
640814
<property name="label" translatable="yes">Background/Stamp/Number</property>
641-
<property name="accelerator">Strg+B</property>
642815
</object>
643816
</child>
644817
<child>
645818
<object class="tk.Menuitem.Command" id="ViewRotate">
819+
<property name="accelerator">Strg+R</property>
646820
<property name="command">select_tab_rotate</property>
647821
<property name="command_id_arg">false</property>
648822
<property name="label" translatable="yes">Rotate Pages</property>
649-
<property name="accelerator">Strg+R</property>
650823
</object>
651824
</child>
652825
<child>
653826
<object class="tk.Menuitem.Separator" id="ViewSeparator_1" />
654827
</child>
655828
<child>
656829
<object class="tk.Menuitem.Command" id="ViewProtection">
830+
<property name="accelerator">Strg+P</property>
657831
<property name="command_id_arg">false</property>
658832
<property name="label" translatable="yes">Show Document Protection</property>
659-
<property name="accelerator">Strg+P</property>
660833
</object>
661834
</child>
662835
</object>

pypdfbuilder.py

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,62 @@
1515
USER_DIR = str(plPath.home())
1616

1717

18+
class BgTabManager:
19+
def __init__(self, parent=None):
20+
self.parent = parent
21+
self.__source_filepath = None
22+
self.__bg_filepath = None
23+
self.__source_pdf_pages = None
24+
self.__bg_pdf_pages = None
25+
self.__source_file_info = self.parent.builder.get_variable('source_file_info')
26+
self.__bg_file_info = self.parent.builder.get_variable('bg_file_info')
27+
self.__bg_command = self.parent.builder.get_variable('bg_command')
28+
self.__bg_only_first_page = self.parent.builder.get_variable('bg_only_first_page')
29+
self.__bg_button_label = self.parent.builder.get_variable('bg_options_bg_button')
30+
self.__only_first_button_label = self.parent.builder.get_variable('bg_options_only_first_button')
31+
32+
@property
33+
def parent(self):
34+
return self.__parent
35+
36+
@parent.setter
37+
def parent(self, val):
38+
self.__parent = val
39+
40+
def choose_source_file(self):
41+
choose_source_file = self.parent.get_open_file(widget_title='Choose Source PDF …')
42+
if choose_source_file:
43+
self.__source_filepath = choose_source_file
44+
with open(self.__source_filepath, 'rb') as in_pdf:
45+
pdf_handler = PdfFileReader(in_pdf)
46+
self.__source_pdf_pages = pdf_handler.getNumPages()
47+
self.__show_source_file_info()
48+
49+
def choose_bg_file(self):
50+
choose_bg_file = self.parent.get_open_file(widget_title='Choose Background PDF …')
51+
if choose_bg_file:
52+
self.__bg_filepath = choose_bg_file
53+
with open(self.__bg_filepath, 'rb') as in_pdf:
54+
pdf_handler = PdfFileReader(in_pdf)
55+
self.__bg_pdf_pages = pdf_handler.getNumPages()
56+
self.__show_bg_file_info()
57+
58+
def __show_source_file_info(self):
59+
filename = os.path.basename(self.__source_filepath)
60+
self.__source_file_info.set(f'{filename[0:35]}…({self.__source_pdf_pages} pages)')
61+
62+
def __show_bg_file_info(self):
63+
filename = os.path.basename(self.__bg_filepath)
64+
self.__bg_file_info.set(f'{filename[0:35]}…({self.__bg_pdf_pages} pages)')
65+
66+
def choose_stamp_option(self):
67+
self.__only_first_button_label.set('Apply stamp to only the first page')
68+
self.__bg_button_label.set('Choose Stamp …')
69+
70+
def choose_bg_option(self):
71+
self.__only_first_button_label.set('Apply background to only the first page')
72+
self.__bg_button_label.set('Choose Background …')
73+
1874
class SplitTabManager:
1975
def __init__(self, parent=None):
2076
self.parent = parent
@@ -262,6 +318,7 @@ def __init__(self):
262318

263319
self.jointab = JoinTabManager(self)
264320
self.splittab = SplitTabManager(self)
321+
self.bgtab = BgTabManager(self)
265322
self.rotatetab = RotateTabManager(self)
266323

267324
# boy oh boy if there's anyway to do these callsbacks more elegantly, please let me gain that knowledge!
@@ -301,6 +358,28 @@ def splittab_open_file(self):
301358
def splittab_save_as(self):
302359
self.splittab.save_as()
303360

361+
def bgtab_choose_bg_option(self):
362+
self.bgtab.choose_bg_option()
363+
364+
def bgtab_choose_stamp_option(self):
365+
self.bgtab.choose_stamp_option()
366+
367+
def bgtab_choose_number_option(self):
368+
'''
369+
Numbering pages is currently not supported by PyPDF2 so this option will remain
370+
disabled for now
371+
'''
372+
pass
373+
374+
def bgtab_choose_source_file(self):
375+
self.bgtab.choose_source()
376+
377+
def bgtab_choose_bg_file(self):
378+
self.bgtab.choose_bg()
379+
380+
def bgtab_save_as(self):
381+
self.bgtab.save_as()
382+
304383
def rotatetab_open_file(self):
305384
self.rotatetab.open_file()
306385

0 commit comments

Comments
 (0)