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.
- 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
|