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,35 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/convert_ppt_to_pdf.rb'
6
+ # =========================================================================== #
7
+ require 'pdf_paradise/toplevel_methods/esystem.rb'
8
+
9
+ module PdfParadise
10
+
11
+ # ========================================================================= #
12
+ # === PdfParadise.convert_this_ppt_file_to_a_pdf_file
13
+ #
14
+ # This method will make use of libreoffice to convert .pptx or
15
+ # ppt files into .pdf files.
16
+ # ========================================================================= #
17
+ def self.convert_this_ppt_file_to_a_pdf_file(
18
+ i, use_this_format = 'pptx'
19
+ )
20
+ if i.is_a? Array
21
+ i.each {|entry|
22
+ convert_this_ppt_file_to_a_pdf_file(entry, use_this_format)
23
+ }
24
+ else
25
+ cmd = 'libreoffice --headless --invisible --convert-to pdf *.'+use_this_format
26
+ esystem cmd
27
+ end
28
+ end; self.instance_eval { alias convert_ppt_to_pdf convert_this_ppt_file_to_a_pdf_file } # === PdfParadise.convert_ppt_to_pdf
29
+ self.instance_eval { alias convert_pptx_to_pdf convert_this_ppt_file_to_a_pdf_file } # === PdfParadise.convert_pptx_to_pdf
30
+
31
+ end
32
+
33
+ if __FILE__ == $PROGRAM_NAME
34
+ PdfParadise.convert_this_ppt_file_to_a_pdf_file(ARGV)
35
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/e.rb'
6
+ # =========================================================================== #
7
+ module PdfParadise
8
+
9
+ # ========================================================================= #
10
+ # === PdfParadise.e
11
+ # ========================================================================= #
12
+ def self.e(i = '')
13
+ puts i
14
+ end
15
+
16
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/esystem.rb'
6
+ # =========================================================================== #
7
+ module PdfParadise
8
+
9
+ require 'pdf_paradise/toplevel_methods/e.rb'
10
+
11
+ # ========================================================================= #
12
+ # === PdfParadise.esystem
13
+ # ========================================================================= #
14
+ def self.esystem(i)
15
+ e i
16
+ system i
17
+ end
18
+
19
+ end
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/misc.rb'
6
+ # PdfParadise.do_require_the_utility_scripts
7
+ # =========================================================================== #
8
+ module PdfParadise
9
+
10
+ require 'pdf_paradise/toplevel_methods/esystem.rb'
11
+ require 'pdf_paradise/requires/colours.rb'
12
+
13
+ # ========================================================================= #
14
+ # === PdfParadise.log_dir?
15
+ # ========================================================================= #
16
+ def self.log_dir?
17
+ '/tmp/pdf_paradise/'
18
+ end
19
+
20
+ # ========================================================================= #
21
+ # === PdfParadise.cd_to_the_log_directory
22
+ # ========================================================================= #
23
+ def self.cd_to_the_log_directory
24
+ Dir.chdir(PdfParadise.log_dir?)
25
+ end
26
+
27
+ # ========================================================================= #
28
+ # === PdfParadise.do_require_the_utility_scripts
29
+ # ========================================================================= #
30
+ def self.do_require_the_utility_scripts
31
+ Dir[project_base_directory?+'utility_scripts/*.rb'].each {|entry|
32
+ require "pdf_paradise/utility_scripts/#{File.basename(entry)}"
33
+ }
34
+ end
35
+
36
+ # ========================================================================= #
37
+ # === PdfParadise.report_which_pdf_viewer_is_in_use
38
+ #
39
+ # This method will simply report which pdf-viewer is in use.
40
+ # ========================================================================= #
41
+ def self.report_which_pdf_viewer_is_in_use
42
+ e "#{Colours.rev}The current pdf-viewer in use is "\
43
+ "#{Colours.sfancy(PdfParadise.pdf_viewer?)}."
44
+ end
45
+
46
+ # ========================================================================= #
47
+ # === PdfParadise.convert_this_pdf_file_into_a_png_file
48
+ # ========================================================================= #
49
+ def self.convert_this_pdf_file_into_a_png_file(
50
+ this_pdf_file
51
+ )
52
+ _ = 'gs -dNOPAUSE -q -r300 -sPAPERSIZE=a4 -dTextAlphaBits=4 -dDownScaleFactor=3 '.dup
53
+ _ << '-dGraphicsAlphaBits=4 -dUseTrimBox -sDEVICE=png16m -dBATCH '
54
+ _ << '-sOutputFile="C:\ingrid\pdf\outputfile%d.png" '
55
+ _ << '-c \"30000000 setvmthreshold\" '
56
+ _ << '-f "'+this_pdf_file+'" '
57
+ esystem _
58
+ end
59
+
60
+ # ========================================================================= #
61
+ # === PdfParadise.convert_postscript_to_pdf
62
+ #
63
+ # This method will convert a postscript-file into a .pdf file.
64
+ # ========================================================================= #
65
+ def self.convert_postscript_to_pdf(
66
+ i = 'filein.ps'
67
+ )
68
+ _ = 'gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=fileout.pdf '+i
69
+ esystem(_)
70
+ end
71
+
72
+ end
73
+
74
+ if __FILE__ == $PROGRAM_NAME
75
+ PdfParadise.convert_postscript_to_pdf(ARGV)
76
+ end
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/number_pages.rb'
6
+ # =========================================================================== #
7
+ module PdfParadise
8
+
9
+ require 'pdf_paradise/toplevel_methods/e.rb'
10
+
11
+ # ========================================================================= #
12
+ # === PdfParadise.number_pages
13
+ # ========================================================================= #
14
+ def self.number_pages(*these_pdf_files)
15
+ begin
16
+ require 'combine_pdf'
17
+ rescue LoadError; end
18
+ use_this_font_size = 30
19
+ these_pdf_files.flatten.each {|this_pdf_file|
20
+ pdf = CombinePDF.load(this_pdf_file)
21
+ pdf.number_pages(
22
+ location: :bottom_right,
23
+ font_size: use_this_font_size,
24
+ number_format: ' %s ',
25
+ margin_from_height: 5, # The default here is 45 normally.
26
+ margin_from_side: 10 # The default here is 15 normally.
27
+ )
28
+ store_into = this_pdf_file.sub(/\.pdf$/,'')+'_numbered.pdf'
29
+ e "Storing into #{store_into}"
30
+ pdf.save store_into
31
+ }
32
+ end
33
+
34
+ end
35
+
36
+ if __FILE__ == $PROGRAM_NAME
37
+ PdfParadise.number_pages(ARGV)
38
+ end # numberpages
@@ -0,0 +1,221 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # Code in this file can:
6
+ #
7
+ # (a) return all opened .pdf files
8
+ # (b) store all opened .pdf files in a local file.
9
+ #
10
+ # =========================================================================== #
11
+ # require 'pdf_paradise/toplevel_methods/opened_pdf_files.rb'
12
+ # =========================================================================== #
13
+ module PdfParadise
14
+
15
+ require 'pdf_paradise/requires/colours.rb'
16
+ require 'pdf_paradise/constants/constants.rb'
17
+ require 'pdf_paradise/toplevel_methods/e.rb'
18
+ require 'pdf_paradise/toplevel_methods/esystem.rb'
19
+ require 'pdf_paradise/toplevel_methods/roebe.rb'
20
+
21
+ # ========================================================================= #
22
+ # === PdfParadise.return_array_of_all_currently_opened_pdf_files
23
+ #
24
+ # To view this array on the commandline, do:
25
+ #
26
+ # pdf_paradise --array-all-currently-opened-pdf-files
27
+ #
28
+ # The second argument is a bit buggy and slow, so I disabled it as
29
+ # of 27.12.2018. It may be re-enabled at a later time (or removed
30
+ # altogether).
31
+ #
32
+ # Usage example from ruby code:
33
+ #
34
+ # array = PdfParadise.return_array_of_all_currently_opened_pdf_files(:extensive)
35
+ #
36
+ # ========================================================================= #
37
+ def self.return_array_of_all_currently_opened_pdf_files(
38
+ also_run_locate = false
39
+ )
40
+ case also_run_locate
41
+ # ======================================================================= #
42
+ # === :make_use_of_locate
43
+ # ======================================================================= #
44
+ when :make_use_of_locate,
45
+ :extensive
46
+ also_run_locate = true
47
+ # ======================================================================= #
48
+ # === :do_not_run_locate
49
+ # ======================================================================= #
50
+ when :do_not_run_locate
51
+ also_run_locate = false
52
+ end
53
+ ps_ax_result = `ps ax`.split("\n").map(&:strip)
54
+ array = ps_ax_result.select {|line|
55
+ line.include? '.pdf'
56
+ }.map {|inner_liner|
57
+ # ===================================================================== #
58
+ # A line here may look like this:
59
+ # 10970 pts/25 Sl 0:38 evince DONE_MolBiol_?bungen_SS2017_Transfection_english_060220.pdf
60
+ # For now we split on ' ' and just use the last part.
61
+ # ===================================================================== #
62
+ inner_line = inner_liner.split(' ').last.strip
63
+ # ===================================================================== #
64
+ # We will also try to locate the file, via "locate". This functionality
65
+ # depends on findutils' "locate" binary and a prior run of "updatedb".
66
+ # ===================================================================== #
67
+ if also_run_locate
68
+ run_this_command = "locate #{inner_line} 2>&1"
69
+ # =================================================================== #
70
+ # The command above ^^^ may look like this:
71
+ #
72
+ # locate DONE_foobar_abc_2006.pdf 2>&1
73
+ #
74
+ # =================================================================== #
75
+ result = `#{run_this_command}`.strip
76
+ inner_line = result if result and result.include? inner_line
77
+ if inner_line.include?('?') and !File.exist?(inner_line)
78
+ inner_line.tr!('?','ä')
79
+ end
80
+ end
81
+ inner_line
82
+ }
83
+ return array
84
+ end
85
+
86
+ # ========================================================================= #
87
+ # === PdfParadise.open_last_opened_pdf_files (open tag)
88
+ #
89
+ # This method will try to open all the last opened .pdf files. This
90
+ # functionality depends on having stored these .pdf files in a local
91
+ # file, which presently has to be done manually (e. g. via the
92
+ # commandline) rather than automatically.
93
+ #
94
+ # Invocation example from the commandline:
95
+ #
96
+ # pdfparadise --open-last-pdf-files
97
+ #
98
+ # ========================================================================= #
99
+ def self.open_last_opened_pdf_files(
100
+ pdf_viewer_to_use = PdfParadise.pdf_viewer?
101
+ )
102
+ _ = FILE_ALL_CURRENTLY_OPENED_PDF_FILES
103
+ if File.exist? _
104
+ dataset = YAML.load_file(_)
105
+ dataset.each {|this_pdf_file|
106
+ if File.exist? this_pdf_file
107
+ esystem pdf_viewer_to_use+' "'+this_pdf_file+'" &'
108
+ else
109
+ e "No file exists at `#{::Colours.sfile(this_pdf_file)}`."
110
+ end
111
+ }
112
+ else
113
+ e 'No file exists at `'+sfile(_)+'`.'
114
+ end
115
+ end
116
+
117
+ # ========================================================================= #
118
+ # === PdfParadise.show_last_opened_pdf_files
119
+ # ========================================================================= #
120
+ def self.show_last_opened_pdf_files
121
+ _ = FILE_ALL_CURRENTLY_OPENED_PDF_FILES
122
+ if File.exist? _
123
+ dataset = YAML.load_file(_)
124
+ if dataset.empty?
125
+ e 'No .pdf files have been registered as having been opened.'
126
+ else
127
+ e 'The following .pdf files have been opened:'
128
+ e
129
+ dataset.each {|this_pdf_file| e " #{Colours.sfile(this_pdf_file)}" }
130
+ e
131
+ end
132
+ else
133
+ e 'No file exists at `'+_+'`.'
134
+ end
135
+ end
136
+
137
+ # ========================================================================= #
138
+ # === PdfParadise.file_all_currently_opened_pdf_files?
139
+ # ========================================================================= #
140
+ def self.file_all_currently_opened_pdf_files?
141
+ FILE_ALL_CURRENTLY_OPENED_PDF_FILES
142
+ end
143
+
144
+ # ========================================================================= #
145
+ # === PdfParadise.store_all_currently_opened_pdf_files
146
+ #
147
+ # To invoke this method from the commandline, do:
148
+ #
149
+ # pdfparadise --store-open-pdf-files
150
+ #
151
+ # ========================================================================= #
152
+ def self.store_all_currently_opened_pdf_files
153
+ begin
154
+ require 'save_file'
155
+ rescue LoadError; end
156
+ array = return_array_of_all_currently_opened_pdf_files(:extensive)
157
+ if array.empty?
158
+ e 'No .pdf file is currently empty.'
159
+ else
160
+ # ===================================================================== #
161
+ # Designate where to store the open .pdf files.
162
+ # ===================================================================== #
163
+ into = FILE_ALL_CURRENTLY_OPENED_PDF_FILES
164
+ e 'All currently opened .pdf files will be stored into the file'
165
+ e
166
+ e " `#{Colours.sfile(into)}`."
167
+ e
168
+ e 'These are the .pdf files that will be stored:'
169
+ e
170
+ array.each {|this_file|
171
+ e " #{Colours.sfile(this_file)}"
172
+ }
173
+ e
174
+ what = YAML.dump(array)
175
+ SaveFile.write_what_into(what, into)
176
+ if is_on_roebe?
177
+ update_main_pdf_entries(array)
178
+ into = '/home/x/programming/ruby/src/pdf_paradise/lib/pdf_paradise/yaml/working_on_these_pdf_files.yml'
179
+ e 'As we are on roebe, we will also store into the pdf-paradise'
180
+ e "project's designated yaml file at:"
181
+ e
182
+ e " #{Colours.sfile(into)}"
183
+ e
184
+ SaveFile.write_what_into(what, into)
185
+ end
186
+ end
187
+ end; self.instance_eval { alias store_all_currently_open_pdf_files store_all_currently_opened_pdf_files } # === PdfParadise.store_all_currently_open_pdf_files
188
+ self.instance_eval { alias save_open_pdf_files store_all_currently_opened_pdf_files } # === PdfParadise.save_open_pdf_files
189
+
190
+ # ========================================================================= #
191
+ # === PdfParadise.update_main_pdf_entries
192
+ #
193
+ # This method will update entries for e. g. openpdf1, openpdf2 and
194
+ # so forth.
195
+ # ========================================================================= #
196
+ def self.update_main_pdf_entries(
197
+ use_this_array = :try_to_use_the_main_file
198
+ )
199
+ begin
200
+ require 'roebe/classes/open_pdf.rb'
201
+ rescue LoadError; end
202
+ unless use_this_array.is_a? Array
203
+ case use_this_array
204
+ when :try_to_use_the_main_file
205
+ _ = file_all_currently_opened_pdf_files?
206
+ if File.exist? _
207
+ use_this_array = File.readlines(_).map(&:strip)
208
+ end
209
+ end
210
+ end
211
+ use_this_array.each_with_index {|pdf_location, pdf_number_to_use| pdf_number_to_use += 1
212
+ Roebe.set_pdf_for_this_number(pdf_number_to_use, pdf_location)
213
+ }
214
+ end
215
+
216
+ end
217
+
218
+ if __FILE__ == $PROGRAM_NAME
219
+ pp PdfParadise.return_array_of_all_currently_opened_pdf_files
220
+ PdfParadise.store_all_currently_opened_pdf_files
221
+ end # openedpdffiles
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # === PdfParadise::QueryPdfTitle
6
+ #
7
+ # This class will simply report the title of a .pdf file (or more accurately,
8
+ # all .pdf files that were passed to this class).
9
+ #
10
+ # Presently this depends on exiftool, but there are other ways how to
11
+ # query the title of a .pdf file, such as via prawn.
12
+ #
13
+ # However had, for the time being, we will depend on exiftool.
14
+ #
15
+ # The shell-invocation command for this would be:
16
+ #
17
+ # exiftool *.pdf | grep Title
18
+ #
19
+ # Usage example:
20
+ #
21
+ # PdfParadise::QueryPdfTitle.new(ARGV)
22
+ #
23
+ # =========================================================================== #
24
+ # require 'pdf_paradise/toplevel_methods/query_pdf_title.rb'
25
+ # =========================================================================== #
26
+ require 'pdf_paradise/base/base.rb'
27
+
28
+ module PdfParadise
29
+
30
+ class QueryPdfTitle < Base # === PdfParadise::QueryPdfTitle
31
+
32
+ # ========================================================================= #
33
+ # === NAMESPACE
34
+ # ========================================================================= #
35
+ NAMESPACE = inspect
36
+
37
+ # ========================================================================= #
38
+ # === initialize
39
+ # ========================================================================= #
40
+ def initialize(
41
+ i = nil,
42
+ run_already = true
43
+ )
44
+ reset
45
+ set_input(i)
46
+ if block_given?
47
+ yielded = yield
48
+ case yielded
49
+ when :be_verbose
50
+ @be_verbose = true
51
+ when :be_quiet
52
+ @be_verbose = false
53
+ end
54
+ end
55
+ run if run_already
56
+ end
57
+
58
+ # ========================================================================= #
59
+ # === reset (reset tag)
60
+ # ========================================================================= #
61
+ def reset
62
+ super()
63
+ # ======================================================================= #
64
+ # === @be_verbose
65
+ # ======================================================================= #
66
+ @be_verbose = true
67
+ # ======================================================================= #
68
+ # === @namespace
69
+ # ======================================================================= #
70
+ @namespace = NAMESPACE
71
+ end
72
+
73
+ # ========================================================================= #
74
+ # === set_input
75
+ # ========================================================================= #
76
+ def set_input(i = '')
77
+ i = [i] unless i.is_a? Array
78
+ @input = i
79
+ end
80
+
81
+ # ========================================================================= #
82
+ # === input?
83
+ # ========================================================================= #
84
+ def input?
85
+ @input
86
+ end; alias pdf_files? input? # === pdf_files?
87
+
88
+ # ========================================================================= #
89
+ # === iterate_over_the_input_files
90
+ # ========================================================================= #
91
+ def iterate_over_the_input_files
92
+ use_this_regex = /^Title\s*: (.+)$/
93
+ pdf_files?.each {|this_pdf_file|
94
+ if File.exist? this_pdf_file
95
+ sys_cmd = `exiftool #{this_pdf_file}`
96
+ begin
97
+ @title = sys_cmd.scan(use_this_regex).flatten.first
98
+ rescue ArgumentError => error
99
+ e 'An error happened for '+sfile(this_pdf_file)+'.'
100
+ pp error
101
+ pp error.class
102
+ exit
103
+ end
104
+ if @be_verbose
105
+ e "The title for `#{sfile(this_pdf_file)}` is:"
106
+ e
107
+ e " #{sfancy(@title)}"
108
+ e
109
+ end
110
+ else
111
+ opnn(namespace: @namespace); e "No file exists at `#{sfile(this_pdf_file)}`."
112
+ end
113
+ }
114
+ end
115
+
116
+ # ========================================================================= #
117
+ # === title?
118
+ # ========================================================================= #
119
+ def title?
120
+ @title
121
+ end
122
+
123
+ # ========================================================================= #
124
+ # === string?
125
+ #
126
+ # This variant will always return a String - an empty String if the .pdf
127
+ # file has no title set.
128
+ # ========================================================================= #
129
+ def string?
130
+ title?.to_s
131
+ end
132
+
133
+ # ========================================================================= #
134
+ # === run (run tag)
135
+ # ========================================================================= #
136
+ def run
137
+ iterate_over_the_input_files
138
+ end
139
+
140
+ # ========================================================================= #
141
+ # === PdfParadise::QueryPdfTitle[]
142
+ # ========================================================================= #
143
+ def self.[](i = '')
144
+ self.new(i)
145
+ end
146
+
147
+ end
148
+
149
+ # =========================================================================== #
150
+ # === PdfParadise.does_this_pdf_file_have_a_title?
151
+ #
152
+ # This method can be used to query whether a given .pdf file has a title
153
+ # or whether it does not.
154
+ #
155
+ # Usage example:
156
+ #
157
+ # PdfParadise.does_this_pdf_file_have_a_title? "foobar.pdf" # => true
158
+ #
159
+ # =========================================================================== #
160
+ def self.does_this_pdf_file_have_a_title?(i)
161
+ !query_pdf_title(i).empty?
162
+ end
163
+
164
+ # =========================================================================== #
165
+ # === PdfParadise.pdf_has_no_title?
166
+ # =========================================================================== #
167
+ def self.pdf_has_no_title?(i)
168
+ !does_this_pdf_file_have_a_title?(i)
169
+ end
170
+
171
+ # =========================================================================== #
172
+ # === PdfParadise.query_pdf_title
173
+ #
174
+ # The input to this method should be an existing .pdf file.
175
+ #
176
+ # Usage example:
177
+ #
178
+ # title = PdfParadise.query_pdf_title('/foobar.pdf') # => "Lecture 2 - Scaling"
179
+ #
180
+ # =========================================================================== #
181
+ def self.query_pdf_title(i)
182
+ PdfParadise::QueryPdfTitle.new(i) { :be_quiet }.string?
183
+ end; self.instance_eval { alias return_pdf_title_of query_pdf_title } # === PdfParadise.return_pdf_title
184
+ self.instance_eval { alias return_title_of_this_pdf_file query_pdf_title } # === PdfParadise.return_title_of_this_pdf_file
185
+ self.instance_eval { alias title? query_pdf_title } # === PdfParadise.title?
186
+
187
+ end
188
+
189
+ if __FILE__ == $PROGRAM_NAME
190
+ PdfParadise::QueryPdfTitle.new(ARGV)
191
+ end # querypdftitle
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/reduce_size_of_this_pdf_file.rb'
6
+ # =========================================================================== #
7
+ module PdfParadise
8
+
9
+ require 'pdf_paradise/toplevel_methods/e.rb'
10
+
11
+ begin
12
+ require 'esystem'
13
+ rescue LoadError; end
14
+
15
+ # ========================================================================= #
16
+ # === PdfParadise.reduce_size_of_this_pdf_file
17
+ #
18
+ # This method can be used to reduce the size of the passed .pdf file.
19
+ #
20
+ # This functionality depends on ghostscript (on the "gs" binary,
21
+ # specifically).
22
+ # ========================================================================= #
23
+ def self.reduce_size_of_this_pdf_file(this_pdf_file)
24
+ if this_pdf_file.is_a? Array
25
+ this_pdf_file.each {|entry|
26
+ reduce_size_of_this_pdf_file(entry)
27
+ }
28
+ else
29
+ guessed_name = File.basename(this_pdf_file).sub(/#{File.extname(this_pdf_file)}$/,'').dup
30
+ name_of_the_output_file = "output_#{guessed_name}".dup
31
+ name_of_the_output_file << '.pdf' unless name_of_the_output_file.end_with?('.pdf')
32
+ e
33
+ e 'Trying to reduce the size of the file '+this_pdf_file+' next:'
34
+ e
35
+ _ = 'gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 '\
36
+ '-dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH '\
37
+ '-sOutputFile='+name_of_the_output_file+' '+this_pdf_file
38
+ Esystem.esystem(_)
39
+ end
40
+ end; self.instance_eval { alias reduce_size reduce_size_of_this_pdf_file } # === PdfParadise.reduce_size
41
+
42
+ end
43
+
44
+ if __FILE__ == $PROGRAM_NAME
45
+ PdfParadise.reduce_size_of_this_pdf_file(ARGV)
46
+ end # reduce_size_of_this_pdf_file
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'pdf_paradise/toplevel_methods/roebe.rb'
6
+ # PdfParadise.is_on_roebe?
7
+ # =========================================================================== #
8
+ module PdfParadise
9
+
10
+ # ========================================================================= #
11
+ # === PdfParadise.is_on_roebe?
12
+ # ========================================================================= #
13
+ def self.is_on_roebe?
14
+ ENV['IS_ROEBE'].to_s == '1'
15
+ end
16
+
17
+ end