preflight 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|