preflight 0.2.0 → 0.3.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b7ddc412afff34baf55fd47a7ddbadc740a660df
4
+ data.tar.gz: 115e731783daf82fa25e25fc389e3214883ad904
5
+ SHA512:
6
+ metadata.gz: 7ff7e7d27c1b12b2a643b11b08cbcedc8fbc6ba4886301201f4b418c2bd0244d14cf4d3dd258f373d55cb9d5af54e12961ee54ae62f3104a6193e01f7e94e8ad
7
+ data.tar.gz: 1e1d33db176f3d6addb711cb9bbbef2a2e16f25c481ee045b3eb5ff4e97f32d3e54ef9b5094b6e317e3447a2cd0c50745edb53d868cc6c01cfc255af04f4ab46
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ v0.3.0 (28th April 2013)
2
+ - new rules
3
+ - improved the behaviour of some rules
4
+ - stopped rule arguments that are mutated from affected later profile checks
5
+
1
6
  v0.2.0 (25th March 2012)
2
7
  - BREAKING API CHANGES FROM 0.1.1 release
3
8
  - Detected issues are reported with an Issue object instead of a simple string
@@ -121,3 +121,4 @@ This is pure ruby should run on most ruby VMs. I develop on MRI 1.9.2.
121
121
  * http://www.planetpdf.com/planetpdf/pdfs/pdfx3_draft4.pdf
122
122
  * http://www.gwg.org/doc_pdfxfaq.phtml
123
123
  * http://www.pdfxreport.com/lib/exe/fetch.php?id=en%3Adownloads&cache=cache&media=en:technote_pdfx_checks.pdf
124
+ * http://shop.oreilly.com/product/0636920025269.do
@@ -1,5 +1,6 @@
1
1
  # coding: utf-8
2
2
 
3
+
3
4
  module Preflight
4
5
 
5
6
  # base functionality for all profiles.
@@ -20,12 +21,12 @@ module Preflight
20
21
 
21
22
  def import(profile)
22
23
  profile.rules.each do |array|
23
- rules << array.flatten
24
+ rules << array
24
25
  end
25
26
  end
26
27
 
27
28
  def rule(*args)
28
- rules << args.flatten
29
+ rules << args
29
30
  end
30
31
 
31
32
  def rules
@@ -48,7 +49,7 @@ module Preflight
48
49
  end
49
50
 
50
51
  def rule(*args)
51
- instance_rules << args.flatten
52
+ instance_rules << args
52
53
  end
53
54
 
54
55
  private
@@ -116,7 +117,7 @@ module Preflight
116
117
  arr.first.instance_methods.map(&:to_sym).include?(:check_hash)
117
118
  }.map { |arr|
118
119
  klass = arr[0]
119
- klass.new(*arr[1,10])
120
+ klass.new(*deep_clone(arr[1,10]))
120
121
  }
121
122
  end
122
123
 
@@ -125,9 +126,16 @@ module Preflight
125
126
  arr.first.instance_methods.map(&:to_sym).include?(:issues)
126
127
  }.map { |arr|
127
128
  klass = arr[0]
128
- klass.new(*arr[1,10])
129
+ klass.new(*deep_clone(arr[1,10]))
129
130
  }
130
131
  end
132
+
133
+ # round trip and object through marshall as a hacky but effective
134
+ # way to deep clone the object. Used to ensure rules that mutate
135
+ # their arguments don't impact later profile checks.
136
+ def deep_clone(obj)
137
+ Marshal.load Marshal.dump(obj)
138
+ end
131
139
  end
132
140
  end
133
141
  end
@@ -1,4 +1,5 @@
1
1
  require 'preflight/rules/box_nesting'
2
+ require 'preflight/rules/box_presence'
2
3
  require 'preflight/rules/compression_algorithms'
3
4
  require 'preflight/rules/consistent_boxes'
4
5
  require 'preflight/rules/cropbox_matches_mediabox'
@@ -12,6 +13,7 @@ require 'preflight/rules/mediabox_at_origin'
12
13
  require 'preflight/rules/min_bleed'
13
14
  require 'preflight/rules/min_ppi'
14
15
  require 'preflight/rules/no_cmyk'
16
+ require 'preflight/rules/no_devicen'
15
17
  require 'preflight/rules/no_filespecs'
16
18
  require 'preflight/rules/no_font_subsets'
17
19
  require 'preflight/rules/no_gray'
@@ -0,0 +1,50 @@
1
+ # coding: utf-8
2
+
3
+ module Preflight
4
+ module Rules
5
+
6
+ # Specify the presence of page boxes
7
+ #
8
+ # Arguments: hash containing :any or :all key with an array value of box
9
+ # names as symbols
10
+ #
11
+ # Usage:
12
+ #
13
+ # class MyPreflight
14
+ # include Preflight::Profile
15
+ #
16
+ # rule Preflight::Rules::BoxPresence, :any => [:MediaBox, :CropBox]
17
+ # rule Preflight::Rules::BoxPresence, :all => [:MediaBox, :CropBox]
18
+ # end
19
+ #
20
+ class BoxPresence
21
+
22
+ attr_reader :issues
23
+
24
+ def initialize(options)
25
+ if options[:any].nil? && options[:all].nil?
26
+ raise "Preflight::Rules::BoxPresence requires :any or :all option"
27
+ elsif options[:any] && options[:all]
28
+ raise "Preflight::Rules::BoxPresence requires only one of :any or :all option"
29
+ end
30
+
31
+ @options = options
32
+ end
33
+
34
+ def page=(page)
35
+ dict = page.attributes
36
+
37
+ present_boxes = dict.keys & [:MediaBox, :CropBox, :TrimBox, :ArtBox]
38
+
39
+ if @options[:any] && !@options[:any].any? { |b| present_boxes.include?(b) }
40
+ @issues = [Issue.new("page must have any of #{@options[:any].join(", ")}", self, :page => page.number)]
41
+ elsif @options[:all] && !@options[:all].all? { |b| present_boxes.include?(b) }
42
+ @issues = [Issue.new("page must have all of #{@options[:all].join(", ")}", self, :page => page.number)]
43
+ else
44
+ @issues = []
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+
@@ -17,14 +17,15 @@ module Preflight
17
17
  #
18
18
  class ConsistentBoxes
19
19
 
20
- # each page box MUST be within .03 PDF points of the same box
21
- # on all other pages
22
- TOLERANCE = (BigDecimal.new("-0.03")..BigDecimal.new("0.03"))
20
+ # Default tolerance is that each page box MUST be within .03 PDF points
21
+ # of the same box on all other pages
22
+ DEFAULT_TOLERANCE = (BigDecimal.new("-0.03")..BigDecimal.new("0.03"))
23
23
 
24
24
  attr_reader :issues
25
25
 
26
- def initialize
26
+ def initialize(tolerance = DEFAULT_TOLERANCE)
27
27
  @boxes = {}
28
+ @tolerance = tolerance
28
29
  end
29
30
 
30
31
  def page=(page)
@@ -38,7 +39,7 @@ module Preflight
38
39
  @boxes[:ArtBox] ||= dict[:ArtBox]
39
40
 
40
41
  %w(MediaBox CropBox BleedBox TrimBox ArtBox).map(&:to_sym).each do |box_type|
41
- unless subtract_all(@boxes[box_type], dict[box_type]).all? { |diff| TOLERANCE.include?(diff) }
42
+ unless subtract_all(@boxes[box_type], dict[box_type]).all? { |diff| @tolerance.include?(diff) }
42
43
  @issues << Issue.new("#{box_type} must be consistent across every page", self, :page => page.number,
43
44
  :inconsistent_box => box_type)
44
45
  end
@@ -68,20 +68,24 @@ module Preflight
68
68
 
69
69
  private
70
70
 
71
- def color_space_is_cmyk?(cs)
72
- case cs
73
- when Symbol then cs == :DeviceCMYK
74
- when Array then
75
- cs[0] == :DeviceCMYK || cs[2] == :DeviceCMYK
76
- else
77
- false
78
- end
71
+ def plain_cmyk?(cs)
72
+ cs == :DeviceCMYK || cs == [:DeviceCMYK]
73
+ end
74
+
75
+ def indexed_cmyk?(cs)
76
+ cs.is_a?(Array) && cs[0] == :Indexed && cs[1] == :DeviceCMYK
77
+ end
78
+
79
+ def alternative_is_cmyk?(cs)
80
+ cs.is_a?(Array) && cs[0] == :Separation && cs[2] == :DeviceCMYK
79
81
  end
80
82
 
81
83
  def check_color_space(label)
82
84
  return if @resource_labels_seen.include?(label)
83
85
 
84
- if color_space_is_cmyk?(@state.find_color_space(label))
86
+ cs = @state.find_color_space(label)
87
+
88
+ if plain_cmyk?(cs) || indexed_cmyk?(cs) || alternative_is_cmyk?(cs)
85
89
  @issues << Issue.new("CMYK color detected", self, :page => @page.number)
86
90
  end
87
91
 
@@ -90,7 +94,7 @@ module Preflight
90
94
 
91
95
  def check_xobject(xobject)
92
96
  cs = xobject.hash[:ColorSpace]
93
- if cs == :DeviceCMYK
97
+ if plain_cmyk?(cs) || indexed_cmyk?(cs) || alternative_is_cmyk?(cs)
94
98
  @issues << Issue.new("CMYK image detected", self, :page => @page.number)
95
99
  end
96
100
  end
@@ -0,0 +1,106 @@
1
+ # coding: utf-8
2
+
3
+ require 'forwardable'
4
+
5
+ module Preflight
6
+ module Rules
7
+
8
+ # Some print workflows forbid the use of DeviceN colours (one or
9
+ # more spot colours).
10
+ #
11
+ # Arguments: none
12
+ #
13
+ # Usage:
14
+ #
15
+ # class MyPreflight
16
+ # include Preflight::Profile
17
+ #
18
+ # rule Preflight::Rules::NoDevicen
19
+ # end
20
+ #
21
+ class NoDevicen
22
+ extend Forwardable
23
+
24
+ # Graphics State Operators
25
+ def_delegators :@state, :save_graphics_state, :restore_graphics_state
26
+
27
+ # Matrix Operators
28
+ def_delegators :@state, :concatenate_matrix
29
+
30
+ attr_reader :issues
31
+
32
+ # we're about to start a new page, reset state
33
+ #
34
+ def page=(page)
35
+ @page = page
36
+ @state = PDF::Reader::PageState.new(page)
37
+ @issues = []
38
+ @resource_labels_seen = []
39
+ end
40
+
41
+ # descend into nested form xobjects
42
+ #
43
+ def invoke_xobject(label)
44
+ @state.invoke_xobject(label) do |xobj|
45
+ case xobj
46
+ when PDF::Reader::FormXObject then
47
+ xobj.walk(self)
48
+ when PDF::Reader::Stream then
49
+ check_xobject(xobj)
50
+ end
51
+ end
52
+ end
53
+
54
+ def set_stroke_color_space(label)
55
+ check_color_space(label)
56
+ end
57
+
58
+ def set_nonstroke_color_space(label)
59
+ check_color_space(label)
60
+ end
61
+
62
+ private
63
+
64
+ def plain_devicen_names(cs)
65
+ if cs.is_a?(Array) && cs[0] == :DeviceN
66
+ @page.objects.deref(cs[1])
67
+ end
68
+ end
69
+
70
+ def indexed_devicen_names(cs)
71
+ if cs.is_a?(Array) && cs[0] == :Indexed
72
+ indexed_base = @page.objects.deref(cs[1])
73
+ if indexed_base.is_a?(Array) && indexed_base[0] == :DeviceN
74
+ @page.objects.deref(indexed_base[1])
75
+ end
76
+ end
77
+ end
78
+
79
+ def check_color_space(label)
80
+ return if @resource_labels_seen.include?(label)
81
+
82
+ cs = @state.find_color_space(label)
83
+ spot_names = plain_devicen_names(cs)
84
+ spot_names ||= indexed_devicen_names(cs)
85
+ if spot_names
86
+ @issues << Issue.new("DeviceN color detected", self, :page => @page.number,
87
+ :names => spot_names)
88
+ end
89
+
90
+ @resource_labels_seen << label
91
+ end
92
+
93
+ def check_xobject(xobject)
94
+ cs = xobject.hash[:ColorSpace]
95
+ spot_names = plain_devicen_names(cs)
96
+ spot_names ||= indexed_devicen_names(cs)
97
+ if spot_names
98
+ @issues << Issue.new("DeviceN image detected", self, :page => @page.number,
99
+ :names => spot_names)
100
+ end
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+ end
@@ -68,20 +68,24 @@ module Preflight
68
68
 
69
69
  private
70
70
 
71
- def color_space_is_gray?(cs)
72
- case cs
73
- when Symbol then cs == :DeviceGray
74
- when Array then
75
- cs[0] == :DeviceGray || cs[2] == :DeviceGray
76
- else
77
- false
78
- end
71
+ def plain_gray?(cs)
72
+ cs == :DeviceGray || cs == [:DeviceGray]
73
+ end
74
+
75
+ def indexed_gray?(cs)
76
+ cs.is_a?(Array) && cs[0] == :Indexed && cs[1] == :DeviceGray
77
+ end
78
+
79
+ def alternative_is_gray?(cs)
80
+ cs.is_a?(Array) && cs[0] == :Separation && cs[2] == :DeviceGray
79
81
  end
80
82
 
81
83
  def check_color_space(label)
82
84
  return if @resource_labels_seen.include?(label)
83
85
 
84
- if color_space_is_gray?(@state.find_color_space(label))
86
+ cs = @state.find_color_space(label)
87
+
88
+ if plain_gray?(cs) || indexed_gray?(cs) || alternative_is_gray?(cs)
85
89
  @issues << Issue.new("Gray color detected", self, :page => @page.number)
86
90
  end
87
91
 
@@ -90,7 +94,7 @@ module Preflight
90
94
 
91
95
  def check_xobject(xobject)
92
96
  cs = xobject.hash[:ColorSpace]
93
- if cs == :DeviceGray
97
+ if plain_gray?(cs) || indexed_gray?(cs) || alternative_is_gray?(cs)
94
98
  @issues << Issue.new("Gray image detected", self, :page => @page.number)
95
99
  end
96
100
  end
@@ -25,12 +25,13 @@ module Preflight
25
25
  def page=(page)
26
26
  attrs = page.attributes
27
27
 
28
- if attrs[:Rotate] && attrs[:Rotate] != 0
28
+ if attrs[:Rotate] && page.objects.deref(attrs[:Rotate]) != 0
29
29
  @issues = [Issue.new("Page is rotated", self, :page => page.number)]
30
30
  else
31
31
  @issues = []
32
32
  end
33
33
  end
34
+
34
35
  end
35
36
  end
36
37
  end
@@ -68,20 +68,24 @@ module Preflight
68
68
 
69
69
  private
70
70
 
71
- def color_space_is_rgb?(cs)
72
- case cs
73
- when Symbol then cs == :DeviceRGB
74
- when Array then
75
- cs[2] == :DeviceRGB
76
- else
77
- false
78
- end
71
+ def plain_rgb?(cs)
72
+ cs == :DeviceRGB || cs == [:DeviceRGB]
73
+ end
74
+
75
+ def indexed_rgb?(cs)
76
+ cs.is_a?(Array) && cs[0] == :Indexed && cs[1] == :DeviceRGB
77
+ end
78
+
79
+ def alternative_is_rgb?(cs)
80
+ cs.is_a?(Array) && cs[0] == :Separation && cs[2] == :DeviceRGB
79
81
  end
80
82
 
81
83
  def check_color_space(label)
82
84
  return if @resource_labels_seen.include?(label)
83
85
 
84
- if color_space_is_rgb?(@state.find_color_space(label))
86
+ cs = @state.find_color_space(label)
87
+
88
+ if plain_rgb?(cs) || indexed_rgb?(cs) || alternative_is_rgb?(cs)
85
89
  @issues << Issue.new("RGB color detected", self, :page => @page.number)
86
90
  end
87
91
 
@@ -90,7 +94,7 @@ module Preflight
90
94
 
91
95
  def check_xobject(xobject)
92
96
  cs = xobject.hash[:ColorSpace]
93
- if cs == :DeviceRGB
97
+ if plain_rgb?(cs) || indexed_rgb?(cs) || alternative_is_rgb?(cs)
94
98
  @issues << Issue.new("RGB image detected", self, :page => @page.number)
95
99
  end
96
100
  end
@@ -45,6 +45,8 @@ module Preflight
45
45
  case xobj
46
46
  when PDF::Reader::FormXObject then
47
47
  xobj.walk(self)
48
+ when PDF::Reader::Stream then
49
+ check_xobject(xobj)
48
50
  end
49
51
  end
50
52
  end
@@ -59,18 +61,26 @@ module Preflight
59
61
 
60
62
  private
61
63
 
62
- def separation_name(cs)
64
+ def plain_separation_name(cs)
63
65
  if cs.is_a?(Array) && cs[0] == :Separation
64
66
  cs[1]
65
- else
66
- nil
67
+ end
68
+ end
69
+
70
+ def indexed_separation_name(cs)
71
+ if cs.is_a?(Array) && cs[0] == :Indexed
72
+ if cs[1].is_a?(Array) && cs[1][0] == :Separation
73
+ cs[1][1]
74
+ end
67
75
  end
68
76
  end
69
77
 
70
78
  def check_color_space(label)
71
79
  return if @resource_labels_seen.include?(label)
72
80
 
73
- spot_name = separation_name(@state.find_color_space(label))
81
+ cs = @state.find_color_space(label)
82
+ spot_name = plain_separation_name(cs)
83
+ spot_name ||= indexed_separation_name(cs)
74
84
  if spot_name
75
85
  @issues << Issue.new("Separation color detected #{spot_name}", self, :page => @page.number,
76
86
  :name => spot_name)
@@ -79,6 +89,16 @@ module Preflight
79
89
  @resource_labels_seen << label
80
90
  end
81
91
 
92
+ def check_xobject(xobject)
93
+ cs = xobject.hash[:ColorSpace]
94
+ spot_name = plain_separation_name(cs)
95
+ spot_name ||= indexed_separation_name(cs)
96
+ if spot_name
97
+ @issues << Issue.new("Separation image detected", self, :page => @page.number,
98
+ :name => spot_name)
99
+ end
100
+ end
101
+
82
102
  end
83
103
 
84
104
  end
metadata CHANGED
@@ -1,71 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: preflight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - James Healy
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-03-25 00:00:00.000000000 Z
11
+ date: 2013-04-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pdf-reader
16
- requirement: &19765840 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.1.0
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *19765840
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.0
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: rake
27
- requirement: &19764920 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>='
31
+ - - '>='
31
32
  - !ruby/object:Gem::Version
32
33
  version: '0'
33
34
  type: :development
34
35
  prerelease: false
35
- version_requirements: *19764920
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: roodi
38
- requirement: &19763500 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - '>='
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :development
45
49
  prerelease: false
46
- version_requirements: *19763500
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: rspec
49
- requirement: &19762780 !ruby/object:Gem::Requirement
50
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: '2.3'
55
62
  type: :development
56
63
  prerelease: false
57
- version_requirements: *19762780
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '2.3'
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: ZenTest
60
- requirement: &19762260 !ruby/object:Gem::Requirement
61
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
62
72
  requirements:
63
73
  - - ~>
64
74
  - !ruby/object:Gem::Version
65
75
  version: 4.4.2
66
76
  type: :development
67
77
  prerelease: false
68
- version_requirements: *19762260
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 4.4.2
69
83
  description: Provides a programatic way to check a PDF file conforms to standards
70
84
  like PDF-X/1a
71
85
  email:
@@ -77,49 +91,52 @@ extra_rdoc_files: []
77
91
  files:
78
92
  - lib/preflight.rb
79
93
  - lib/preflight/profile.rb
80
- - lib/preflight/profiles.rb
94
+ - lib/preflight/rules.rb
95
+ - lib/preflight/rules/page_box_size.rb
96
+ - lib/preflight/rules/page_count.rb
97
+ - lib/preflight/rules/no_cmyk.rb
81
98
  - lib/preflight/rules/no_separation.rb
82
- - lib/preflight/rules/no_private_data.rb
83
- - lib/preflight/rules/print_boxes.rb
84
- - lib/preflight/rules/info_specifies_trapping.rb
85
- - lib/preflight/rules/match_info_entries.rb
99
+ - lib/preflight/rules/info_has_keys.rb
100
+ - lib/preflight/rules/document_id.rb
101
+ - lib/preflight/rules/no_registration_black.rb
86
102
  - lib/preflight/rules/box_nesting.rb
87
- - lib/preflight/rules/output_intent_for_pdfx.rb
88
- - lib/preflight/rules/page_box_size.rb
89
- - lib/preflight/rules/max_ink_density.rb
103
+ - lib/preflight/rules/max_version.rb
90
104
  - 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
105
  - lib/preflight/rules/no_rgb.rb
106
+ - lib/preflight/rules/pdfx_output_intent_has_keys.rb
94
107
  - 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
108
+ - lib/preflight/rules/no_devicen.rb
99
109
  - lib/preflight/rules/no_gray.rb
100
- - lib/preflight/rules/document_id.rb
101
- - lib/preflight/rules/max_version.rb
102
- - lib/preflight/rules/only_embedded_fonts.rb
110
+ - lib/preflight/rules/no_filespecs.rb
111
+ - lib/preflight/rules/max_ink_density.rb
112
+ - lib/preflight/rules/box_presence.rb
113
+ - lib/preflight/rules/print_boxes.rb
114
+ - lib/preflight/rules/no_transparency.rb
115
+ - lib/preflight/rules/no_page_rotation.rb
103
116
  - lib/preflight/rules/no_font_subsets.rb
104
- - lib/preflight/rules/compression_algorithms.rb
105
- - lib/preflight/rules/mediabox_at_origin.rb
106
117
  - 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
118
+ - lib/preflight/rules/info_specifies_trapping.rb
119
+ - lib/preflight/rules/output_intent_for_pdfx.rb
120
+ - lib/preflight/rules/mediabox_at_origin.rb
121
+ - lib/preflight/rules/match_info_entries.rb
122
+ - lib/preflight/rules/no_private_data.rb
112
123
  - lib/preflight/rules/consistent_boxes.rb
113
- - lib/preflight/profiles/pdfa1a.rb
114
- - lib/preflight/profiles/pdfx1a.rb
115
- - lib/preflight/rules.rb
124
+ - lib/preflight/rules/only_embedded_fonts.rb
125
+ - lib/preflight/rules/min_bleed.rb
126
+ - lib/preflight/rules/compression_algorithms.rb
127
+ - lib/preflight/rules/min_ppi.rb
128
+ - lib/preflight/rules/root_has_keys.rb
116
129
  - lib/preflight/measurements.rb
117
130
  - lib/preflight/issue.rb
131
+ - lib/preflight/profiles.rb
132
+ - lib/preflight/profiles/pdfa1a.rb
133
+ - lib/preflight/profiles/pdfx1a.rb
118
134
  - bin/is_pdfx_1a
119
135
  - README.rdoc
120
136
  - CHANGELOG
121
137
  homepage: http://github.com/yob/pdf-preflight
122
138
  licenses: []
139
+ metadata: {}
123
140
  post_install_message:
124
141
  rdoc_options:
125
142
  - --title
@@ -128,21 +145,19 @@ rdoc_options:
128
145
  require_paths:
129
146
  - lib
130
147
  required_ruby_version: !ruby/object:Gem::Requirement
131
- none: false
132
148
  requirements:
133
- - - ! '>='
149
+ - - '>='
134
150
  - !ruby/object:Gem::Version
135
151
  version: 1.8.7
136
152
  required_rubygems_version: !ruby/object:Gem::Requirement
137
- none: false
138
153
  requirements:
139
- - - ! '>='
154
+ - - '>='
140
155
  - !ruby/object:Gem::Version
141
156
  version: 1.3.2
142
157
  requirements: []
143
158
  rubyforge_project:
144
- rubygems_version: 1.8.11
159
+ rubygems_version: 2.0.0
145
160
  signing_key:
146
- specification_version: 3
161
+ specification_version: 4
147
162
  summary: Check PDF files conform to various standards
148
163
  test_files: []