pdfinfo 1.3.2 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/pdfinfo.rb +17 -24
- data/lib/pdfinfo/page.rb +7 -1
- data/lib/pdfinfo/to_hash.rb +7 -0
- data/lib/pdfinfo/version.rb +1 -1
- metadata +5 -5
- data/lib/pdfinfo/object_to_hash.rb +0 -19
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWE5OGUxYjJmMWRjYjZhM2FjZjdlN2RiNDU0YWI0MGMyYzhhZGM2OQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NThkMTcwNjNiNDkxZGY1NTIwMWZiNDlhZjMyMTZkNWNhY2Y3Njg5Zg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2JmMGQ2MjcwNzA4NjU2YTdiODIwNTg5YjI0NDY0YzI3NDkzYjU1ZmVjMThh
|
10
|
+
NGFiNmY5YjliYzlhZGEwNGQ3MjgyNjhjZTY1ZmVmYTAyODVhN2Q0MWRlMjg0
|
11
|
+
NTA0YTg2ZjZjZDg0MTVlYWU2ZmU2Njk1NGE5M2ZiNjA1MWMzMDg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzNiYTUzMDc0NmRkNTY4ZTI4MTY0ZjgwMWEwNWJhOWRhMTBhMWZkODdhZWEz
|
14
|
+
ZTU0MDlhOWZiODJjZjc4ODI5MTE5ODVlM2EwMGFmZDYwMDNjMzM1MGI1MDIw
|
15
|
+
NGQxOGMzMmM4NzhhYWY4MmFhOTI5MTgyOWFiMjAzMWFkN2I2Y2I=
|
data/lib/pdfinfo.rb
CHANGED
@@ -2,11 +2,10 @@ require 'open3'
|
|
2
2
|
require 'shellwords'
|
3
3
|
require 'date'
|
4
4
|
require 'time'
|
5
|
-
|
5
|
+
Dir[File.expand_path("../pdfinfo/*", __FILE__)].each {|f| require f }
|
6
6
|
|
7
7
|
class Pdfinfo
|
8
|
-
include
|
9
|
-
|
8
|
+
include ToHash
|
10
9
|
attr_reader :pages, :title, :subject, :keywords, :author, :creator,
|
11
10
|
:creation_date, :modified_date, :usage_rights, :producer,
|
12
11
|
:form, :page_count, :width, :height, :file_size, :pdf_version
|
@@ -29,10 +28,10 @@ class Pdfinfo
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def initialize(source_path, opts = {})
|
32
|
-
@pages = []
|
33
31
|
|
34
32
|
info_hash = parse_shell_response(exec(source_path, opts))
|
35
33
|
|
34
|
+
@pages = []
|
36
35
|
info_hash.delete_if do |key, value|
|
37
36
|
@pages << Page.from_string(value) if key.match(/Page\s+\d+\ssize/)
|
38
37
|
end
|
@@ -45,12 +44,12 @@ class Pdfinfo
|
|
45
44
|
@creator = presence(info_hash.delete('Creator'))
|
46
45
|
@producer = presence(info_hash.delete('Producer'))
|
47
46
|
@tagged = !!(info_hash.delete('Tagged') =~ /yes/)
|
47
|
+
@optimized = !!(info_hash.delete('Optimized') =~ /yes/)
|
48
48
|
@encrypted = !!(encrypted_val =~ /yes/)
|
49
49
|
@page_count = info_hash.delete('Pages').to_i
|
50
50
|
@file_size = info_hash.delete('File size').to_i
|
51
51
|
@form = info_hash.delete('Form')
|
52
52
|
@pdf_version = info_hash.delete('PDF version')
|
53
|
-
@optimized = !!(info_hash.delete('Optimized') =~ /yes/)
|
54
53
|
@keywords = (info_hash.delete('Keywords') || '').split(/\s/)
|
55
54
|
@creation_date = parse_time(info_hash.delete('CreationDate'))
|
56
55
|
@modified_date = parse_time(info_hash.delete('ModDate'))
|
@@ -64,39 +63,32 @@ class Pdfinfo
|
|
64
63
|
ur[:change] = booleanize_usage_right.call('change')
|
65
64
|
ur[:add_notes] = booleanize_usage_right.call('addNotes')
|
66
65
|
end
|
67
|
-
|
68
|
-
# temporarily continue setting #width and #height on Pdfinfo object
|
69
|
-
# to maintain legacy behavior
|
70
|
-
@width = @pages[0].width
|
71
|
-
@height = @pages[0].height
|
72
66
|
end
|
73
67
|
|
74
|
-
|
75
|
-
|
76
|
-
@tagged
|
68
|
+
%w(width height).each do |attr|
|
69
|
+
define_method(attr) { @pages[0].send(attr) }
|
77
70
|
end
|
78
71
|
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
# @return [Boolean]
|
85
|
-
def optimized?
|
86
|
-
@optimized
|
72
|
+
# Feature checks
|
73
|
+
%w(tagged encrypted optimized).each do |flag|
|
74
|
+
define_method("#{flag}?") { instance_variable_get("@#{flag}")}
|
87
75
|
end
|
88
76
|
|
77
|
+
# Usage rights checks
|
89
78
|
%w(print copy change).each do |ur|
|
90
|
-
# @return [Boolean]
|
91
79
|
define_method("#{ur}able?") { @usage_rights[ur.to_sym] }
|
92
80
|
end
|
93
81
|
alias modifiable? changeable?
|
94
82
|
|
95
|
-
# @return [Boolean]
|
96
83
|
def annotatable?
|
97
84
|
@usage_rights[:add_notes]
|
98
85
|
end
|
99
86
|
|
87
|
+
def to_hash
|
88
|
+
super.tap {|h| h[:pages].map!(&:to_hash) }
|
89
|
+
end
|
90
|
+
alias_method :to_h, :to_hash
|
91
|
+
|
100
92
|
private
|
101
93
|
# executes pdfinfo command with supplied options
|
102
94
|
# @param [String,Pathname] file_path
|
@@ -145,8 +137,9 @@ class Pdfinfo
|
|
145
137
|
str.encode!(Encoding::UTF_8)
|
146
138
|
end
|
147
139
|
|
140
|
+
# @return [NilClass,String] returns nil if string is empty
|
148
141
|
def presence(val)
|
149
|
-
(val.nil? || val.empty?
|
142
|
+
(val.nil? || val.empty?) ? nil : val
|
150
143
|
end
|
151
144
|
|
152
145
|
def parse_shell_response(response_str)
|
data/lib/pdfinfo/page.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
require File.expand_path("../to_hash", __FILE__)
|
2
|
+
|
1
3
|
class Pdfinfo
|
2
4
|
class Page
|
3
|
-
include
|
5
|
+
include Pdfinfo::ToHash
|
4
6
|
MATCHER = /(?<=\s)?(\d+(?:\.\d+)?)(?=\s)/
|
5
7
|
|
6
8
|
attr_reader :width, :height, :rotation
|
@@ -18,5 +20,9 @@ class Pdfinfo
|
|
18
20
|
def rotated?
|
19
21
|
0 != @rotation
|
20
22
|
end
|
23
|
+
|
24
|
+
# def to_hash
|
25
|
+
# {width: width, height: height, rotation: rotation}
|
26
|
+
# end
|
21
27
|
end
|
22
28
|
end
|
data/lib/pdfinfo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdfinfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Venegas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,7 +52,7 @@ dependencies:
|
|
52
52
|
- - ! '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
-
description:
|
55
|
+
description: Object oriented ruby wrapper around the pdfinfo
|
56
56
|
email: rvenegas2@gmail.com
|
57
57
|
executables: []
|
58
58
|
extensions: []
|
@@ -60,8 +60,8 @@ extra_rdoc_files: []
|
|
60
60
|
files:
|
61
61
|
- lib/pdfinfo.rb
|
62
62
|
- lib/pdfinfo/errors.rb
|
63
|
-
- lib/pdfinfo/object_to_hash.rb
|
64
63
|
- lib/pdfinfo/page.rb
|
64
|
+
- lib/pdfinfo/to_hash.rb
|
65
65
|
- lib/pdfinfo/version.rb
|
66
66
|
homepage: https://github.com/RyanV/pdfinfo
|
67
67
|
licenses:
|
@@ -86,5 +86,5 @@ rubyforge_project:
|
|
86
86
|
rubygems_version: 2.2.2
|
87
87
|
signing_key:
|
88
88
|
specification_version: 4
|
89
|
-
summary: Simple ruby wrapper around the pdfinfo
|
89
|
+
summary: Simple ruby wrapper around the pdfinfo command line utility
|
90
90
|
test_files: []
|
@@ -1,19 +0,0 @@
|
|
1
|
-
class Pdfinfo
|
2
|
-
module ObjectToHash
|
3
|
-
def as_json
|
4
|
-
instance_variables.inject({}) do |hash, var|
|
5
|
-
val = instance_variable_get(var)
|
6
|
-
hash[var[1..-1].to_sym] = (val.respond_to?(:as_json) ? val.as_json : val)
|
7
|
-
hash
|
8
|
-
end
|
9
|
-
end
|
10
|
-
alias to_hash as_json
|
11
|
-
alias to_h as_json
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Array
|
16
|
-
def as_json
|
17
|
-
map {|v| v.respond_to?(:as_json) ? v.as_json : v }
|
18
|
-
end unless method_defined?(:as_json)
|
19
|
-
end
|