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,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,20 @@
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/colours/colours.rb'
10
+ require 'pdf_paradise/toplevel_methods/e.rb'
11
+
12
+ # ========================================================================= #
13
+ # === PdfParadise.esystem
14
+ # ========================================================================= #
15
+ def self.esystem(i)
16
+ e "#{rev}#{i}"
17
+ system i
18
+ end
19
+
20
+ end
@@ -0,0 +1,228 @@
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.use_which_file?
7
+ # PdfParadise.djvu_to_pdf
8
+ # PdfParadise.do_require_the_utility_scripts
9
+ # =========================================================================== #
10
+ module PdfParadise
11
+
12
+ require 'pdf_paradise/toplevel_methods/esystem.rb'
13
+ require 'pdf_paradise/requires/colours.rb'
14
+
15
+ # ========================================================================= #
16
+ # === @use_this_file
17
+ #
18
+ # This variable can be used to keep track of the current .pdf file
19
+ # the PdfParadise gem operates on - for instance, from which the
20
+ # first page has been deleted from.
21
+ # ========================================================================= #
22
+ @use_this_file = nil
23
+
24
+ # ========================================================================= #
25
+ # === PdfParadise.use_which_file?
26
+ # ========================================================================= #
27
+ def self.use_which_file?
28
+ @use_this_file
29
+ end
30
+
31
+ # ========================================================================= #
32
+ # === PdfParadise.set_use_this_file
33
+ # ========================================================================= #
34
+ def self.set_use_this_file(i)
35
+ @use_this_file = i
36
+ end
37
+
38
+ # ========================================================================= #
39
+ # === PdfParadise.set_author
40
+ #
41
+ # This method can be used to set the author of a given .pdf file.
42
+ #
43
+ # The external tool called "exiftool" is required for this.
44
+ # ========================================================================= #
45
+ def self.set_author(
46
+ of_this_pdf_file,
47
+ this_author = 'foobar'
48
+ )
49
+ _ = 'exiftool -Author="'+this_author+'" '+of_this_pdf_file
50
+ esystem(_)
51
+ end
52
+
53
+ # ========================================================================= #
54
+ # === PdfParadise.n_pdf_files_in_this_directory
55
+ # ========================================================================= #
56
+ def self.n_pdf_files_in_this_directory(
57
+ i
58
+ )
59
+ Dir[i+'**/**.pdf'].size
60
+ end
61
+
62
+ # ========================================================================= #
63
+ # === PdfParadise.djvu_to_pdf
64
+ #
65
+ # This method can be used to convert a .djvu file to a .pdf file.
66
+ # ========================================================================= #
67
+ def self.djvu_to_pdf(i)
68
+ if i.is_a? Array
69
+ i = i.join(' ').strip
70
+ end
71
+ output_file = 'output_file.pdf'
72
+ esystem "djvups #{i} | ps2pdf - #{output_file}"
73
+ return output_file
74
+ end
75
+
76
+ # ========================================================================= #
77
+ # === PdfParadise.number_this_pdf_file
78
+ #
79
+ # This method can be used to number a given .pdf file - that is to add
80
+ # numbers to this file, typically on the bottom right area (by default).
81
+ #
82
+ # Specific usage example:
83
+ #
84
+ # PdfParadise.number_this_pdf_file('foobar.pdf')
85
+ #
86
+ # ========================================================================= #
87
+ def self.number_this_pdf_file(
88
+ this_pdf_file,
89
+ font_size_to_use = 30
90
+ )
91
+ [this_pdf_file].flatten.each {|pdf_file|
92
+ x = pdf_file
93
+ require 'combine_pdf'
94
+ pdf = CombinePDF.load(x)
95
+ pdf.number_pages(
96
+ location: [:bottom_right],
97
+ number_format: ' %s ',
98
+ border_width: 1,
99
+ font_size: font_size_to_use
100
+ )
101
+ pdf.save "numbered_pages.pdf"
102
+ }
103
+ end
104
+
105
+ # ========================================================================= #
106
+ # === PdfParadise.remove_html
107
+ #
108
+ # Usage example:
109
+ #
110
+ # PdfParadise.remove_html('<one>two</three>')
111
+ #
112
+ # ========================================================================= #
113
+ def self.remove_html(i)
114
+ i.gsub(
115
+ %r{<[^>]+>},
116
+ ''
117
+ )
118
+ end
119
+
120
+ # ========================================================================= #
121
+ # === PdfParadise.ensure_that_the_log_directory_exists
122
+ # ========================================================================= #
123
+ def self.ensure_that_the_log_directory_exists
124
+ require 'fileutils'
125
+ log_dir = PdfParadise.log_dir?
126
+ unless File.directory? log_dir
127
+ begin
128
+ FileUtils.mkdir_p(log_dir)
129
+ return log_dir # And return it here, just in case.
130
+ rescue LoadError; end
131
+ end
132
+ end
133
+
134
+ # ========================================================================= #
135
+ # === PdfParadise.cd_to_the_log_directory
136
+ # ========================================================================= #
137
+ def self.cd_to_the_log_directory
138
+ Dir.chdir(PdfParadise.log_dir?)
139
+ end; self.instance_eval { alias cd_to_the_log_dir cd_to_the_log_directory } # === PdfParadise.cd_to_the_log_dir
140
+
141
+ # ========================================================================= #
142
+ # === PdfParadise.do_require_the_utility_scripts
143
+ # ========================================================================= #
144
+ def self.do_require_the_utility_scripts
145
+ Dir[project_base_directory?+'utility_scripts/*.rb'].each {|entry|
146
+ require "pdf_paradise/utility_scripts/#{File.basename(entry)}"
147
+ }
148
+ # ======================================================================= #
149
+ # And some ad-hoc requires:
150
+ # ======================================================================= #
151
+ require 'pdf_paradise/utility_scripts/delete_the_first_page_of_this_pdf_file/delete_the_first_page_of_this_pdf_file.rb'
152
+ end
153
+
154
+ # ========================================================================= #
155
+ # === PdfParadise.report_which_pdf_viewer_is_in_use
156
+ #
157
+ # This method will simply report which pdf-viewer is in use.
158
+ # ========================================================================= #
159
+ def self.report_which_pdf_viewer_is_in_use
160
+ e "#{Colours.rev}The current pdf-viewer in use is "\
161
+ "#{Colours.sfancy(PdfParadise.pdf_viewer?)}."
162
+ end
163
+
164
+ # ========================================================================= #
165
+ # === PdfParadise.convert_this_pdf_file_into_a_png_file
166
+ # ========================================================================= #
167
+ def self.convert_this_pdf_file_into_a_png_file(
168
+ this_pdf_file
169
+ )
170
+ _ = 'gs -dNOPAUSE -q -r300 -sPAPERSIZE=a4 -dTextAlphaBits=4 -dDownScaleFactor=3 '.dup
171
+ _ << '-dGraphicsAlphaBits=4 -dUseTrimBox -sDEVICE=png16m -dBATCH '
172
+ _ << '-sOutputFile="C:\ingrid\pdf\outputfile%d.png" '
173
+ _ << '-c \"30000000 setvmthreshold\" '
174
+ _ << '-f "'+this_pdf_file+'" '
175
+ esystem _
176
+ end
177
+
178
+ # ========================================================================= #
179
+ # === PdfParadise.convert_postscript_to_pdf
180
+ #
181
+ # This method will convert a postscript-file into a .pdf file.
182
+ # ========================================================================= #
183
+ def self.convert_postscript_to_pdf(
184
+ i = 'filein.ps'
185
+ )
186
+ _ = 'gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=fileout.pdf '+i
187
+ esystem(_)
188
+ end
189
+
190
+ # ========================================================================= #
191
+ # === PdfParadise.is_on_windows?
192
+ # ========================================================================= #
193
+ def self.is_on_windows?
194
+ case RUBY_PLATFORM
195
+ when /win/,
196
+ /mingw/
197
+ true
198
+ else
199
+ false
200
+ end
201
+ end; self.instance_eval { alias on_windows? is_on_windows? } # === PdfParadise.on_windows?
202
+
203
+ require 'tmpdir'
204
+ # ========================================================================= #
205
+ # === PdfParadise.log_dir?
206
+ #
207
+ # This method must return a proper temp-dir (temporary directory),
208
+ # both on a Linux system, as well as on a windows system.
209
+ #
210
+ # Why is this necessary?
211
+ #
212
+ # Some operations of the pdf_paradise gem require access to such a
213
+ # a temp-directory.
214
+ # ========================================================================= #
215
+ def self.log_dir?
216
+ _ = '/tmp/pdf_paradise/' # This is the default. It should work on Linux.
217
+ _ = Dir.tmpdir
218
+ _ = ENV['TEMP_DIR'].dup if ENV['TEMP_DIR']
219
+ _ = _.dup
220
+ _ << '/pdf_paradise/' unless _.end_with?
221
+ return _.squeeze('/')
222
+ end
223
+
224
+ end
225
+
226
+ if __FILE__ == $PROGRAM_NAME
227
+ PdfParadise.convert_postscript_to_pdf(ARGV)
228
+ 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