pdf_paradise 0.3.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +933 -0
- data/bin/automatic_pdf_title +7 -0
- data/bin/burst_this_pdf_file +7 -0
- data/bin/combine_these_pdf_pages +7 -0
- data/bin/compress_via_hexapdf +7 -0
- data/bin/convert_markdown_to_pdf +7 -0
- data/bin/convert_pdf_to_text +7 -0
- data/bin/delete_first_page_of_this_pdf_file +7 -0
- data/bin/djvu_to_pdf +7 -0
- data/bin/merge_then_open +7 -0
- data/bin/n_pages +10 -0
- data/bin/open_main_pdf +7 -0
- data/bin/pdf_paradise +9 -0
- data/bin/rotate_pdf +7 -0
- data/bin/set_main_book +7 -0
- data/bin/set_title_of_this_pdf_file +15 -0
- data/doc/README.gen +871 -0
- data/doc/todo/todo.md +13 -0
- data/images/Logo_for_the_pdf_paradise_project.avif +0 -0
- data/lib/pdf_paradise/base/base.rb +344 -0
- data/lib/pdf_paradise/base/colours.rb +67 -0
- data/lib/pdf_paradise/colours/colours.rb +27 -0
- data/lib/pdf_paradise/commandline/commandline.rb +109 -0
- data/lib/pdf_paradise/commandline/help.rb +77 -0
- data/lib/pdf_paradise/commandline/menu.rb +173 -0
- data/lib/pdf_paradise/compress/compress_this_pdf_file.rb +108 -0
- data/lib/pdf_paradise/compress/compress_via_hexapdf.rb +27 -0
- data/lib/pdf_paradise/compress/compress_via_qpdf.rb +32 -0
- data/lib/pdf_paradise/constants/constants.rb +76 -0
- data/lib/pdf_paradise/convert_text_to_pdf.rb +94 -0
- data/lib/pdf_paradise/css/project.css +17 -0
- data/lib/pdf_paradise/fpdf/README.md +2 -0
- data/lib/pdf_paradise/fpdf/bookmark.rb +129 -0
- data/lib/pdf_paradise/fpdf/chinese.rb +454 -0
- data/lib/pdf_paradise/fpdf/fpdf.rb +1902 -0
- data/lib/pdf_paradise/fpdf/fpdf_eps.rb +138 -0
- data/lib/pdf_paradise/fpdf/makefont.rb +1794 -0
- data/lib/pdf_paradise/gui/README.md +6 -0
- data/lib/pdf_paradise/gui/fox/split_pdf_file.rb +77 -0
- data/lib/pdf_paradise/gui/gtk2/pdf_viewer/pdf_viewer.rb +34 -0
- data/lib/pdf_paradise/gui/gtk2/split_pdf_file/split_pdf_file.rb +34 -0
- data/lib/pdf_paradise/gui/gtk2/statistics_widget/statistics_widget.rb +34 -0
- data/lib/pdf_paradise/gui/gtk3/controller/controller.rb +214 -0
- data/lib/pdf_paradise/gui/gtk3/pdf_viewer/pdf_viewer.rb +34 -0
- data/lib/pdf_paradise/gui/gtk3/split_pdf_file/split_pdf_file.rb +34 -0
- 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
- 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
- data/lib/pdf_paradise/gui/libui/extract_all_images_from_this_pdf_file/extract_all_images_from_this_pdf_file.rb +223 -0
- 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
- data/lib/pdf_paradise/gui/libui/rotate_pdf_file/rotate_pdf_file.rb +219 -0
- data/lib/pdf_paradise/gui/libui/statistics_widget/statistics_widget.rb +233 -0
- data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer.css +5 -0
- data/lib/pdf_paradise/gui/shared_code/pdf_viewer/pdf_viewer_module.rb +287 -0
- 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
- data/lib/pdf_paradise/gui/shared_code/split_pdf_file/split_pdf_file_module.rb +295 -0
- data/lib/pdf_paradise/gui/universal_widgets/convert_pdf_to_text/convert_pdf_to_text.rb +366 -0
- 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
- data/lib/pdf_paradise/gui/universal_widgets/statistics_widget/statistics_widget.rb +407 -0
- data/lib/pdf_paradise/gui/universal_widgets/to_pdf/to_pdf.rb +351 -0
- data/lib/pdf_paradise/hexapdf/001_rainbow_pattern_example.rb +0 -0
- data/lib/pdf_paradise/hexapdf/hexapdf.rb +123 -0
- data/lib/pdf_paradise/images/PDF_PARADISE_LOGO.png +0 -0
- data/lib/pdf_paradise/main_pdf/main_pdf.rb +474 -0
- data/lib/pdf_paradise/merge_pdf/menu.rb +63 -0
- data/lib/pdf_paradise/merge_pdf/merge_pdf.rb +307 -0
- data/lib/pdf_paradise/merge_pdf_namespace.rb +9 -0
- data/lib/pdf_paradise/merge_then_open/merge_then_open.rb +105 -0
- data/lib/pdf_paradise/prawn_addons/README.md +2 -0
- data/lib/pdf_paradise/prawn_addons/prawn_addons.rb +17 -0
- data/lib/pdf_paradise/project/project.rb +22 -0
- data/lib/pdf_paradise/remove_pdf_password.rb +391 -0
- data/lib/pdf_paradise/requires/batch_require_toplevel_files.rb +22 -0
- data/lib/pdf_paradise/requires/colours.rb +11 -0
- data/lib/pdf_paradise/requires/colours_and_esystem_and_save_file_and_fileutils_and_opn.rb +13 -0
- data/lib/pdf_paradise/requires/esystem_and_colours.rb +11 -0
- data/lib/pdf_paradise/requires/esystem_and_opn_and_colours.rb +10 -0
- data/lib/pdf_paradise/requires/require_the_whole_project.rb +30 -0
- data/lib/pdf_paradise/requires/require_utility_scripts.rb +9 -0
- data/lib/pdf_paradise/set_main_book.rb +156 -0
- data/lib/pdf_paradise/set_pdf_title.rb +220 -0
- data/lib/pdf_paradise/sinatra/embeddable_interface.rb +389 -0
- data/lib/pdf_paradise/toplevel_methods/convert_epub_to_pdf.rb +27 -0
- data/lib/pdf_paradise/toplevel_methods/convert_markdown_to_pdf.rb +45 -0
- data/lib/pdf_paradise/toplevel_methods/convert_ppt_to_pdf.rb +35 -0
- data/lib/pdf_paradise/toplevel_methods/e.rb +16 -0
- data/lib/pdf_paradise/toplevel_methods/esystem.rb +20 -0
- data/lib/pdf_paradise/toplevel_methods/misc.rb +228 -0
- data/lib/pdf_paradise/toplevel_methods/number_pages.rb +38 -0
- data/lib/pdf_paradise/toplevel_methods/opened_pdf_files.rb +221 -0
- data/lib/pdf_paradise/toplevel_methods/query_pdf_title.rb +201 -0
- data/lib/pdf_paradise/toplevel_methods/reduce_size_of_this_pdf_file.rb +46 -0
- data/lib/pdf_paradise/toplevel_methods/roebe.rb +17 -0
- data/lib/pdf_paradise/toplevel_methods/to_pdf.rb +12 -0
- data/lib/pdf_paradise/utility_scripts/README.md +3 -0
- data/lib/pdf_paradise/utility_scripts/automatic_pdf_title.rb +104 -0
- data/lib/pdf_paradise/utility_scripts/check_syntax_of_pdf_files.rb +106 -0
- data/lib/pdf_paradise/utility_scripts/combine_these_pdf_pages.rb +118 -0
- data/lib/pdf_paradise/utility_scripts/convert_pdf_to_text.rb +179 -0
- data/lib/pdf_paradise/utility_scripts/delete_last_page_of_this_pdf_file.rb +180 -0
- 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
- data/lib/pdf_paradise/utility_scripts/delete_this_page_of_this_pdf_file.rb +356 -0
- data/lib/pdf_paradise/utility_scripts/djvu_to_pdf.rb +87 -0
- data/lib/pdf_paradise/utility_scripts/extract_all_images_from_this_pdf_file.rb +129 -0
- data/lib/pdf_paradise/utility_scripts/extract_pdf_page.rb +283 -0
- data/lib/pdf_paradise/utility_scripts/pdf_file_n_total_pages.rb +348 -0
- data/lib/pdf_paradise/utility_scripts/pdf_optimizer.rb +111 -0
- data/lib/pdf_paradise/utility_scripts/pdf_statistics.rb +148 -0
- data/lib/pdf_paradise/utility_scripts/pdf_to_html.rb +75 -0
- data/lib/pdf_paradise/utility_scripts/remove_images.rb +110 -0
- data/lib/pdf_paradise/utility_scripts/rotate_pdf_file.rb +303 -0
- data/lib/pdf_paradise/utility_scripts/split_pdf.rb +364 -0
- data/lib/pdf_paradise/utility_scripts/to_pdf.rb +130 -0
- data/lib/pdf_paradise/utility_scripts/to_qdf.rb +66 -0
- data/lib/pdf_paradise/version/version.rb +19 -0
- data/lib/pdf_paradise/www/README.md +2 -0
- data/lib/pdf_paradise/www/sinatra/app.rb +304 -0
- data/lib/pdf_paradise/yaml/working_on_these_pdf_files.yml +4 -0
- data/lib/pdf_paradise.rb +5 -0
- data/pdf_paradise.gemspec +61 -0
- data/test/fpdf/001_minimal_example.rb +12 -0
- data/test/fpdf/002.pdf +0 -0
- data/test/fpdf/002_header_and_footer_example.rb +64 -0
- data/test/fpdf/003.pdf +98 -0
- data/test/fpdf/003_justified_paragraphs.rb +96 -0
- data/test/fpdf/file1.md +3 -0
- data/test/fpdf/file2.md +3 -0
- data/test/fpdf/test.pdf +0 -0
- data/test/testing_pdf_paradise.rb +12 -0
- 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
|