pdf_paradise 0.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +933 -0
  3. data/bin/automatic_pdf_title +7 -0
  4. data/bin/burst_this_pdf_file +7 -0
  5. data/bin/combine_these_pdf_pages +7 -0
  6. data/bin/compress_via_hexapdf +7 -0
  7. data/bin/convert_markdown_to_pdf +7 -0
  8. data/bin/convert_pdf_to_text +7 -0
  9. data/bin/delete_first_page_of_this_pdf_file +7 -0
  10. data/bin/djvu_to_pdf +7 -0
  11. data/bin/merge_then_open +7 -0
  12. data/bin/n_pages +10 -0
  13. data/bin/open_main_pdf +7 -0
  14. data/bin/pdf_paradise +9 -0
  15. data/bin/rotate_pdf +7 -0
  16. data/bin/set_main_book +7 -0
  17. data/bin/set_title_of_this_pdf_file +15 -0
  18. data/doc/README.gen +871 -0
  19. data/doc/todo/todo.md +13 -0
  20. data/images/Logo_for_the_pdf_paradise_project.avif +0 -0
  21. data/lib/pdf_paradise/base/base.rb +344 -0
  22. data/lib/pdf_paradise/base/colours.rb +67 -0
  23. data/lib/pdf_paradise/colours/colours.rb +27 -0
  24. data/lib/pdf_paradise/commandline/commandline.rb +109 -0
  25. data/lib/pdf_paradise/commandline/help.rb +77 -0
  26. data/lib/pdf_paradise/commandline/menu.rb +173 -0
  27. data/lib/pdf_paradise/compress/compress_this_pdf_file.rb +108 -0
  28. data/lib/pdf_paradise/compress/compress_via_hexapdf.rb +27 -0
  29. data/lib/pdf_paradise/compress/compress_via_qpdf.rb +32 -0
  30. data/lib/pdf_paradise/constants/constants.rb +76 -0
  31. data/lib/pdf_paradise/convert_text_to_pdf.rb +94 -0
  32. data/lib/pdf_paradise/css/project.css +17 -0
  33. data/lib/pdf_paradise/fpdf/README.md +2 -0
  34. data/lib/pdf_paradise/fpdf/bookmark.rb +129 -0
  35. data/lib/pdf_paradise/fpdf/chinese.rb +454 -0
  36. data/lib/pdf_paradise/fpdf/fpdf.rb +1902 -0
  37. data/lib/pdf_paradise/fpdf/fpdf_eps.rb +138 -0
  38. data/lib/pdf_paradise/fpdf/makefont.rb +1794 -0
  39. data/lib/pdf_paradise/gui/README.md +6 -0
  40. data/lib/pdf_paradise/gui/fox/split_pdf_file.rb +77 -0
  41. data/lib/pdf_paradise/gui/gtk2/pdf_viewer/pdf_viewer.rb +34 -0
  42. data/lib/pdf_paradise/gui/gtk2/split_pdf_file/split_pdf_file.rb +34 -0
  43. data/lib/pdf_paradise/gui/gtk2/statistics_widget/statistics_widget.rb +34 -0
  44. data/lib/pdf_paradise/gui/gtk3/controller/controller.rb +214 -0
  45. data/lib/pdf_paradise/gui/gtk3/pdf_viewer/pdf_viewer.rb +34 -0
  46. data/lib/pdf_paradise/gui/gtk3/split_pdf_file/split_pdf_file.rb +34 -0
  47. data/lib/pdf_paradise/gui/jruby/delete_the_first_or_the_last_page_of_this_pdf_file/delete_the_first_or_the_last_page_of_this_pdf_file.rb +167 -0
  48. data/lib/pdf_paradise/gui/jruby/remove_the_first_page_of_this_pdf_file/remove_the_first_page_of_this_pdf_file.rb +103 -0
  49. data/lib/pdf_paradise/gui/libui/extract_all_images_from_this_pdf_file/extract_all_images_from_this_pdf_file.rb +223 -0
  50. data/lib/pdf_paradise/gui/libui/remove_the_first_page_of_this_pdf_file/remove_the_first_page_of_this_pdf_file.rb +267 -0
  51. data/lib/pdf_paradise/gui/libui/rotate_pdf_file/rotate_pdf_file.rb +219 -0
  52. data/lib/pdf_paradise/gui/libui/statistics_widget/statistics_widget.rb +233 -0
  53. data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer.css +5 -0
  54. data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer_module.rb +287 -0
  55. data/lib/pdf_paradise/gui/shared_code/remove_the_first_page_of_this_pdf_file_module/remove_the_first_page_of_this_pdf_file_module.rb +31 -0
  56. data/lib/pdf_paradise/gui/shared_code/split_pdf_file/split_pdf_file_module.rb +295 -0
  57. data/lib/pdf_paradise/gui/universal_widgets/convert_pdf_to_text/convert_pdf_to_text.rb +366 -0
  58. data/lib/pdf_paradise/gui/universal_widgets/delete_the_first_or_the_last_page_of_this_pdf_file/delete_the_first_or_the_last_page_of_this_pdf_file.rb +776 -0
  59. data/lib/pdf_paradise/gui/universal_widgets/statistics_widget/statistics_widget.rb +407 -0
  60. data/lib/pdf_paradise/gui/universal_widgets/to_pdf/to_pdf.rb +351 -0
  61. data/lib/pdf_paradise/hexapdf/001_rainbow_pattern_example.rb +0 -0
  62. data/lib/pdf_paradise/hexapdf/hexapdf.rb +123 -0
  63. data/lib/pdf_paradise/images/PDF_PARADISE_LOGO.png +0 -0
  64. data/lib/pdf_paradise/main_pdf/main_pdf.rb +474 -0
  65. data/lib/pdf_paradise/merge_pdf/menu.rb +63 -0
  66. data/lib/pdf_paradise/merge_pdf/merge_pdf.rb +307 -0
  67. data/lib/pdf_paradise/merge_pdf_namespace.rb +9 -0
  68. data/lib/pdf_paradise/merge_then_open/merge_then_open.rb +105 -0
  69. data/lib/pdf_paradise/prawn_addons/README.md +2 -0
  70. data/lib/pdf_paradise/prawn_addons/prawn_addons.rb +17 -0
  71. data/lib/pdf_paradise/project/project.rb +22 -0
  72. data/lib/pdf_paradise/remove_pdf_password.rb +391 -0
  73. data/lib/pdf_paradise/requires/batch_require_toplevel_files.rb +22 -0
  74. data/lib/pdf_paradise/requires/colours.rb +11 -0
  75. data/lib/pdf_paradise/requires/colours_and_esystem_and_save_file_and_fileutils_and_opn.rb +13 -0
  76. data/lib/pdf_paradise/requires/esystem_and_colours.rb +11 -0
  77. data/lib/pdf_paradise/requires/esystem_and_opn_and_colours.rb +10 -0
  78. data/lib/pdf_paradise/requires/require_the_whole_project.rb +30 -0
  79. data/lib/pdf_paradise/requires/require_utility_scripts.rb +9 -0
  80. data/lib/pdf_paradise/set_main_book.rb +156 -0
  81. data/lib/pdf_paradise/set_pdf_title.rb +220 -0
  82. data/lib/pdf_paradise/sinatra/embeddable_interface.rb +389 -0
  83. data/lib/pdf_paradise/toplevel_methods/convert_epub_to_pdf.rb +27 -0
  84. data/lib/pdf_paradise/toplevel_methods/convert_markdown_to_pdf.rb +45 -0
  85. data/lib/pdf_paradise/toplevel_methods/convert_ppt_to_pdf.rb +35 -0
  86. data/lib/pdf_paradise/toplevel_methods/e.rb +16 -0
  87. data/lib/pdf_paradise/toplevel_methods/esystem.rb +20 -0
  88. data/lib/pdf_paradise/toplevel_methods/misc.rb +228 -0
  89. data/lib/pdf_paradise/toplevel_methods/number_pages.rb +38 -0
  90. data/lib/pdf_paradise/toplevel_methods/opened_pdf_files.rb +221 -0
  91. data/lib/pdf_paradise/toplevel_methods/query_pdf_title.rb +201 -0
  92. data/lib/pdf_paradise/toplevel_methods/reduce_size_of_this_pdf_file.rb +46 -0
  93. data/lib/pdf_paradise/toplevel_methods/roebe.rb +17 -0
  94. data/lib/pdf_paradise/toplevel_methods/to_pdf.rb +12 -0
  95. data/lib/pdf_paradise/utility_scripts/README.md +3 -0
  96. data/lib/pdf_paradise/utility_scripts/automatic_pdf_title.rb +104 -0
  97. data/lib/pdf_paradise/utility_scripts/check_syntax_of_pdf_files.rb +106 -0
  98. data/lib/pdf_paradise/utility_scripts/combine_these_pdf_pages.rb +118 -0
  99. data/lib/pdf_paradise/utility_scripts/convert_pdf_to_text.rb +179 -0
  100. data/lib/pdf_paradise/utility_scripts/delete_last_page_of_this_pdf_file.rb +180 -0
  101. data/lib/pdf_paradise/utility_scripts/delete_the_first_page_of_this_pdf_file/delete_the_first_page_of_this_pdf_file.rb +429 -0
  102. data/lib/pdf_paradise/utility_scripts/delete_this_page_of_this_pdf_file.rb +356 -0
  103. data/lib/pdf_paradise/utility_scripts/djvu_to_pdf.rb +87 -0
  104. data/lib/pdf_paradise/utility_scripts/extract_all_images_from_this_pdf_file.rb +129 -0
  105. data/lib/pdf_paradise/utility_scripts/extract_pdf_page.rb +283 -0
  106. data/lib/pdf_paradise/utility_scripts/pdf_file_n_total_pages.rb +348 -0
  107. data/lib/pdf_paradise/utility_scripts/pdf_optimizer.rb +111 -0
  108. data/lib/pdf_paradise/utility_scripts/pdf_statistics.rb +148 -0
  109. data/lib/pdf_paradise/utility_scripts/pdf_to_html.rb +75 -0
  110. data/lib/pdf_paradise/utility_scripts/remove_images.rb +110 -0
  111. data/lib/pdf_paradise/utility_scripts/rotate_pdf_file.rb +303 -0
  112. data/lib/pdf_paradise/utility_scripts/split_pdf.rb +364 -0
  113. data/lib/pdf_paradise/utility_scripts/to_pdf.rb +130 -0
  114. data/lib/pdf_paradise/utility_scripts/to_qdf.rb +66 -0
  115. data/lib/pdf_paradise/version/version.rb +19 -0
  116. data/lib/pdf_paradise/www/README.md +2 -0
  117. data/lib/pdf_paradise/www/sinatra/app.rb +304 -0
  118. data/lib/pdf_paradise/yaml/working_on_these_pdf_files.yml +4 -0
  119. data/lib/pdf_paradise.rb +5 -0
  120. data/pdf_paradise.gemspec +61 -0
  121. data/test/fpdf/001_minimal_example.rb +12 -0
  122. data/test/fpdf/002.pdf +0 -0
  123. data/test/fpdf/002_header_and_footer_example.rb +64 -0
  124. data/test/fpdf/003.pdf +98 -0
  125. data/test/fpdf/003_justified_paragraphs.rb +96 -0
  126. data/test/fpdf/file1.md +3 -0
  127. data/test/fpdf/file2.md +3 -0
  128. data/test/fpdf/test.pdf +0 -0
  129. data/test/testing_pdf_paradise.rb +12 -0
  130. metadata +239 -0
@@ -0,0 +1,366 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === PdfParadise::GUI::UniversalWidgets::ConvertPdfToText
6
+ #
7
+ # Usage example:
8
+ #
9
+ # PdfParadise::GUI::UniversalWidgets::ConvertPdfToText.new(ARGV)
10
+ #
11
+ # =========================================================================== #
12
+ # require 'pdf_paradise/gui/universal_widgets/convert_pdf_to_text/convert_pdf_to_text.rb'
13
+ # =========================================================================== #
14
+ require 'pdf_paradise/base/base.rb'
15
+
16
+ module PdfParadise
17
+
18
+ module GUI
19
+
20
+ module UniversalWidgets
21
+
22
+ class ConvertPdfToText < ::PdfParadise::Base # === PdfParadise::GUI::UniversalWidgets::ConvertPdfToText
23
+
24
+ require 'universal_widgets/base_module/base_module.rb'
25
+ include ::UniversalWidgets::BaseModule
26
+
27
+ require 'pdf_paradise/utility_scripts/convert_pdf_to_text.rb'
28
+
29
+ # ========================================================================= #
30
+ # === TITLE
31
+ # ========================================================================= #
32
+ TITLE = 'Convert .pdf to text-file'
33
+
34
+ # ========================================================================= #
35
+ # === WIDTH
36
+ # ========================================================================= #
37
+ WIDTH = '60% or minimum 1340px'
38
+
39
+ # ========================================================================= #
40
+ # === HEIGHT
41
+ # ========================================================================= #
42
+ HEIGHT = '30% or minimum 880px'
43
+
44
+ # ========================================================================= #
45
+ # === USE_THIS_FONT
46
+ # ========================================================================= #
47
+ USE_THIS_FONT = :hack_23
48
+
49
+ # ========================================================================= #
50
+ # === LARGER_FONT
51
+ # ========================================================================= #
52
+ LARGER_FONT = :hack_25
53
+
54
+ # ========================================================================= #
55
+ # === SMALLER_FONT
56
+ # ========================================================================= #
57
+ SMALLER_FONT = :hack_20
58
+
59
+ # ========================================================================= #
60
+ # === initialize
61
+ # ========================================================================= #
62
+ def initialize(
63
+ commandline_arguments = nil,
64
+ run_already = true
65
+ )
66
+ determine_the_GUI_to_be_used(commandline_arguments) # This must come first, even before reset().
67
+ reset
68
+ set_commandline_arguments(
69
+ commandline_arguments
70
+ )
71
+ on_delete_event_quit_the_application
72
+ run if run_already
73
+ end
74
+
75
+ # ========================================================================= #
76
+ # === reset (reset tag)
77
+ # ========================================================================= #
78
+ def reset
79
+ super() if respond_to?(:super)
80
+ reset_the_shared_module # This can come early.
81
+ reset_the_base_module
82
+ reset_the_internal_variables
83
+ infer_the_namespace
84
+ # ======================================================================= #
85
+ # === @configuration
86
+ # ======================================================================= #
87
+ @configuration = [true, __dir__, namespace?]
88
+ # ======================================================================= #
89
+ # === Set the title, width, height and the font in use.
90
+ # ======================================================================= #
91
+ title_width_height_font(TITLE, WIDTH, HEIGHT, USE_THIS_FONT)
92
+ if use_gtk3?
93
+ handle_CSS_rules
94
+ end
95
+ infer_the_size_automatically
96
+ end
97
+
98
+ # ========================================================================= #
99
+ # === smaller_font?
100
+ # ========================================================================= #
101
+ def smaller_font?
102
+ SMALLER_FONT
103
+ end
104
+
105
+ # ========================================================================= #
106
+ # === handle_CSS_rules (CSS tag)
107
+ # ========================================================================= #
108
+ def handle_CSS_rules
109
+ use_gtk_paradise_project_css_file
110
+ append_project_css_file
111
+ more_CSS_then_apply_it '
112
+
113
+ .small_border { border: 2px solid steelblue; }
114
+
115
+ '
116
+ end
117
+
118
+ # ========================================================================= #
119
+ # === reset_the_shared_module
120
+ #
121
+ # This method can be used for ruby-gtk3 and ruby-libui, among other
122
+ # toolkits.
123
+ # ========================================================================= #
124
+ def reset_the_shared_module
125
+ end
126
+
127
+ # ========================================================================= #
128
+ # === padding?
129
+ # ========================================================================= #
130
+ def padding?
131
+ 2
132
+ end
133
+
134
+ # ========================================================================= #
135
+ # === border_size?
136
+ # ========================================================================= #
137
+ def border_size?
138
+ 2
139
+ end
140
+
141
+ # ========================================================================= #
142
+ # === do_open_a_local_pdf_file
143
+ # ========================================================================= #
144
+ def do_open_a_local_pdf_file
145
+ # ======================================================================= #
146
+ # Create the particular file-chooser widget that we wish to use.
147
+ # ======================================================================= #
148
+ create_a_new_file_chooser_dialog(self) {{
149
+ start_dir: return_pwd,
150
+ filter_for: :pdf_files,
151
+ additional_directories: '/Depot/PDF/'
152
+ }}
153
+ _ = ::Gtk.main_file?
154
+ set_filepath(_)
155
+ do_the_conversion
156
+ end
157
+
158
+ # ========================================================================= #
159
+ # === set_filepath
160
+ # ========================================================================= #
161
+ def set_filepath(i)
162
+ @entry_convert_pdf_to_text.set_text(i.to_s)
163
+ end
164
+
165
+ # ========================================================================= #
166
+ # === do_the_conversion (conversion tag, convert tag)
167
+ #
168
+ # This is the method that will do the actual conversion.
169
+ # ========================================================================= #
170
+ def do_the_conversion
171
+ _ = @entry_convert_pdf_to_text.text?
172
+ if _ and File.exist?(_)
173
+ result = PdfParadise::ConvertPdfToText.new(_)
174
+ output_file = result.output_file?
175
+ if File.exist?(output_file)
176
+ # =================================================================== #
177
+ # Assign it as the new text-buffer next:
178
+ # =================================================================== #
179
+ @text_buffer.set_text(
180
+ File.read(output_file, encoding: 'UTF-8').to_s
181
+ )
182
+ end
183
+ else
184
+ popover(
185
+ 'Please specify a local, existing .pdf file.',
186
+ use_this_widget: @entry_convert_pdf_to_text,
187
+ font_to_use: :hack_20
188
+ ).popup
189
+ end
190
+ end
191
+
192
+ # ========================================================================= #
193
+ # === do_all_startup_related_actions
194
+ # ========================================================================= #
195
+ def do_all_startup_related_actions
196
+ end
197
+
198
+ # ========================================================================= #
199
+ # === connect_the_skeleton (connect tag)
200
+ # ========================================================================= #
201
+ def connect_the_skeleton
202
+ abort_on_exception
203
+
204
+ outer_vbox = create_vbox
205
+
206
+ hbox = create_hbox
207
+ hbox.minimal(
208
+ text('Convert this <b>.pdf</b> file to text:'), 4
209
+ )
210
+ hbox.minimal(@entry_convert_pdf_to_text, 5)
211
+ hbox.minimal(return_the_open_pdf_file_button, 4)
212
+ outer_vbox.minimal(hbox, 2)
213
+ tiny_hbox = create_hbox
214
+ tiny_hbox.minimal(@button_do_the_conversion, 10)
215
+ outer_vbox.minimal(tiny_hbox, 2)
216
+ outer_vbox.minimal(@scrolled_window, 5)
217
+
218
+ window = create_window_or_runner(nil, width?, height?, title?)
219
+ window << outer_vbox
220
+
221
+ properly_prepare_this_window(window,
222
+ {
223
+ title: title?,
224
+ font: font?,
225
+ width: width?,
226
+ height: height?,
227
+ padding: padding?,
228
+ border_size: border_size?
229
+ }
230
+ )
231
+ window.show_all
232
+ window.top_left
233
+ do_all_startup_related_actions
234
+ run_main
235
+ end
236
+
237
+ # ========================================================================= #
238
+ # === create_the_skeleton (create tag, skeleton tag)
239
+ # ========================================================================= #
240
+ def create_the_skeleton
241
+ create_the_entry
242
+ create_the_buttons
243
+ create_the_scrolled_window_with_the_text_buffer
244
+ end
245
+
246
+ # ========================================================================= #
247
+ # === return_the_open_pdf_file_button
248
+ # ========================================================================= #
249
+ def return_the_open_pdf_file_button
250
+ @button_open_pdf_file
251
+ end
252
+
253
+ # ========================================================================= #
254
+ # === create_the_entry
255
+ # ========================================================================= #
256
+ def create_the_entry
257
+ # ======================================================================= #
258
+ # === @entry_convert_pdf_to_text
259
+ # ======================================================================= #
260
+ @entry_convert_pdf_to_text = create_entry
261
+ @entry_convert_pdf_to_text.width_height(600, 42)
262
+ @entry_convert_pdf_to_text.yellow_background
263
+ @entry_convert_pdf_to_text.set_text(
264
+ '/Depot/PDF/foobar.pdf'
265
+ )
266
+ @entry_convert_pdf_to_text.enable_scroll_events
267
+ # ======================================================================= #
268
+ # Let this entry respond to mouse-scroll-events, e. g. the user does
269
+ # some scrolling via the mouse-wheel.
270
+ # ======================================================================= #
271
+ @entry_convert_pdf_to_text.on_mouse_scroll_event {|widget, event|
272
+ this_file = @entry_convert_pdf_to_text.text?
273
+ base_dir = "#{File.dirname(this_file)}/"
274
+ array_pdf_entries = Dir[base_dir+'*.pdf']
275
+ # ===================================================================== #
276
+ # Next, determine the position.
277
+ # ===================================================================== #
278
+ index = array_pdf_entries.index(this_file)
279
+ if index
280
+ if scroll_up?(event) # Scroll up.
281
+ index -= 1 unless index == 0
282
+ elsif scroll_down?(event) # Scroll down.
283
+ index += 1 unless index >= (array_pdf_entries.size - 1)
284
+ end
285
+ this_file = array_pdf_entries[index]
286
+ @entry_convert_pdf_to_text.set_text(this_file)
287
+ end
288
+ }
289
+ end
290
+
291
+
292
+ # ========================================================================= #
293
+ # === create_the_scrolled_window_with_the_text_buffer
294
+ # ========================================================================= #
295
+ def create_the_scrolled_window_with_the_text_buffer
296
+ @text_buffer = create_text_buffer
297
+ text_view = create_text_view(@text_buffer)
298
+ @scrolled_window = create_scrolled_window(text_view) { :always }
299
+ @scrolled_window.width_height(600, 560)
300
+ @scrolled_window.bblack1
301
+ end
302
+
303
+ # ========================================================================= #
304
+ # === create_the_buttons (buttons tag, button tag)
305
+ # ========================================================================= #
306
+ def create_the_buttons
307
+ # ======================================================================= #
308
+ # === Create the open-file-button
309
+ # ======================================================================= #
310
+ @button_open_pdf_file = create_button('_Open File', self, :use_mnemonics) {
311
+ :do_open_a_local_pdf_file
312
+ }
313
+ @button_open_pdf_file.pad5px
314
+ @button_open_pdf_file.hint = 'Click on this button '\
315
+ 'in order to open a local .pdf file.'
316
+ # ======================================================================= #
317
+ # === button_do_the_conversion
318
+ # ======================================================================= #
319
+ @button_do_the_conversion = create_button('_Convert', self, :use_mnemonics) {
320
+ :do_the_conversion
321
+ }
322
+ @button_do_the_conversion.clear_background
323
+ @button_do_the_conversion.on_hover(:lightblue)
324
+ @button_do_the_conversion.bblack1
325
+ @button_do_the_conversion.pad5px
326
+ @button_do_the_conversion.hint = 'Click this button '\
327
+ 'to <b>convert the .pdf file into a text-file</b>.'
328
+ end
329
+
330
+ # ========================================================================= #
331
+ # === run (run tag)
332
+ # ========================================================================= #
333
+ def run
334
+ run_super
335
+ end
336
+
337
+ # ========================================================================= #
338
+ # === PdfParadise::GUI::UniversalWidgets::ConvertPdfToText.run
339
+ # ========================================================================= #
340
+ def self.run(
341
+ i = ARGV
342
+ )
343
+ require 'gtk_paradise/run'
344
+ _ = ::PdfParadise::GUI::Gtk::ConvertPdfToText.new(i)
345
+ r = ::Gtk.run
346
+ _.set_parent_widget(r) # Must come before we enable the key-combinations.
347
+ r << _
348
+ r.automatic_size_then_automatic_title
349
+ r.enable_quick_exit
350
+ r.set_background :white
351
+ r.maximize
352
+ r.top_left_then_run
353
+ end; self.instance_eval { alias start_gui_application run } # === Roebe::GUI::Gtk::ConvertPdfToText.start_gui_application
354
+
355
+ # ========================================================================= #
356
+ # === PdfParadise::GUI::UniversalWidgets::ConvertPdfToText[]
357
+ # ========================================================================= #
358
+ def self.[](i = ARGV)
359
+ new(i)
360
+ end
361
+
362
+ end; end; end; end
363
+
364
+ if __FILE__ == $PROGRAM_NAME
365
+ PdfParadise::GUI::UniversalWidgets::ConvertPdfToText.new(ARGV)
366
+ end # guishell