pdf_paradise 0.1.43

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 (93) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +376 -0
  3. data/bin/automatic_pdf_title +7 -0
  4. data/bin/convert_markdown_to_pdf +7 -0
  5. data/bin/convert_pdf_to_text +7 -0
  6. data/bin/merge_then_open +7 -0
  7. data/bin/n_pages +10 -0
  8. data/bin/open_main_pdf +7 -0
  9. data/bin/pdf_paradise +7 -0
  10. data/bin/set_main_book +7 -0
  11. data/bin/set_title_of_this_pdf_file +15 -0
  12. data/doc/README.gen +348 -0
  13. data/doc/todo/todo.md +2 -0
  14. data/lib/pdf_paradise.rb +5 -0
  15. data/lib/pdf_paradise/base/base.rb +173 -0
  16. data/lib/pdf_paradise/commandline/help.rb +69 -0
  17. data/lib/pdf_paradise/commandline/menu.rb +160 -0
  18. data/lib/pdf_paradise/compress_this_pdf_file.rb +82 -0
  19. data/lib/pdf_paradise/constants/constants.rb +59 -0
  20. data/lib/pdf_paradise/convert_text_to_pdf.rb +94 -0
  21. data/lib/pdf_paradise/css/project.css +17 -0
  22. data/lib/pdf_paradise/djvu_to_pdf.rb +85 -0
  23. data/lib/pdf_paradise/gui/README.md +6 -0
  24. data/lib/pdf_paradise/gui/fox/split_pdf_file.rb +77 -0
  25. 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
  26. data/lib/pdf_paradise/gui/gtk2/pdf_viewer/pdf_viewer.rb +34 -0
  27. data/lib/pdf_paradise/gui/gtk2/split_pdf_file/split_pdf_file.rb +34 -0
  28. data/lib/pdf_paradise/gui/gtk2/statistics_widget/statistics_widget.rb +34 -0
  29. data/lib/pdf_paradise/gui/gtk2/to_pdf/to_pdf.rb +32 -0
  30. data/lib/pdf_paradise/gui/gtk3/controller/controller.rb +197 -0
  31. data/lib/pdf_paradise/gui/gtk3/convert_pdf_to_text/convert_pdf_to_text.rb +34 -0
  32. 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
  33. data/lib/pdf_paradise/gui/gtk3/pdf_viewer/pdf_viewer.rb +34 -0
  34. data/lib/pdf_paradise/gui/gtk3/split_pdf_file/split_pdf_file.rb +34 -0
  35. data/lib/pdf_paradise/gui/gtk3/statistics_widget/statistics_widget.rb +34 -0
  36. data/lib/pdf_paradise/gui/gtk3/to_pdf/to_pdf.rb +32 -0
  37. data/lib/pdf_paradise/gui/shared_code/convert_pdf_to_text/convert_pdf_to_text_module.rb +277 -0
  38. 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 +428 -0
  39. data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer.css +5 -0
  40. data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer_module.rb +284 -0
  41. data/lib/pdf_paradise/gui/shared_code/split_pdf_file/split_pdf_file.css +0 -0
  42. data/lib/pdf_paradise/gui/shared_code/split_pdf_file/split_pdf_file_module.rb +294 -0
  43. data/lib/pdf_paradise/gui/shared_code/statistics_widget/statistics_widget_module.rb +333 -0
  44. data/lib/pdf_paradise/gui/shared_code/to_pdf/to_pdf_module.rb +273 -0
  45. data/lib/pdf_paradise/main_pdf/main_pdf.rb +437 -0
  46. data/lib/pdf_paradise/merge_pdf/menu.rb +63 -0
  47. data/lib/pdf_paradise/merge_pdf/merge_pdf.rb +292 -0
  48. data/lib/pdf_paradise/merge_pdf_namespace.rb +9 -0
  49. data/lib/pdf_paradise/merge_then_open/merge_then_open.rb +105 -0
  50. data/lib/pdf_paradise/pdf_file_n_total_pages.rb +227 -0
  51. data/lib/pdf_paradise/project/project_base_directory.rb +22 -0
  52. data/lib/pdf_paradise/remove_pdf_password.rb +392 -0
  53. data/lib/pdf_paradise/requires/batch_require_toplevel_files.rb +22 -0
  54. data/lib/pdf_paradise/requires/colours.rb +7 -0
  55. data/lib/pdf_paradise/requires/colours_and_esystem_and_save_file_and_fileutils_and_opn.rb +11 -0
  56. data/lib/pdf_paradise/requires/esystem_and_colours.rb +10 -0
  57. data/lib/pdf_paradise/requires/esystem_and_opn_and_colours.rb +8 -0
  58. data/lib/pdf_paradise/requires/require_the_whole_project.rb +25 -0
  59. data/lib/pdf_paradise/requires/require_utility_scripts.rb +7 -0
  60. data/lib/pdf_paradise/rotate_pdf_file.rb +144 -0
  61. data/lib/pdf_paradise/set_main_book.rb +156 -0
  62. data/lib/pdf_paradise/set_pdf_title.rb +218 -0
  63. data/lib/pdf_paradise/sinatra/embeddable_interface.rb +315 -0
  64. data/lib/pdf_paradise/toplevel_methods/automatic_pdf_title.rb +55 -0
  65. data/lib/pdf_paradise/toplevel_methods/convert_epub_to_pdf.rb +27 -0
  66. data/lib/pdf_paradise/toplevel_methods/convert_markdown_to_pdf.rb +43 -0
  67. data/lib/pdf_paradise/toplevel_methods/convert_ppt_to_pdf.rb +35 -0
  68. data/lib/pdf_paradise/toplevel_methods/e.rb +16 -0
  69. data/lib/pdf_paradise/toplevel_methods/esystem.rb +19 -0
  70. data/lib/pdf_paradise/toplevel_methods/misc.rb +52 -0
  71. data/lib/pdf_paradise/toplevel_methods/number_pages.rb +38 -0
  72. data/lib/pdf_paradise/toplevel_methods/opened_pdf_files.rb +191 -0
  73. data/lib/pdf_paradise/toplevel_methods/query_pdf_title.rb +182 -0
  74. data/lib/pdf_paradise/toplevel_methods/reduce_size_of_this_pdf_file.rb +43 -0
  75. data/lib/pdf_paradise/toplevel_methods/roebe.rb +17 -0
  76. data/lib/pdf_paradise/toplevel_methods/to_pdf.rb +38 -0
  77. data/lib/pdf_paradise/utility_scripts/README.md +3 -0
  78. data/lib/pdf_paradise/utility_scripts/convert_pdf_to_text.rb +166 -0
  79. data/lib/pdf_paradise/utility_scripts/delete_first_page_of_this_pdf_file.rb +185 -0
  80. data/lib/pdf_paradise/utility_scripts/delete_last_page_of_this_pdf_file.rb +180 -0
  81. data/lib/pdf_paradise/utility_scripts/delete_this_page_of_this_pdf_file.rb +310 -0
  82. data/lib/pdf_paradise/utility_scripts/extract_pdf_page.rb +280 -0
  83. data/lib/pdf_paradise/utility_scripts/pdf_optimizer.rb +113 -0
  84. data/lib/pdf_paradise/utility_scripts/pdf_statistics.rb +150 -0
  85. data/lib/pdf_paradise/utility_scripts/remove_images.rb +110 -0
  86. data/lib/pdf_paradise/utility_scripts/split_pdf.rb +294 -0
  87. data/lib/pdf_paradise/utility_scripts/to_qdf.rb +82 -0
  88. data/lib/pdf_paradise/version/version.rb +19 -0
  89. data/lib/pdf_paradise/www/README.md +2 -0
  90. data/lib/pdf_paradise/www/sinatra/app.rb +276 -0
  91. data/pdf_paradise.gemspec +64 -0
  92. data/test/testing_pdf_paradise.rb +9 -0
  93. metadata +216 -0
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === PdfParadise::RemoveImages
6
+ #
7
+ # This class will remove all images from a given .pdf file, by making use
8
+ # of ghostscript.
9
+ #
10
+ # Usage example:
11
+ #
12
+ # PdfParadise::RemoveImages.new(ARGV)
13
+ #
14
+ # =========================================================================== #
15
+ # require 'pdf_paradise/utility_scripts/remove_images.rb'
16
+ # =========================================================================== #
17
+ require 'pdf_paradise/base/base.rb'
18
+
19
+ module PdfParadise
20
+
21
+ class RemoveImages < ::PdfParadise::Base # === PdfParadise::RemoveImages
22
+
23
+ # ========================================================================= #
24
+ # === NAMESPACE
25
+ # ========================================================================= #
26
+ NAMESPACE = inspect
27
+
28
+ # ========================================================================= #
29
+ # === initialize
30
+ # ========================================================================= #
31
+ def initialize(
32
+ i = nil,
33
+ run_already = true
34
+ )
35
+ reset
36
+ set_input(i)
37
+ run if run_already
38
+ end
39
+
40
+ # ========================================================================= #
41
+ # === reset (reset tag)
42
+ # ========================================================================= #
43
+ def reset
44
+ super()
45
+ end
46
+
47
+ # ========================================================================= #
48
+ # === set_input
49
+ # ========================================================================= #
50
+ def set_input(i = '')
51
+ i = i.first if i.is_a? Array
52
+ i = i.to_s.dup
53
+ @input = i
54
+ end
55
+
56
+ # ========================================================================= #
57
+ # === input?
58
+ # ========================================================================= #
59
+ def input?
60
+ @input
61
+ end; alias input_file? input? # === input_file?
62
+
63
+ # ========================================================================= #
64
+ # === opnn
65
+ # ========================================================================= #
66
+ def opnn
67
+ super(NAMESPACE)
68
+ end
69
+
70
+ # ========================================================================= #
71
+ # === run (run tag)
72
+ # ========================================================================= #
73
+ def run
74
+ input_file = input_file?
75
+ this_output_file = 'only_text_is_kept_'+input_file
76
+ if File.exist? input_file
77
+ opnn; e 'Now removing all images from the file `'+sfile(input_file)+'`.'
78
+ opnn; e 'Will store into the file `'+sfile(this_output_file)+'`.'
79
+ _ = 'gs -o '+this_output_file+' -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE '+input_file
80
+ esystem _
81
+ if File.exist? this_output_file
82
+ opnn; e 'The file `'+sfile(this_output_file)+'` has been created!'
83
+ end
84
+ else
85
+ e 'Please supply an argument to this class that should be a local'
86
+ e '.pdf file.'
87
+ end
88
+ end
89
+
90
+ # ========================================================================= #
91
+ # === PdfParadise::RemoveImages[]
92
+ # ========================================================================= #
93
+ def self.[](i = '')
94
+ new(i)
95
+ end
96
+
97
+ end
98
+
99
+ # =========================================================================== #
100
+ # === PdfParadise.remove_image
101
+ # =========================================================================== #
102
+ def self.remove_image(from_this_pdf_file = ARGV)
103
+ RemoveImage.new(from_this_pdf_file)
104
+ end
105
+
106
+ end
107
+
108
+ if __FILE__ == $PROGRAM_NAME
109
+ PdfParadise::RemoveImages.new(ARGV)
110
+ end # removeimagesfromthispdffile
@@ -0,0 +1,294 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === PdfParadise::SplitPdf
6
+ #
7
+ # Use this class to split up a .pdf file into several new documents.
8
+ # =========================================================================== #
9
+ # require 'pdf_paradise/utility_scripts/split_pdf.rb'
10
+ # =========================================================================== #
11
+ require 'pdf_paradise/base/base.rb'
12
+
13
+ module PdfParadise
14
+
15
+ class SplitPdf < PdfParadise::Base # === PdfParadise::SplitPdf
16
+
17
+ require 'pdf_paradise/pdf_file_n_total_pages.rb'
18
+
19
+ # ========================================================================= #
20
+ # === NAMESPACE
21
+ # ========================================================================= #
22
+ NAMESPACE = inspect
23
+
24
+ # ========================================================================= #
25
+ # === SPLIT_UP_INTO_N_CHUNKS
26
+ #
27
+ # Split up the .pdf file at hand into n chunks. This constant used to
28
+ # be set to 10 rather than 2.
29
+ # ========================================================================= #
30
+ SPLIT_UP_INTO_N_CHUNKS = 1 # 10
31
+
32
+ # ========================================================================= #
33
+ # === initialize
34
+ # ========================================================================= #
35
+ def initialize(
36
+ optional_arguments = nil,
37
+ run_already = true
38
+ )
39
+ reset
40
+ set_commandline_arguments(
41
+ optional_arguments
42
+ )
43
+ if block_given?
44
+ yielded = yield
45
+ if yielded.is_a? Hash
46
+ if yielded.has_key? :split_into_n_pages
47
+ set_n_pages(
48
+ yielded.delete(:split_into_n_pages)
49
+ )
50
+ end
51
+ if yielded.has_key? :store_in_this_directory
52
+ set_store_here(
53
+ yielded.delete(:store_in_this_directory)
54
+ )
55
+ end
56
+ end
57
+ end
58
+ run if run_already
59
+ end
60
+
61
+ # ========================================================================= #
62
+ # === reset
63
+ # ========================================================================= #
64
+ def reset
65
+ super()
66
+ set_split_up_into_chunks_of_n_pages
67
+ set_store_in_this_directory
68
+ # ======================================================================= #
69
+ # === @path
70
+ # ======================================================================= #
71
+ @path = nil
72
+ # ======================================================================= #
73
+ # === @namespace
74
+ # ======================================================================= #
75
+ @namespace = NAMESPACE
76
+ end
77
+
78
+ # ========================================================================= #
79
+ # === set_store_in_this_directory
80
+ #
81
+ # By default we will store into the current working directory.
82
+ # ========================================================================= #
83
+ def set_store_in_this_directory(
84
+ i = return_pwd
85
+ )
86
+ case i
87
+ when :default
88
+ i = return_pwd
89
+ end
90
+ i = i.dup if i.frozen?
91
+ # ======================================================================= #
92
+ # We require a String.
93
+ # ======================================================================= #
94
+ i << '/' unless i.end_with? '/'
95
+ @store_in_this_directory = i
96
+ ensure_that_the_directory_exists(i)
97
+ end; alias set_store_here set_store_in_this_directory # === set_store_here
98
+
99
+ # ========================================================================= #
100
+ # === ensure_that_the_directory_exists
101
+ # ========================================================================= #
102
+ def ensure_that_the_directory_exists(this_directory = nil)
103
+ if this_directory
104
+ unless File.directory? this_directory
105
+ require 'fileutils'
106
+ FileUtils.mkdir_p(this_directory)
107
+ end
108
+ end
109
+ end
110
+
111
+ # ========================================================================= #
112
+ # === menu (menu tag)
113
+ # ========================================================================= #
114
+ def menu(
115
+ i = @commandline_arguments
116
+ )
117
+ if i.is_a? Array
118
+ i.each {|entry| menu(entry) }
119
+ else
120
+ case i
121
+ # ===================================================================== #
122
+ # === splitpdf --n-pages=1
123
+ # ===================================================================== #
124
+ when /^-?-?n(_|-)?pages=(.+)$/i # $2
125
+ _ = $2.to_s.dup
126
+ opnn; e 'We will split the .pdf file into '+sfancy(_.to_s)+' pages each.'
127
+ set_split_n_pages(_)
128
+ end
129
+ end
130
+ end
131
+
132
+ # ========================================================================= #
133
+ # === set_split_up_into_chunks_of_n_pages
134
+ # ========================================================================= #
135
+ def set_split_up_into_chunks_of_n_pages(
136
+ i = SPLIT_UP_INTO_N_CHUNKS
137
+ )
138
+ if i.is_a? Array
139
+ i = i.first
140
+ end
141
+ case i
142
+ when :max
143
+ i = 1
144
+ set_split_n_pages(
145
+ PdfParadise.n_pdf_pages?(
146
+ return_n_pages - 1
147
+ )
148
+ )
149
+ when nil,
150
+ :default
151
+ i = SPLIT_UP_INTO_N_CHUNKS
152
+ end
153
+ i = i.to_i # We need to keep this variable as Integer value.
154
+ @split_up_into_chunks_of_n_pages = i
155
+ end; alias set_split_n_pages set_split_up_into_chunks_of_n_pages # === set_split_n_pages
156
+ alias set_n_pages set_split_up_into_chunks_of_n_pages # === set_n_pages
157
+
158
+ # ========================================================================= #
159
+ # === return_n_pages
160
+ #
161
+ # This will return the amount of pages in the given .pdf file.
162
+ # ========================================================================= #
163
+ def return_n_pages(i = input?)
164
+ ::PdfParadise.n_pages?(i).to_i # We need an integer here.
165
+ end
166
+
167
+ # ========================================================================= #
168
+ # === n_chunks?
169
+ # ========================================================================= #
170
+ def n_chunks?
171
+ @split_up_into_chunks_of_n_pages
172
+ end
173
+
174
+ # ========================================================================= #
175
+ # === try_to_split_up_the_pdf
176
+ # ========================================================================= #
177
+ def try_to_split_up_the_pdf(
178
+ i = input_without_leading_hyphens?
179
+ )
180
+ i = i.first if i.is_a? Array
181
+ filename = i
182
+ if File.exist? i
183
+ n_pages = return_n_pages(i)
184
+ opnn; e "The file at `#{sfile(i)}` exists. We will next split"
185
+ opnn; e 'it up into chunks of '+simp(n_chunks?.to_s)+' pages.'
186
+ # ===================================================================== #
187
+ # We currently depend on "bin/convert" from ImageMagick. We
188
+ # will also try to preserve as much quality as possible.
189
+ # ===================================================================== #
190
+ # cmd_to_use = 'convert '.dup
191
+ cmd_to_use = 'convert -quality 98 '.dup
192
+ old_index = 0
193
+ n_chunks?.step(n_pages+1, n_chunks?) {|entry|
194
+ range = old_index.to_s+'-'+(entry - 1).to_s
195
+ _ = filename+'['+range+']'
196
+ output_file = @store_in_this_directory+
197
+ 'OUTPUT_PDF_FILE_'+
198
+ range.tr('-','_')+'_'+
199
+ File.basename(filename)
200
+ opnn; e 'The output file will be at `'+sfile(output_file)+'`.'
201
+ esystem(
202
+ "#{cmd_to_use}#{_} #{output_file}"
203
+ )
204
+ old_index = entry
205
+ }
206
+ # ===================================================================== #
207
+ # We may have to correct the command a bit to account for the
208
+ # very last .pdf pages.
209
+ # ===================================================================== #
210
+ n_possible_remaining_pages = n_pages % n_chunks?
211
+ if n_possible_remaining_pages > 0
212
+ # =================================================================== #
213
+ # Ok, now we know that we must do a modification because we know
214
+ # that there are n remaining pages left.
215
+ # =================================================================== #
216
+ range = old_index.to_s+'-'+((old_index+n_possible_remaining_pages)- 1).to_s
217
+ _ = filename+'['+range+']'+' '
218
+ output_file = @store_in_this_directory+'OUTPUT_PDF_FILE_'+range.tr('-','_')+'_'+File.basename(filename)
219
+ @path = output_file
220
+ opnn; e 'The output file will be at `'+sfile(output_file)+'`.'
221
+ esystem(
222
+ cmd_to_use+_+' '+output_file
223
+ )
224
+ end
225
+ else
226
+ opnn; no_file_at(i)
227
+ end
228
+ end
229
+
230
+ # ========================================================================= #
231
+ # === path?
232
+ # ========================================================================= #
233
+ def path?
234
+ @path
235
+ end
236
+
237
+ # ========================================================================= #
238
+ # === run
239
+ # ========================================================================= #
240
+ def run
241
+ menu
242
+ try_to_split_up_the_pdf
243
+ end
244
+
245
+ end
246
+
247
+ # =========================================================================== #
248
+ # === PdfParadise.split_this_pdf_file
249
+ #
250
+ # The first argument to this method should be the path to a locally
251
+ # existing .pdf file.
252
+ # =========================================================================== #
253
+ def self.split_this_pdf_file(
254
+ i = ARGV,
255
+ split_into_n_pages = 1,
256
+ store_in_this_directory = :default
257
+ )
258
+ _ = PdfParadise::SplitPdf.new(i) {{
259
+ split_into_n_pages: split_into_n_pages,
260
+ store_in_this_directory: store_in_this_directory
261
+ }}
262
+ _ # Return the object here.
263
+ end
264
+
265
+ # =========================================================================== #
266
+ # === PdfParadise.burst
267
+ #
268
+ # This will "burst" all pdf files out of a single .pdf file.
269
+ # =========================================================================== #
270
+ def self.burst(
271
+ i = ARGV,
272
+ split_into_n_pages = :max,
273
+ store_in_this_directory = :default
274
+ )
275
+ _ = PdfParadise::SplitPdf.new(i) {{
276
+ split_into_n_pages: split_into_n_pages,
277
+ store_in_this_directory: store_in_this_directory
278
+ }}
279
+ _ # Return the object here.
280
+ end
281
+
282
+ # =========================================================================== #
283
+ # === PdfParadise.convert
284
+ # =========================================================================== #
285
+ def self.convert(pdf_files)
286
+ handle = PdfParadise.split_this_pdf_file(pdf_files)
287
+ handle.path? # Return the file path as well.
288
+ end
289
+
290
+ end
291
+
292
+ if __FILE__ == $PROGRAM_NAME
293
+ PdfParadise::SplitPdf.new(ARGV)
294
+ end # split_pdf XIV-XVII_combined.pdf
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === PdfParadise::ToQdf
6
+ #
7
+ # This class will convert a .pdf file into a .qdf file.
8
+ #
9
+ # Usage example:
10
+ #
11
+ # PdfParadise::ToQdf.new(ARGV)
12
+ #
13
+ # =========================================================================== #
14
+ # require 'pdf_paradise/utility_scripts/to_qdf.rb'
15
+ # PdfParadise::ToQdf.new(ARGV)
16
+ # =========================================================================== #
17
+ require 'pdf_paradise/base/base.rb'
18
+
19
+ module PdfParadise
20
+
21
+ class ToQdf < ::PdfParadise::Base # === PdfParadise::ToQdf
22
+
23
+ # ========================================================================= #
24
+ # === NAMESPACE
25
+ # ========================================================================= #
26
+ NAMESPACE = inspect
27
+
28
+ # ========================================================================= #
29
+ # === initialize
30
+ # ========================================================================= #
31
+ def initialize(
32
+ commandline_arguments = nil,
33
+ run_already = true
34
+ )
35
+ reset
36
+ set_commandline_arguments(
37
+ commandline_arguments
38
+ )
39
+ run if run_already
40
+ end
41
+
42
+ # ========================================================================= #
43
+ # === reset (reset tag)
44
+ # ========================================================================= #
45
+ def reset
46
+ super()
47
+ # ======================================================================= #
48
+ # === @namespace
49
+ # ======================================================================= #
50
+ @namespace = NAMESPACE
51
+ end
52
+
53
+ # ========================================================================= #
54
+ # === set_commandline_arguments
55
+ # ========================================================================= #
56
+ def set_commandline_arguments(i = '')
57
+ i = [i].flatten.compact
58
+ @commandline_arguments = i
59
+ end
60
+
61
+ # ========================================================================= #
62
+ # === run (run tag)
63
+ # ========================================================================= #
64
+ def run
65
+ @commandline_arguments.each {|entry|
66
+ qdf_file = entry.sub(/\.?pdf$/,)
67
+ esystem "qpdf -qdf #{entry} #{qdf_file}.qdf"
68
+ }
69
+ end
70
+
71
+ # ========================================================================= #
72
+ # === PdfParadise::ToQdf[]
73
+ # ========================================================================= #
74
+ def self.[](i = '')
75
+ new(i)
76
+ end
77
+
78
+ end; end
79
+
80
+ if __FILE__ == $PROGRAM_NAME
81
+ PdfParadise::ToQdf.new(ARGV)
82
+ end # to_qdf