pdf_paradise 0.1.66

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pdf_paradise might be problematic. Click here for more details.

Files changed (110) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +705 -0
  3. data/bin/automatic_pdf_title +7 -0
  4. data/bin/combine_these_pdf_pages +7 -0
  5. data/bin/compress_via_hexapdf +7 -0
  6. data/bin/convert_markdown_to_pdf +7 -0
  7. data/bin/convert_pdf_to_text +7 -0
  8. data/bin/delete_first_page_of_this_pdf_file +7 -0
  9. data/bin/merge_then_open +7 -0
  10. data/bin/n_pages +10 -0
  11. data/bin/open_main_pdf +7 -0
  12. data/bin/pdf_paradise +9 -0
  13. data/bin/set_main_book +7 -0
  14. data/bin/set_title_of_this_pdf_file +15 -0
  15. data/doc/README.gen +662 -0
  16. data/doc/todo/todo.md +7 -0
  17. data/lib/pdf_paradise/base/base.rb +239 -0
  18. data/lib/pdf_paradise/base/colours.rb +36 -0
  19. data/lib/pdf_paradise/commandline/commandline.rb +101 -0
  20. data/lib/pdf_paradise/commandline/help.rb +73 -0
  21. data/lib/pdf_paradise/commandline/menu.rb +142 -0
  22. data/lib/pdf_paradise/compress/compress_via_hexapdf.rb +27 -0
  23. data/lib/pdf_paradise/compress_this_pdf_file.rb +87 -0
  24. data/lib/pdf_paradise/constants/constants.rb +76 -0
  25. data/lib/pdf_paradise/convert_text_to_pdf.rb +94 -0
  26. data/lib/pdf_paradise/css/project.css +17 -0
  27. data/lib/pdf_paradise/djvu_to_pdf.rb +85 -0
  28. data/lib/pdf_paradise/gui/README.md +6 -0
  29. data/lib/pdf_paradise/gui/fox/split_pdf_file.rb +77 -0
  30. data/lib/pdf_paradise/gui/gtk2/delete_the_first_or_the_last_page_of_this_pdf_file/delete_the_first_or_the_last_page_of_this_pdf_file.rb +39 -0
  31. data/lib/pdf_paradise/gui/gtk2/pdf_viewer/pdf_viewer.rb +34 -0
  32. data/lib/pdf_paradise/gui/gtk2/split_pdf_file/split_pdf_file.rb +34 -0
  33. data/lib/pdf_paradise/gui/gtk2/statistics_widget/statistics_widget.rb +34 -0
  34. data/lib/pdf_paradise/gui/gtk2/to_pdf/to_pdf.rb +32 -0
  35. data/lib/pdf_paradise/gui/gtk3/controller/controller.rb +212 -0
  36. data/lib/pdf_paradise/gui/gtk3/convert_pdf_to_text/convert_pdf_to_text.rb +34 -0
  37. data/lib/pdf_paradise/gui/gtk3/delete_the_first_or_the_last_page_of_this_pdf_file/delete_the_first_or_the_last_page_of_this_pdf_file.rb +39 -0
  38. data/lib/pdf_paradise/gui/gtk3/pdf_viewer/pdf_viewer.rb +34 -0
  39. data/lib/pdf_paradise/gui/gtk3/split_pdf_file/split_pdf_file.rb +34 -0
  40. data/lib/pdf_paradise/gui/gtk3/statistics_widget/statistics_widget.rb +34 -0
  41. data/lib/pdf_paradise/gui/gtk3/to_pdf/to_pdf.rb +32 -0
  42. data/lib/pdf_paradise/gui/libui/extract_all_images_from_this_pdf_file/extract_all_images_from_this_pdf_file.rb +223 -0
  43. data/lib/pdf_paradise/gui/libui/statistics_widget/statistics_widget.rb +233 -0
  44. data/lib/pdf_paradise/gui/shared_code/convert_pdf_to_text/convert_pdf_to_text_module.rb +277 -0
  45. data/lib/pdf_paradise/gui/shared_code/delete_the_first_or_the_last_page_of_this_pdf_file/delete_the_first_or_the_last_page_of_this_pdf_file_module.rb +443 -0
  46. data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer.css +5 -0
  47. data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer_module.rb +284 -0
  48. data/lib/pdf_paradise/gui/shared_code/split_pdf_file/split_pdf_file.css +0 -0
  49. data/lib/pdf_paradise/gui/shared_code/split_pdf_file/split_pdf_file_module.rb +294 -0
  50. data/lib/pdf_paradise/gui/shared_code/statistics_widget/statistics_widget_module.rb +349 -0
  51. data/lib/pdf_paradise/gui/shared_code/to_pdf/to_pdf_module.rb +281 -0
  52. data/lib/pdf_paradise/hexapdf/001_rainbow_pattern_example.rb +0 -0
  53. data/lib/pdf_paradise/hexapdf/hexapdf.rb +123 -0
  54. data/lib/pdf_paradise/images/PDF_PARADISE_LOGO.png +0 -0
  55. data/lib/pdf_paradise/main_pdf/main_pdf.rb +444 -0
  56. data/lib/pdf_paradise/merge_pdf/menu.rb +63 -0
  57. data/lib/pdf_paradise/merge_pdf/merge_pdf.rb +306 -0
  58. data/lib/pdf_paradise/merge_pdf_namespace.rb +9 -0
  59. data/lib/pdf_paradise/merge_then_open/merge_then_open.rb +105 -0
  60. data/lib/pdf_paradise/pdf_file_n_total_pages.rb +249 -0
  61. data/lib/pdf_paradise/prawn_addons/README.md +2 -0
  62. data/lib/pdf_paradise/prawn_addons/prawn_addons.rb +17 -0
  63. data/lib/pdf_paradise/project/project.rb +22 -0
  64. data/lib/pdf_paradise/remove_pdf_password.rb +391 -0
  65. data/lib/pdf_paradise/requires/batch_require_toplevel_files.rb +22 -0
  66. data/lib/pdf_paradise/requires/colours.rb +7 -0
  67. data/lib/pdf_paradise/requires/colours_and_esystem_and_save_file_and_fileutils_and_opn.rb +11 -0
  68. data/lib/pdf_paradise/requires/esystem_and_colours.rb +10 -0
  69. data/lib/pdf_paradise/requires/esystem_and_opn_and_colours.rb +8 -0
  70. data/lib/pdf_paradise/requires/require_the_whole_project.rb +28 -0
  71. data/lib/pdf_paradise/requires/require_utility_scripts.rb +9 -0
  72. data/lib/pdf_paradise/set_main_book.rb +156 -0
  73. data/lib/pdf_paradise/set_pdf_title.rb +220 -0
  74. data/lib/pdf_paradise/sinatra/embeddable_interface.rb +318 -0
  75. data/lib/pdf_paradise/toplevel_methods/automatic_pdf_title.rb +55 -0
  76. data/lib/pdf_paradise/toplevel_methods/convert_epub_to_pdf.rb +27 -0
  77. data/lib/pdf_paradise/toplevel_methods/convert_markdown_to_pdf.rb +45 -0
  78. data/lib/pdf_paradise/toplevel_methods/convert_ppt_to_pdf.rb +35 -0
  79. data/lib/pdf_paradise/toplevel_methods/e.rb +16 -0
  80. data/lib/pdf_paradise/toplevel_methods/esystem.rb +19 -0
  81. data/lib/pdf_paradise/toplevel_methods/misc.rb +76 -0
  82. data/lib/pdf_paradise/toplevel_methods/number_pages.rb +38 -0
  83. data/lib/pdf_paradise/toplevel_methods/opened_pdf_files.rb +221 -0
  84. data/lib/pdf_paradise/toplevel_methods/query_pdf_title.rb +191 -0
  85. data/lib/pdf_paradise/toplevel_methods/reduce_size_of_this_pdf_file.rb +46 -0
  86. data/lib/pdf_paradise/toplevel_methods/roebe.rb +17 -0
  87. data/lib/pdf_paradise/toplevel_methods/rotate_pdf_file.rb +143 -0
  88. data/lib/pdf_paradise/toplevel_methods/to_pdf.rb +38 -0
  89. data/lib/pdf_paradise/utility_scripts/README.md +3 -0
  90. data/lib/pdf_paradise/utility_scripts/combine_these_pdf_pages.rb +118 -0
  91. data/lib/pdf_paradise/utility_scripts/convert_pdf_to_text.rb +175 -0
  92. data/lib/pdf_paradise/utility_scripts/delete_first_page_of_this_pdf_file.rb +221 -0
  93. data/lib/pdf_paradise/utility_scripts/delete_last_page_of_this_pdf_file.rb +180 -0
  94. data/lib/pdf_paradise/utility_scripts/delete_this_page_of_this_pdf_file.rb +329 -0
  95. data/lib/pdf_paradise/utility_scripts/extract_all_images_from_this_pdf_file.rb +129 -0
  96. data/lib/pdf_paradise/utility_scripts/extract_pdf_page.rb +283 -0
  97. data/lib/pdf_paradise/utility_scripts/pdf_optimizer.rb +111 -0
  98. data/lib/pdf_paradise/utility_scripts/pdf_statistics.rb +148 -0
  99. data/lib/pdf_paradise/utility_scripts/pdf_to_html.rb +75 -0
  100. data/lib/pdf_paradise/utility_scripts/remove_images.rb +110 -0
  101. data/lib/pdf_paradise/utility_scripts/split_pdf.rb +340 -0
  102. data/lib/pdf_paradise/utility_scripts/to_qdf.rb +82 -0
  103. data/lib/pdf_paradise/version/version.rb +19 -0
  104. data/lib/pdf_paradise/www/README.md +2 -0
  105. data/lib/pdf_paradise/www/sinatra/app.rb +276 -0
  106. data/lib/pdf_paradise/yaml/working_on_these_pdf_files.yml +4 -0
  107. data/lib/pdf_paradise.rb +5 -0
  108. data/pdf_paradise.gemspec +61 -0
  109. data/test/testing_pdf_paradise.rb +9 -0
  110. metadata +219 -0
@@ -0,0 +1,443 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === PdfParadise::GUI::Gtk::DeleteTheFirstOrTheLastPageOfThisPdfFileModule
6
+ # =========================================================================== #
7
+ # require 'pdf_paradise/gui/shared_code/delete_the_first_or_the_last_page_of_this_pdf_file/delete_the_first_or_the_last_page_of_this_pdf_file_module.rb'
8
+ # include ::PdfParadise::GUI::Gtk::DeleteTheFirstOrTheLastPageOfThisPdfFileModule
9
+ # =========================================================================== #
10
+ module PdfParadise
11
+
12
+ module GUI
13
+
14
+ module Gtk
15
+
16
+ module DeleteTheFirstOrTheLastPageOfThisPdfFileModule
17
+
18
+ require 'pdf_paradise/utility_scripts/delete_first_page_of_this_pdf_file.rb'
19
+ require 'pdf_paradise/utility_scripts/delete_last_page_of_this_pdf_file.rb'
20
+ require 'pdf_paradise/utility_scripts/delete_this_page_of_this_pdf_file.rb'
21
+
22
+ require 'gtk_paradise/requires/require_the_base_module.rb'
23
+ include ::Gtk::BaseModule
24
+
25
+ require 'colours'
26
+ include Colours
27
+
28
+ # ========================================================================= #
29
+ # === NAMESPACE
30
+ # ========================================================================= #
31
+ NAMESPACE = inspect
32
+
33
+ # ========================================================================= #
34
+ # === ARRAY_ADD_THESE_SHORTCUT_FOLDERS
35
+ # ========================================================================= #
36
+ ARRAY_ADD_THESE_SHORTCUT_FOLDERS = [
37
+ "/",
38
+ '/Depot/PDF/'
39
+ ]
40
+
41
+ # ========================================================================= #
42
+ # === TITLE
43
+ # ========================================================================= #
44
+ TITLE = 'Remove a specific page from a .pdf file.'
45
+
46
+ # ========================================================================= #
47
+ # === WIDTH
48
+ # ========================================================================= #
49
+ WIDTH = 1600
50
+
51
+ # ========================================================================= #
52
+ # === HEIGHT
53
+ # ========================================================================= #
54
+ HEIGHT = 400
55
+
56
+ # ========================================================================= #
57
+ # === USE_THIS_FONT
58
+ # ========================================================================= #
59
+ USE_THIS_FONT = :dejavu_condensed_24
60
+
61
+ # ========================================================================= #
62
+ # === SMALLER_FONT
63
+ # ========================================================================= #
64
+ SMALLER_FONT = :dejavu_condensed_22
65
+
66
+ # ========================================================================= #
67
+ # === initialize
68
+ # ========================================================================= #
69
+ def initialize(
70
+ optional_file = nil,
71
+ run_already = true
72
+ )
73
+ super(:vertical)
74
+ reset
75
+ run if run_already
76
+ end
77
+
78
+ # ========================================================================= #
79
+ # === reset
80
+ # ========================================================================= #
81
+ def reset
82
+ reset_the_internal_variables
83
+ # ======================================================================= #
84
+ # === @configuration
85
+ # ======================================================================= #
86
+ @configuration = [true, __dir__, NAMESPACE]
87
+ # ======================================================================= #
88
+ # === @title
89
+ # ======================================================================= #
90
+ @title = TITLE
91
+ # ======================================================================= #
92
+ # === @width
93
+ # ======================================================================= #
94
+ set_width(WIDTH)
95
+ # ======================================================================= #
96
+ # === @height
97
+ # ======================================================================= #
98
+ set_height(HEIGHT)
99
+ set_use_this_font(USE_THIS_FONT)
100
+ use_gtk_paradise_project_css_file
101
+ infer_the_size_automatically
102
+ end
103
+
104
+ # ========================================================================= #
105
+ # === padding?
106
+ # ========================================================================= #
107
+ def padding?
108
+ 0
109
+ end
110
+
111
+ # ========================================================================= #
112
+ # === border_size?
113
+ # ========================================================================= #
114
+ def border_size?
115
+ 2
116
+ end
117
+
118
+ # ========================================================================= #
119
+ # === create_skeleton
120
+ # ========================================================================= #
121
+ def create_skeleton
122
+ @hbox1 = gtk_vbox
123
+ create_buttons
124
+ create_entries
125
+ create_labels
126
+ @gtk_text_above_the_main_entry = gtk_bold_label(
127
+ 'Set the path to the .pdf file below this text here.'
128
+ ) {{
129
+ tooltip: 'You need to supply the path to the .pdf file '\
130
+ 'into the input field on the right side.'
131
+ }}
132
+ @gtk_text_for_notification = gtk_label
133
+ end
134
+
135
+ # ========================================================================= #
136
+ # === create_buttons (buttons tag)
137
+ #
138
+ # This method can be used to create all buttons in this small application.
139
+ # ========================================================================= #
140
+ def create_buttons
141
+ # ======================================================================= #
142
+ # === @button_remove_the_first_page_of_the_pdf_file
143
+ # ======================================================================= #
144
+ @button_remove_the_first_page_of_the_pdf_file = gtk_button('Remove the _first page')
145
+ @button_remove_the_first_page_of_the_pdf_file.clear_background
146
+ @button_remove_the_first_page_of_the_pdf_file.skyblue
147
+ @button_remove_the_first_page_of_the_pdf_file.bblack1
148
+ @button_remove_the_first_page_of_the_pdf_file.do_use_mnemonic
149
+ @button_remove_the_first_page_of_the_pdf_file.hint =
150
+ "<b>Click</b> on this button to remove the first page of the pdf file.\n\n"\
151
+ "Do not forget to make sure that the .pdf file exists at that location.\n"\
152
+ "Note that the program called qpdf has to be installed as well."
153
+ @button_remove_the_first_page_of_the_pdf_file.on_clicked {
154
+ do_remove_the_first_page_of_the_pdf_file
155
+ }
156
+ # ======================================================================= #
157
+ # === @button_remove_the_last_page_of_the_pdf_file
158
+ # ======================================================================= #
159
+ @button_remove_the_last_page_of_the_pdf_file = gtk_button('Remove the _last page')
160
+ @button_remove_the_last_page_of_the_pdf_file.clear_background
161
+ @button_remove_the_last_page_of_the_pdf_file.skyblue
162
+ @button_remove_the_last_page_of_the_pdf_file.bblack1
163
+ @button_remove_the_last_page_of_the_pdf_file.do_use_mnemonic
164
+ @button_remove_the_last_page_of_the_pdf_file.hint =
165
+ " <b>Click</b> on this button to remove the last page of the pdf file.\n"\
166
+ "Do not forget to make sure that the .pdf file exists at that location."
167
+ @button_remove_the_last_page_of_the_pdf_file.on_clicked {
168
+ do_remove_the_last_page_of_the_pdf_file
169
+ }
170
+ # ======================================================================= #
171
+ # === @button_file_chooser
172
+ # ======================================================================= #
173
+ @button_file_chooser = gtk_button('🗄️ Choose a file')
174
+ @button_file_chooser.hint = 'Click this button to select a file.'
175
+ @button_file_chooser.clear_background
176
+ @button_file_chooser.skyblue
177
+ @button_file_chooser.bblack1
178
+ @button_file_chooser.on_clicked {
179
+ open_file_chooser_dialog
180
+ }
181
+ end
182
+
183
+ # ========================================================================= #
184
+ # === do_remove_the_last_page_of_the_pdf_file
185
+ # ========================================================================= #
186
+ def do_remove_the_last_page_of_the_pdf_file
187
+ e 'Now removing the last .pdf page.'
188
+ target_file = @entry_for_the_path_to_the_pdf_file.text.to_s
189
+ if File.exist?(target_file)
190
+ PdfParadise.remove_the_last_page_of_this_pdf_file(
191
+ target_file
192
+ )
193
+ # ===================================================================== #
194
+ # Notify the user that we finished here.
195
+ # ===================================================================== #
196
+ update_all_done_finished_at
197
+ else
198
+ no_file_was_found_at(target_file)
199
+ end
200
+ end
201
+
202
+ # ========================================================================= #
203
+ # === update_all_done_finished_at
204
+ # ========================================================================= #
205
+ def update_all_done_finished_at
206
+ @gtk_text_for_notification.set_text(
207
+ 'All done! Finished at <b>'+Time.now.to_s+'</b>'
208
+ )
209
+ @gtk_text_for_notification.do_markify
210
+ end
211
+
212
+ # ========================================================================= #
213
+ # === do_remove_the_first_page_of_the_pdf_file
214
+ #
215
+ # This is the main action of this class.
216
+ # ========================================================================= #
217
+ def do_remove_the_first_page_of_the_pdf_file
218
+ e 'Now removing the first .pdf page.'
219
+ target_file = @entry_for_the_path_to_the_pdf_file.text.to_s
220
+ if File.exist?(target_file)
221
+ PdfParadise.remove_the_first_page_of_this_pdf_file(
222
+ target_file
223
+ )
224
+ # ===================================================================== #
225
+ # Notify the user that we finished here.
226
+ # ===================================================================== #
227
+ update_all_done_finished_at
228
+ else
229
+ no_file_was_found_at(target_file)
230
+ end
231
+ end
232
+
233
+ # ========================================================================= #
234
+ # === no_file_was_found_at
235
+ # ========================================================================= #
236
+ def no_file_was_found_at(i)
237
+ e "No file was found at #{sfile(i)}."
238
+ end
239
+
240
+ # ========================================================================= #
241
+ # === add_the_remove_this_page_entry
242
+ # ========================================================================= #
243
+ def add_the_remove_this_page_entry
244
+ hbox = gtk_hbox
245
+ hbox.minimal(
246
+ left_aligned_text(
247
+ 'Denote which .pdf page (as a number) '\
248
+ 'is to be removed '
249
+ ),
250
+ 4
251
+ )
252
+ hbox.minimal(@entry_remove_this_pdf_page, 4)
253
+ # ======================================================================= #
254
+ # === @button_remove_the_specified_page
255
+ # ======================================================================= #
256
+ @button_remove_the_specified_page = gtk_button('🗙')
257
+ @button_remove_the_specified_page.hint = 'Click '\
258
+ 'this button in order to remove the specified page '\
259
+ 'from the .pdf document at hand.'
260
+ @button_remove_the_specified_page.on_clicked {
261
+ do_remove_this_page(
262
+ @entry_remove_this_pdf_page.text.to_s
263
+ )
264
+ }
265
+ @button_remove_the_specified_page.set_size_request(160, 48)
266
+ @button_remove_the_specified_page.disallow_resizing
267
+ hbox.minimal(@button_remove_the_specified_page)
268
+ @hbox1.minimal(hbox)
269
+ end
270
+
271
+ # ========================================================================= #
272
+ # === create_labels
273
+ # ========================================================================= #
274
+ def create_labels
275
+ @label_on_top = gtk_left_aligned_label(
276
+ 'Denote which .pdf file is to be manipulated, in the '\
277
+ 'following entry.'
278
+ )
279
+ @label_on_top.use_this_font(SMALLER_FONT)
280
+ end
281
+
282
+ # ========================================================================= #
283
+ # === connect_skeleton
284
+ # ========================================================================= #
285
+ def connect_skeleton
286
+ abort_on_exception
287
+ @hbox1.maximal(@label_on_top, 2)
288
+ @hbox1.minimal(horizontal_spacer, 2)
289
+ @hbox1.minimal(@gtk_text_above_the_main_entry, 2)
290
+ @hbox1.maximal(@entry_for_the_path_to_the_pdf_file, 2)
291
+ # ======================================================================= #
292
+ # And add the file-chooser button:
293
+ # ======================================================================= #
294
+ @hbox1.minimal(@button_file_chooser)
295
+ # ======================================================================= #
296
+ # Next add the remove-this-page entry.
297
+ # ======================================================================= #
298
+ add_the_remove_this_page_entry
299
+ # ======================================================================= #
300
+ # Next add the two "remove first page" and "remove last page"
301
+ # buttons.
302
+ # ======================================================================= #
303
+ add_the_remove_the_first_page_and_remove_the_last_page_of_the_pdf_file_buttons
304
+ @hbox1.minimal(@gtk_text_for_notification)
305
+ minimal(@hbox1, 1)
306
+ end
307
+
308
+ require 'gtk_paradise/toplevel_methods/select_file.rb'
309
+ # ========================================================================= #
310
+ # === open_file_chooser_dialog (open tag)
311
+ # ========================================================================= #
312
+ def open_file_chooser_dialog
313
+ current_folder = return_pwd
314
+ if is_on_roebe? and File.directory?('/Depot/j/')
315
+ current_folder = '/Depot/j/'
316
+ end
317
+ @extra_button = gtk_button('_Extra button')
318
+ @extra_button.on_clicked { e ' > Extra button was clicked' }
319
+
320
+ filename = ::Gtk.select_file(parent_widget?) {{
321
+ current_folder: current_folder,
322
+ show_hidden: true,
323
+ extra_widget: @extra_button,
324
+ add_these_shortcut_folders: ARRAY_ADD_THESE_SHORTCUT_FOLDERS,
325
+ use_this_file_filter: '*.pdf'
326
+ }}
327
+
328
+ @entry_for_the_path_to_the_pdf_file.set_text(filename)
329
+ end
330
+
331
+ # ========================================================================= #
332
+ # === parent_widget?
333
+ # ========================================================================= #
334
+ def parent_widget?
335
+ @parent_widget
336
+ end
337
+
338
+ # ========================================================================= #
339
+ # === set_parent_widget
340
+ # ========================================================================= #
341
+ def set_parent_widget(i)
342
+ @parent_widget = i
343
+ end
344
+
345
+ # ========================================================================= #
346
+ # === run
347
+ # ========================================================================= #
348
+ def run
349
+ create_skeleton_then_connect_skeleton
350
+ show_all
351
+ end
352
+
353
+ # ========================================================================= #
354
+ # === create_entries (entries tag)
355
+ # ========================================================================= #
356
+ def create_entries
357
+ @entry_for_the_path_to_the_pdf_file = gtk_entry('')
358
+ @entry_for_the_path_to_the_pdf_file.highlight_on_click_event
359
+ @entry_for_the_path_to_the_pdf_file.add_css_class(
360
+ 'BG_floralwhite'
361
+ )
362
+ # ======================================================================= #
363
+ # === @entry_remove_this_pdf_page
364
+ # ======================================================================= #
365
+ @entry_remove_this_pdf_page = gtk_entry
366
+ @entry_remove_this_pdf_page.highlight_on_click_event
367
+ @entry_remove_this_pdf_page.bblack1
368
+ @entry_remove_this_pdf_page.add_css_class(
369
+ 'BG_floralwhite'
370
+ )
371
+ @entry_remove_this_pdf_page.align_to_the_center
372
+ @entry_remove_this_pdf_page.set_size_request(160, 48)
373
+ end
374
+
375
+ # ========================================================================= #
376
+ # === do_remove_this_page
377
+ # ========================================================================= #
378
+ def do_remove_this_page(
379
+ i = @entry_remove_this_pdf_page.text.to_s,
380
+ target_file = @entry_for_the_path_to_the_pdf_file.text.to_s
381
+ )
382
+ if File.exist?(target_file)
383
+ PdfParadise.remove_this_page_of_that_pdf_file(
384
+ i, target_file
385
+ )
386
+ update_all_done_finished_at
387
+ else
388
+ no_file_was_found_at(target_file)
389
+ end
390
+ end
391
+
392
+ # ========================================================================= #
393
+ # === PdfParadise::GUI::Gtk::DeleteTheFirstOrTheLastPageOfThisPdfFileModule.run
394
+ # ========================================================================= #
395
+ def self.run
396
+ require 'gtk_paradise/run'
397
+ _ = ::PdfParadise::GUI::Gtk::DeleteTheFirstOrTheLastPageOfThisPdfFile.new
398
+ r = ::Gtk.run
399
+ r << _
400
+ r.automatic
401
+ r.top_left_then_run
402
+ end
403
+
404
+ # ========================================================================= #
405
+ # === add_the_remove_the_first_page_and_remove_the_last_page_of_the_pdf_file_buttons
406
+ # ========================================================================= #
407
+ def add_the_remove_the_first_page_and_remove_the_last_page_of_the_pdf_file_buttons
408
+ use_this_button_box = gtk_button_box(
409
+ @button_remove_the_first_page_of_the_pdf_file,
410
+ @button_remove_the_last_page_of_the_pdf_file
411
+ ) {{
412
+ padding: 2,
413
+ fill: true
414
+ }}
415
+ use_this_button_box.layout = :spread
416
+ @hbox1.add(
417
+ use_this_button_box
418
+ )
419
+ end
420
+
421
+ end; end; end
422
+
423
+ # =========================================================================== #
424
+ # === PdfParadise.return_widget_remove_first_page_of_pdf_file
425
+ # =========================================================================== #
426
+ def self.return_widget_remove_first_page_of_pdf_file
427
+ ::PdfParadise::GUI::Gtk::DeleteTheFirstOrTheLastPageOfThisPdfFile.new
428
+ end
429
+
430
+ # =========================================================================== #
431
+ # === PdfParadise.start_gtk_gui_remove_first_page_of_pdf_file
432
+ # =========================================================================== #
433
+ def self.start_gtk_gui_remove_first_page_of_pdf_file
434
+ require 'gtk_paradise/run'
435
+ _ = PdfParadise::GUI::Gtk::DeleteTheFirstOrTheLastPageOfThisPdfFile.new
436
+ r = ::Gtk.run
437
+ _.set_parent_widget(r)
438
+ r.easy_exit
439
+ r << _
440
+ r.top_left_then_run
441
+ end
442
+
443
+ end
@@ -0,0 +1,5 @@
1
+ #button1 {
2
+ border: 3px solid darkblue;
3
+ color: teal;
4
+ background: oldlace;
5
+ }