preflight 0.1.1 → 0.2.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.
- data/CHANGELOG +8 -1
- data/README.rdoc +21 -4
- data/lib/preflight.rb +1 -0
- data/lib/preflight/issue.rb +35 -0
- data/lib/preflight/profile.rb +38 -16
- data/lib/preflight/profiles/pdfa1a.rb +0 -1
- data/lib/preflight/profiles/pdfx1a.rb +4 -3
- data/lib/preflight/rules.rb +17 -2
- data/lib/preflight/rules/box_nesting.rb +35 -23
- data/lib/preflight/rules/compression_algorithms.rb +14 -4
- data/lib/preflight/rules/consistent_boxes.rb +63 -0
- data/lib/preflight/rules/cropbox_matches_mediabox.rb +38 -0
- data/lib/preflight/rules/document_id.rb +14 -2
- data/lib/preflight/rules/info_has_keys.rb +15 -3
- data/lib/preflight/rules/info_specifies_trapping.rb +16 -3
- data/lib/preflight/rules/match_info_entries.rb +17 -3
- data/lib/preflight/rules/max_ink_density.rb +69 -0
- data/lib/preflight/rules/max_version.rb +14 -2
- data/lib/preflight/rules/mediabox_at_origin.rb +42 -0
- data/lib/preflight/rules/min_bleed.rb +171 -0
- data/lib/preflight/rules/min_ppi.rb +54 -116
- data/lib/preflight/rules/no_cmyk.rb +113 -0
- data/lib/preflight/rules/no_filespecs.rb +15 -5
- data/lib/preflight/rules/no_font_subsets.rb +15 -6
- data/lib/preflight/rules/no_gray.rb +105 -0
- data/lib/preflight/rules/no_page_rotation.rb +36 -0
- data/lib/preflight/rules/no_private_data.rb +37 -0
- data/lib/preflight/rules/no_registration_black.rb +102 -0
- data/lib/preflight/rules/no_rgb.rb +112 -0
- data/lib/preflight/rules/no_separation.rb +85 -0
- data/lib/preflight/rules/no_transparency.rb +90 -0
- data/lib/preflight/rules/only_embedded_fonts.rb +28 -14
- data/lib/preflight/rules/output_intent_for_pdfx.rb +14 -2
- data/lib/preflight/rules/page_box_height.rb +88 -0
- data/lib/preflight/rules/page_box_size.rb +106 -0
- data/lib/preflight/rules/page_box_width.rb +88 -0
- data/lib/preflight/rules/page_count.rb +87 -0
- data/lib/preflight/rules/pdfx_output_intent_has_keys.rb +12 -2
- data/lib/preflight/rules/print_boxes.rb +21 -19
- data/lib/preflight/rules/root_has_keys.rb +15 -3
- metadata +97 -113
- data/lib/preflight/rules/no_encryption.rb +0 -16
- data/lib/preflight/rules/no_proprietary_fonts.rb +0 -50
@@ -0,0 +1,106 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Preflight
|
4
|
+
module Rules
|
5
|
+
|
6
|
+
# Ensure that the requests page box (MediaBox, TrimBox, etc) on every page
|
7
|
+
# has the requested size. Dimensions can be in points, mm or inches. Skips
|
8
|
+
# the page if the requested box isn't defined, it's up to other rules to
|
9
|
+
# check for the existence of the box. Pass an array of sizes to allow each
|
10
|
+
# of those sizes.
|
11
|
+
#
|
12
|
+
# Usage:
|
13
|
+
#
|
14
|
+
# class MyPreflight
|
15
|
+
# include Preflight::Profile
|
16
|
+
#
|
17
|
+
# rule Preflight::Rules::PageBoxSize, :MediaBox, [
|
18
|
+
# { :width => 100, :height => 200, :units => :mm },
|
19
|
+
# { :width => 200, :height => 400, :units => :mm }
|
20
|
+
# ]
|
21
|
+
# rule Preflight::Rules::PageBoxSize, :TrimBox,
|
22
|
+
# { :width => 600, :height => 200, :units => :pts }
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
class PageBoxSize
|
26
|
+
include Preflight::Measurements
|
27
|
+
|
28
|
+
attr_reader :issues
|
29
|
+
|
30
|
+
def initialize(box, sizes)
|
31
|
+
@box, @units = box
|
32
|
+
sizes = [sizes] if sizes.kind_of?(Hash)
|
33
|
+
@orig_sizes = sizes
|
34
|
+
|
35
|
+
@sizes = sizes.map do |size|
|
36
|
+
size[:width] = length_to_points(size[:width], size[:units])
|
37
|
+
size[:height] = length_to_points(size[:height], size[:units])
|
38
|
+
size
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def page=(page)
|
43
|
+
@issues = []
|
44
|
+
dict = page.attributes
|
45
|
+
|
46
|
+
if dict[@box]
|
47
|
+
box_width = dict[@box][2] - dict[@box][0]
|
48
|
+
box_height = dict[@box][3] - dict[@box][1]
|
49
|
+
|
50
|
+
invalid_size = @sizes.none? do |size|
|
51
|
+
size[:width].include?(box_width) &&
|
52
|
+
size[:height].include?(box_height)
|
53
|
+
end
|
54
|
+
|
55
|
+
if invalid_size
|
56
|
+
@issues << Issue.new("#{@box} size didn't match provided size",
|
57
|
+
self,
|
58
|
+
:page => page.number,
|
59
|
+
:box => @box,
|
60
|
+
:box_height => box_height,
|
61
|
+
:box_width => box_width)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def length_to_points(length, units)
|
69
|
+
case units
|
70
|
+
when :mm then mm_to_points(length)
|
71
|
+
when :in then inches_to_points(length)
|
72
|
+
else
|
73
|
+
points_to_points(length)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def inches_to_points(height)
|
78
|
+
case height
|
79
|
+
when Numeric then Range.new(in2pt(height)-1, in2pt(height)+1)
|
80
|
+
when Range then Range.new(in2pt(height.min), in2pt(height.max))
|
81
|
+
else
|
82
|
+
raise ArgumentError, "height must be a Numeric or Range object"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def mm_to_points(height)
|
87
|
+
case height
|
88
|
+
when Numeric then Range.new(mm2pt(height)-1, mm2pt(height)+1)
|
89
|
+
when Range then Range.new(mm2pt(height.min), mm2pt(height.max))
|
90
|
+
else
|
91
|
+
raise ArgumentError, "height must be a Numeric or Range object"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def points_to_points(height)
|
96
|
+
case height
|
97
|
+
when Numeric then Range.new(height, height)
|
98
|
+
when Range then height
|
99
|
+
else
|
100
|
+
raise ArgumentError, "height must be a Numeric or Range object"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Preflight
|
4
|
+
module Rules
|
5
|
+
|
6
|
+
# Ensure the requested page box (MediaBox, TrimBox, etc) on every page has
|
7
|
+
# the requested width. Dimensions can be in points, mm or inches. Skips
|
8
|
+
# the page if the requested box isn't defined, it's up to other rules to
|
9
|
+
# check for the existence of the box.
|
10
|
+
#
|
11
|
+
# Arguments: the target page box, the target height and the the units
|
12
|
+
#
|
13
|
+
# Usage:
|
14
|
+
#
|
15
|
+
# class MyPreflight
|
16
|
+
# include Preflight::Profile
|
17
|
+
#
|
18
|
+
# rule Preflight::Rules::PageBoxHeight, :MediaBox, 100, :mm
|
19
|
+
# rule Preflight::Rules::PageBoxHeight, :TrimBox, 600, :pts
|
20
|
+
# rule Preflight::Rules::PageBoxHeight, :CropBox, 5, :in
|
21
|
+
# rule Preflight::Rules::PageBoxHeight, :MediaBox, 100..101, :mm
|
22
|
+
# rule Preflight::Rules::PageBoxHeight, :TrimBox, 600..700, :pts
|
23
|
+
# rule Preflight::Rules::PageBoxHeight, :CropBox, 5..6, :in
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
class PageBoxWidth
|
27
|
+
include Preflight::Measurements
|
28
|
+
|
29
|
+
attr_reader :issues
|
30
|
+
|
31
|
+
def initialize(box, width, units)
|
32
|
+
@box, @units = box, units
|
33
|
+
@orig_width = width
|
34
|
+
@width = case units
|
35
|
+
when :mm then mm_to_points(width)
|
36
|
+
when :in then inches_to_points(width)
|
37
|
+
else
|
38
|
+
points_to_points(width)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def page=(page)
|
43
|
+
@issues = []
|
44
|
+
dict = page.attributes
|
45
|
+
|
46
|
+
if dict[@box]
|
47
|
+
box_width = dict[@box][2] - dict[@box][0]
|
48
|
+
|
49
|
+
if !@width.include?(box_width)
|
50
|
+
@issues << Issue.new("#{@box} width must be #{@orig_width}#{@units}", self, :page => page.number,
|
51
|
+
:box => @box,
|
52
|
+
:width => @orig_width,
|
53
|
+
:units => @units)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def inches_to_points(width)
|
61
|
+
case width
|
62
|
+
when Numeric then Range.new(in2pt(width)-1, in2pt(width)+1)
|
63
|
+
when Range then Range.new(in2pt(width.min), in2pt(width.max))
|
64
|
+
else
|
65
|
+
raise ArgumentError, "width must be a Numeric or Range object"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def mm_to_points(width)
|
70
|
+
case width
|
71
|
+
when Numeric then Range.new(mm2pt(width)-1, mm2pt(width)+1)
|
72
|
+
when Range then Range.new(mm2pt(width.min), mm2pt(width.max))
|
73
|
+
else
|
74
|
+
raise ArgumentError, "width must be a Numeric or Range object"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def points_to_points(width)
|
79
|
+
case width
|
80
|
+
when Numeric then Range.new(width, width)
|
81
|
+
when Range then width
|
82
|
+
else
|
83
|
+
raise ArgumentError, "width must be a Numeric or Range object"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
module Preflight
|
4
|
+
module Rules
|
5
|
+
|
6
|
+
# Ensure the page count matches certain criteria.
|
7
|
+
#
|
8
|
+
# Arguments: An integer, range, :even or :odd
|
9
|
+
#
|
10
|
+
# Usage:
|
11
|
+
#
|
12
|
+
# class MyPreflight
|
13
|
+
# include Preflight::Profile
|
14
|
+
#
|
15
|
+
# rule Preflight::Rules::PageCount, 1
|
16
|
+
# rule Preflight::Rules::PageCount, 1..2
|
17
|
+
# rule Preflight::Rules::PageCount, [4, 8]
|
18
|
+
# rule Preflight::Rules::PageCount, :even
|
19
|
+
# rule Preflight::Rules::PageCount, :odd
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
class PageCount
|
23
|
+
|
24
|
+
def initialize(pattern)
|
25
|
+
@pattern = pattern
|
26
|
+
end
|
27
|
+
|
28
|
+
def check_hash(objects)
|
29
|
+
root = objects.deref(objects.trailer[:Root])
|
30
|
+
pages = objects.deref(root[:Pages])
|
31
|
+
count = objects.deref(pages[:Count])
|
32
|
+
|
33
|
+
case @pattern
|
34
|
+
when Fixnum then check_numeric(count)
|
35
|
+
when Range then check_range(count)
|
36
|
+
when Array then check_array(count)
|
37
|
+
when :even then check_even(count)
|
38
|
+
when :odd then check_odd(count)
|
39
|
+
else
|
40
|
+
[Issue.new("PageCount: invalid pattern", self)]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def check_numeric(count)
|
47
|
+
if count != @pattern
|
48
|
+
[Issue.new("Page count must equal #{@pattern}", self, :pattern => :invalid, :count => count)]
|
49
|
+
else
|
50
|
+
[]
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def check_range(count)
|
55
|
+
if !@pattern.include?(count)
|
56
|
+
[Issue.new("Page count must be between #{@pattern.min} and #{@pattern.max}", self, :pattern => @pattern, :count => count)]
|
57
|
+
else
|
58
|
+
[]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def check_array(count)
|
63
|
+
if !@pattern.include?(count)
|
64
|
+
[Issue.new("Page count must be one of #{@pattern.join(', ')}", self, :pattern => @pattern, :count => count)]
|
65
|
+
else
|
66
|
+
[]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def check_even(count)
|
71
|
+
if count.odd?
|
72
|
+
[Issue.new("Page count must be an even number", self, :pattern => @pattern, :count => count)]
|
73
|
+
else
|
74
|
+
[]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def check_odd(count)
|
79
|
+
if count.even?
|
80
|
+
[Issue.new("Page count must be an odd number", self, :pattern => @pattern, :count => count)]
|
81
|
+
else
|
82
|
+
[]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -9,20 +9,30 @@ module Preflight
|
|
9
9
|
# This doesn't raise an error if there is no GTS_PDFX, that's another
|
10
10
|
# rules job.
|
11
11
|
#
|
12
|
+
# Arguments: none
|
13
|
+
#
|
14
|
+
# Usage:
|
15
|
+
#
|
16
|
+
# class MyPreflight
|
17
|
+
# include Preflight::Profile
|
18
|
+
#
|
19
|
+
# rule Preflight::Rules::PdfxOutputIntentHasKeys, :OutputConditionIdentifier, :Info
|
20
|
+
# end
|
21
|
+
#
|
12
22
|
class PdfxOutputIntentHasKeys
|
13
23
|
|
14
24
|
def initialize(*keys)
|
15
25
|
@keys = keys.flatten
|
16
26
|
end
|
17
27
|
|
18
|
-
def
|
28
|
+
def check_hash(ohash)
|
19
29
|
oi = pdfx_output_intent(ohash)
|
20
30
|
|
21
31
|
return [] if oi.nil?
|
22
32
|
|
23
33
|
missing = @keys - oi.keys
|
24
34
|
missing.map { |key|
|
25
|
-
"The GTS_PDFX OutputIntent missing
|
35
|
+
Issue.new("The GTS_PDFX OutputIntent missing required key #{key}", self, :key => key)
|
26
36
|
}
|
27
37
|
end
|
28
38
|
|
@@ -6,29 +6,31 @@ module Preflight
|
|
6
6
|
# For PDFX/1a, every page must have MediaBox, plus either ArtBox or
|
7
7
|
# TrimBox
|
8
8
|
#
|
9
|
+
# Arguments: none
|
10
|
+
#
|
11
|
+
# Usage:
|
12
|
+
#
|
13
|
+
# class MyPreflight
|
14
|
+
# include Preflight::Profile
|
15
|
+
#
|
16
|
+
# rule Preflight::Rules::PrintBoxes
|
17
|
+
# end
|
18
|
+
#
|
9
19
|
class PrintBoxes
|
10
|
-
attr_reader :messages
|
11
20
|
|
12
|
-
|
13
|
-
@messages = []
|
14
|
-
@page_num = 0
|
15
|
-
@parent = {}
|
16
|
-
end
|
17
|
-
|
18
|
-
def begin_page_container(hash = {})
|
19
|
-
@parent.merge!(hash)
|
20
|
-
end
|
21
|
+
attr_reader :issues
|
21
22
|
|
22
|
-
def
|
23
|
-
|
24
|
-
hash = @parent.merge(hash)
|
23
|
+
def page=(page)
|
24
|
+
dict = page.attributes
|
25
25
|
|
26
|
-
if
|
27
|
-
@
|
28
|
-
elsif
|
29
|
-
@
|
30
|
-
elsif
|
31
|
-
@
|
26
|
+
if dict[:MediaBox].nil?
|
27
|
+
@issues = [Issue.new("every page must have a MediaBox", self, :page => page.number)]
|
28
|
+
elsif dict[:ArtBox].nil? && dict[:TrimBox].nil?
|
29
|
+
@issues = [Issue.new("every page must have either an ArtBox or a TrimBox", self, :page => page.number)]
|
30
|
+
elsif dict[:ArtBox] && dict[:TrimBox]
|
31
|
+
@issues = [Issue.new("no page can have both ArtBox and TrimBox - TrimBox is preferred", self, :page => page.number)]
|
32
|
+
else
|
33
|
+
@issues = []
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
@@ -3,18 +3,30 @@
|
|
3
3
|
module Preflight
|
4
4
|
module Rules
|
5
5
|
|
6
|
-
#
|
6
|
+
# Every PDF has a 'Root' dictionary, check that the target file has
|
7
|
+
# certain keys in it's Root
|
8
|
+
#
|
9
|
+
# Arguments: the required keys
|
10
|
+
#
|
11
|
+
# Usage:
|
12
|
+
#
|
13
|
+
# class MyPreflight
|
14
|
+
# include Preflight::Profile
|
15
|
+
#
|
16
|
+
# rule Preflight::Rules::RootHasKeys, :OutputIntents
|
17
|
+
# end
|
18
|
+
#
|
7
19
|
class RootHasKeys
|
8
20
|
|
9
21
|
def initialize(*keys)
|
10
22
|
@keys = keys.flatten
|
11
23
|
end
|
12
24
|
|
13
|
-
def
|
25
|
+
def check_hash(ohash)
|
14
26
|
root = ohash.object(ohash.trailer[:Root])
|
15
27
|
missing = @keys - root.keys
|
16
28
|
missing.map { |key|
|
17
|
-
"Root dict missing required key #{key}"
|
29
|
+
Issue.new("Root dict missing required key #{key}", self, :key => key)
|
18
30
|
}
|
19
31
|
end
|
20
32
|
end
|
metadata
CHANGED
@@ -1,164 +1,148 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: preflight
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 1
|
9
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- James Healy
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-03-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: pdf-reader
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &19765840 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
- 10
|
31
|
-
- 0
|
32
|
-
version: 0.10.0
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.0
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: ttfunk
|
37
23
|
prerelease: false
|
38
|
-
|
39
|
-
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 1
|
45
|
-
- 0
|
46
|
-
- 1
|
47
|
-
version: 1.0.1
|
48
|
-
type: :runtime
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
24
|
+
version_requirements: *19765840
|
25
|
+
- !ruby/object:Gem::Dependency
|
51
26
|
name: rake
|
52
|
-
|
53
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
27
|
+
requirement: &19764920 !ruby/object:Gem::Requirement
|
54
28
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
- 0
|
60
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
61
33
|
type: :development
|
62
|
-
version_requirements: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
|
-
name: roodi
|
65
34
|
prerelease: false
|
66
|
-
|
35
|
+
version_requirements: *19764920
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: roodi
|
38
|
+
requirement: &19763500 !ruby/object:Gem::Requirement
|
67
39
|
none: false
|
68
|
-
requirements:
|
69
|
-
- -
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
|
72
|
-
- 0
|
73
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
74
44
|
type: :development
|
75
|
-
|
76
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *19763500
|
47
|
+
- !ruby/object:Gem::Dependency
|
77
48
|
name: rspec
|
49
|
+
requirement: &19762780 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.3'
|
55
|
+
type: :development
|
78
56
|
prerelease: false
|
79
|
-
|
57
|
+
version_requirements: *19762780
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: ZenTest
|
60
|
+
requirement: &19762260 !ruby/object:Gem::Requirement
|
80
61
|
none: false
|
81
|
-
requirements:
|
62
|
+
requirements:
|
82
63
|
- - ~>
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
- 2
|
86
|
-
- 0
|
87
|
-
version: "2.0"
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 4.4.2
|
88
66
|
type: :development
|
89
|
-
|
90
|
-
|
91
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *19762260
|
69
|
+
description: Provides a programatic way to check a PDF file conforms to standards
|
70
|
+
like PDF-X/1a
|
71
|
+
email:
|
92
72
|
- james@yob.id.au
|
93
|
-
executables:
|
73
|
+
executables:
|
94
74
|
- is_pdfx_1a
|
95
75
|
extensions: []
|
96
|
-
|
97
76
|
extra_rdoc_files: []
|
98
|
-
|
99
|
-
|
100
|
-
- lib/preflight/profiles/pdfx1a.rb
|
101
|
-
- lib/preflight/profiles/pdfa1a.rb
|
77
|
+
files:
|
78
|
+
- lib/preflight.rb
|
102
79
|
- lib/preflight/profile.rb
|
103
|
-
- lib/preflight/
|
104
|
-
- lib/preflight/rules/
|
80
|
+
- lib/preflight/profiles.rb
|
81
|
+
- lib/preflight/rules/no_separation.rb
|
82
|
+
- lib/preflight/rules/no_private_data.rb
|
105
83
|
- lib/preflight/rules/print_boxes.rb
|
106
|
-
- lib/preflight/rules/no_filespecs.rb
|
107
84
|
- lib/preflight/rules/info_specifies_trapping.rb
|
108
|
-
- lib/preflight/rules/only_embedded_fonts.rb
|
109
|
-
- lib/preflight/rules/compression_algorithms.rb
|
110
|
-
- lib/preflight/rules/no_encryption.rb
|
111
|
-
- lib/preflight/rules/no_font_subsets.rb
|
112
85
|
- lib/preflight/rules/match_info_entries.rb
|
113
|
-
- lib/preflight/rules/
|
114
|
-
- lib/preflight/rules/no_proprietary_fonts.rb
|
115
|
-
- lib/preflight/rules/pdfx_output_intent_has_keys.rb
|
86
|
+
- lib/preflight/rules/box_nesting.rb
|
116
87
|
- lib/preflight/rules/output_intent_for_pdfx.rb
|
117
|
-
- lib/preflight/rules/
|
88
|
+
- lib/preflight/rules/page_box_size.rb
|
89
|
+
- lib/preflight/rules/max_ink_density.rb
|
90
|
+
- lib/preflight/rules/page_box_width.rb
|
91
|
+
- lib/preflight/rules/pdfx_output_intent_has_keys.rb
|
92
|
+
- lib/preflight/rules/min_bleed.rb
|
93
|
+
- lib/preflight/rules/no_rgb.rb
|
94
|
+
- lib/preflight/rules/page_box_height.rb
|
95
|
+
- lib/preflight/rules/no_cmyk.rb
|
96
|
+
- lib/preflight/rules/min_ppi.rb
|
97
|
+
- lib/preflight/rules/no_transparency.rb
|
98
|
+
- lib/preflight/rules/no_filespecs.rb
|
99
|
+
- lib/preflight/rules/no_gray.rb
|
118
100
|
- lib/preflight/rules/document_id.rb
|
119
|
-
- lib/preflight/rules/
|
120
|
-
- lib/preflight/
|
101
|
+
- lib/preflight/rules/max_version.rb
|
102
|
+
- lib/preflight/rules/only_embedded_fonts.rb
|
103
|
+
- lib/preflight/rules/no_font_subsets.rb
|
104
|
+
- lib/preflight/rules/compression_algorithms.rb
|
105
|
+
- lib/preflight/rules/mediabox_at_origin.rb
|
106
|
+
- lib/preflight/rules/cropbox_matches_mediabox.rb
|
107
|
+
- lib/preflight/rules/no_registration_black.rb
|
108
|
+
- lib/preflight/rules/info_has_keys.rb
|
109
|
+
- lib/preflight/rules/page_count.rb
|
110
|
+
- lib/preflight/rules/root_has_keys.rb
|
111
|
+
- lib/preflight/rules/no_page_rotation.rb
|
112
|
+
- lib/preflight/rules/consistent_boxes.rb
|
113
|
+
- lib/preflight/profiles/pdfa1a.rb
|
114
|
+
- lib/preflight/profiles/pdfx1a.rb
|
121
115
|
- lib/preflight/rules.rb
|
122
|
-
- lib/preflight/
|
123
|
-
- lib/preflight.rb
|
116
|
+
- lib/preflight/measurements.rb
|
117
|
+
- lib/preflight/issue.rb
|
124
118
|
- bin/is_pdfx_1a
|
125
119
|
- README.rdoc
|
126
120
|
- CHANGELOG
|
127
|
-
has_rdoc: true
|
128
121
|
homepage: http://github.com/yob/pdf-preflight
|
129
122
|
licenses: []
|
130
|
-
|
131
123
|
post_install_message:
|
132
|
-
rdoc_options:
|
124
|
+
rdoc_options:
|
133
125
|
- --title
|
134
126
|
- PDF::Preflight
|
135
127
|
- --line-numbers
|
136
|
-
require_paths:
|
128
|
+
require_paths:
|
137
129
|
- lib
|
138
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
139
131
|
none: false
|
140
|
-
requirements:
|
141
|
-
- -
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
|
144
|
-
|
145
|
-
version: "0"
|
146
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 1.8.7
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
137
|
none: false
|
148
|
-
requirements:
|
149
|
-
- -
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
segments:
|
152
|
-
- 1
|
153
|
-
- 3
|
154
|
-
- 2
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
155
141
|
version: 1.3.2
|
156
142
|
requirements: []
|
157
|
-
|
158
143
|
rubyforge_project:
|
159
|
-
rubygems_version: 1.
|
144
|
+
rubygems_version: 1.8.11
|
160
145
|
signing_key:
|
161
146
|
specification_version: 3
|
162
147
|
summary: Check PDF files conform to various standards
|
163
148
|
test_files: []
|
164
|
-
|