pdf-page-count 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c330b18c7d4a351ae47428c723c71d211088d75
4
+ data.tar.gz: a43c14003bc96f16cca3c63c8fdae14394a22c89
5
+ SHA512:
6
+ metadata.gz: fe2ab716f14969e39f9cca7c02b5cd555b1b55dfdf74e499600d9ee9cf505bc675dc85bb14a88bd3dd1df7d0dee24effe23da2932d94c6e0e5e7279842e91277
7
+ data.tar.gz: d9f0605f47fc199f432f07d403e30d1ec670055345f315c20a38545912a298ddf4f2486a06f043f5ec402bad124cd79ffea1efa22bcaa8b24c3c33cf1848e307
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'rubygems'
5
+ require_relative '../lib/pdf-page-count'
6
+
7
+ spec = Gem::Specification::load('pdf-page-count.gemspec')
8
+
9
+ options = {
10
+ :threads => 10
11
+ }
12
+
13
+ opt_parser = OptionParser.new do |opt|
14
+ opt.banner = "Usage: pdf-page-count [options] [file/path] [file/path] ..."
15
+ opt.separator("Version: #{spec.version}")
16
+ opt.separator("")
17
+ opt.separator("Options")
18
+
19
+ opt.on("-R", "--recursive", "Recursively search for .pdf files") do
20
+ options[:recursive] = true
21
+ end
22
+
23
+ opt.on("-T", "--threads [N]", Integer, "Number of threads used to read pdf files") do |threads|
24
+ options[:threads] = threads
25
+ end
26
+
27
+ opt.on("-v", "--[no-]verbose", "Run verbosely") do |v|
28
+ options[:verbose] = v
29
+ end
30
+
31
+ opt.on("-h", "--help", "help") do
32
+ puts opt_parser
33
+ end
34
+
35
+ opt.separator("")
36
+ end
37
+
38
+ opt_parser.parse!
39
+
40
+ if ARGV.empty?
41
+ puts opt_parser
42
+ else
43
+ paths = ARGV
44
+ counter = PdfPageCount::PdfPageCounter.new
45
+
46
+ counter.start_counting(threads: options[:threads])
47
+ puts "Starting PDF page count with #{options[:threads]} threads."
48
+
49
+ counter.add_pdf_paths(paths, recursive: options[:recursive]) do |file, pages|
50
+ if options[:verbose]
51
+ puts "#{file}: #{pages}"
52
+ end
53
+ end
54
+
55
+ counter.finish_counting
56
+
57
+ puts "Total Pages: #{counter.total_pages}"
58
+ end
@@ -0,0 +1,3 @@
1
+ require_relative 'pdf-page-count/file_util'
2
+ require_relative 'pdf-page-count/pdf_util'
3
+ require_relative 'pdf-page-count/pdf_page_counter'
@@ -0,0 +1,23 @@
1
+ module PdfPageCount
2
+
3
+ module FileUtil
4
+
5
+ def find_pdf_files(path, recursive: false)
6
+ if File.directory?(path)
7
+ if recursive
8
+ return Dir.glob("#{path}/**/*.pdf")
9
+ else
10
+ return Dir.glob("#{path}/*.pdf")
11
+ end
12
+ elsif path.end_with?(".pdf")
13
+ return [path]
14
+ else
15
+ return []
16
+ end
17
+ end
18
+
19
+ module_function :find_pdf_files
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,54 @@
1
+ require 'thread/pool'
2
+
3
+ module PdfPageCount
4
+
5
+ class PdfPageCounter
6
+
7
+ def initialize
8
+ @total_pages = 0
9
+ end
10
+
11
+ def start_counting(threads: 10)
12
+ @process_pool = Thread.pool(threads)
13
+ @callback_pool = Thread.pool(1)
14
+ end
15
+
16
+ def add_pdf_paths(paths, recursive: false)
17
+ paths.each do |path|
18
+ self.add_pdf_path(path, recursive: recursive) do |file, pages|
19
+ yield file, pages
20
+ end
21
+ end
22
+ end
23
+
24
+ def add_pdf_path(path, recursive: false)
25
+ files = FileUtil.find_pdf_files(path, recursive: recursive)
26
+ files.each do |file|
27
+ self.add_pdf_file(file) do |file, pages|
28
+ yield file, pages
29
+ end
30
+ end
31
+ end
32
+
33
+ def add_pdf_file(file)
34
+ @process_pool.process do
35
+ pages = PdfUtil.count_pages(file)
36
+ @total_pages += pages
37
+ @callback_pool.process do
38
+ yield file, pages
39
+ end
40
+ end
41
+ end
42
+
43
+ def finish_counting
44
+ @process_pool.shutdown
45
+ @callback_pool.shutdown
46
+ end
47
+
48
+ def total_pages
49
+ @total_pages
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,16 @@
1
+ require 'pdf-reader'
2
+
3
+ module PdfPageCount
4
+
5
+ module PdfUtil
6
+
7
+ def count_pages(file_path)
8
+ reader = PDF::Reader.new(file_path)
9
+ reader.page_count
10
+ end
11
+
12
+ module_function :count_pages
13
+
14
+ end
15
+
16
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pdf-page-count
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Leigh McCulloch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thread
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: pdf-reader
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.3
41
+ description: Counts the pages in single and multiple PDFs. Capale of recursively finding
42
+ PDFs in directories.
43
+ email: leigh@mcchouse.com
44
+ executables:
45
+ - pdf-page-count
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - bin/pdf-page-count
50
+ - lib/pdf-page-count.rb
51
+ - lib/pdf-page-count/file_util.rb
52
+ - lib/pdf-page-count/pdf_page_counter.rb
53
+ - lib/pdf-page-count/pdf_util.rb
54
+ homepage: http://rubygems.org/gems/pdf-page-count
55
+ licenses:
56
+ - BSD-3-Clause
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.2.2
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Counts the pages in single and multiple PDFs.
78
+ test_files: []