pdf_margins 0.2.3 → 0.3.1
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 +4 -4
- data/lib/pdf/margins/checker.rb +28 -10
- data/lib/pdf/margins/version.rb +1 -1
- data/test/checker_test.rb +21 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f4e0cb5d988f4165e55240cce916d486f9316c3
|
4
|
+
data.tar.gz: 25460409951b86d6f51f5b91d61fd88edd3e1b82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d286a7d196b91486767fa831413a0704e65d40043e606c57f9609e1fe1b69817e5a6812cb4b8dd073ad4090517d5b359511972b5393762faafb0eaa48db8cb6d
|
7
|
+
data.tar.gz: b7ea7a4386a7ae7a58b1ee8651ebe80bde3e0e708d6d6308539383b58351e815b4ba287a10bad6d269b5e4d9b202958311491370fca4371fe4d745c9b5a5df21
|
data/lib/pdf/margins/checker.rb
CHANGED
@@ -3,6 +3,7 @@ require 'pdf/margins/errors'
|
|
3
3
|
require 'chunky_png'
|
4
4
|
require 'oily_png'
|
5
5
|
require 'tmpdir'
|
6
|
+
require 'logger'
|
6
7
|
|
7
8
|
module PDF
|
8
9
|
module Margins
|
@@ -15,21 +16,29 @@ module PDF
|
|
15
16
|
SCALE_MULTIPLIER = 1
|
16
17
|
RESOLUTION = DEFAULT_RESOLUTION * SCALE_MULTIPLIER
|
17
18
|
|
18
|
-
attr_reader :file_path, :
|
19
|
+
attr_reader :file_path, :logger
|
20
|
+
attr_reader :top_margin, :right_margin, :bottom_margin, :left_margin, :spreads
|
19
21
|
|
20
22
|
# Dimensions are in mm, to be converted to PDF points later. Pass spreads
|
21
23
|
# as true to check left and right margins of spreads, not pages.
|
22
|
-
def initialize(file_path,
|
24
|
+
def initialize(file_path, options = {})
|
23
25
|
@file_path = file_path
|
24
|
-
@
|
25
|
-
|
26
|
-
@
|
27
|
-
@
|
28
|
-
@
|
26
|
+
@keep_pngs = options.delete(:keep_pngs) || false
|
27
|
+
|
28
|
+
@top_margin = options.delete(:top_margin) || 0
|
29
|
+
@right_margin = options.delete(:right_margin) || 0
|
30
|
+
@bottom_margin = options.delete(:bottom_margin) || 0
|
31
|
+
@left_margin = options.delete(:left_margin) || 0
|
32
|
+
@spreads = options.delete(:spreads) || false
|
33
|
+
|
34
|
+
@logger = options.delete(:logger) || Logger.new(STDOUT).tap do |l|
|
35
|
+
l.level = options.delete(:log_level) || Logger::WARN
|
36
|
+
end
|
29
37
|
end
|
30
38
|
|
31
39
|
def issues
|
32
40
|
temp_dir_path = Dir.mktmpdir("pdf_margins")
|
41
|
+
logger.debug("Rendering PNGs into #{temp_dir_path}")
|
33
42
|
|
34
43
|
begin
|
35
44
|
# This produces greyscale PNGs - we throw the colour away because we
|
@@ -39,12 +48,17 @@ module PDF
|
|
39
48
|
issues = []
|
40
49
|
|
41
50
|
files = Dir.glob("#{temp_dir_path}/*.png")
|
51
|
+
file_count = files.length
|
42
52
|
# ensure the files are sorted naturally
|
43
53
|
files = files.sort_by{ |f| f.split('/').last.to_i }
|
44
54
|
|
55
|
+
logger.debug("Rendered #{file_count} files")
|
56
|
+
|
45
57
|
files.each_with_index do |png_path, index|
|
46
|
-
image = ChunkyPNG::Image.from_file(png_path)
|
47
58
|
page_number = index + 1
|
59
|
+
logger.debug("Rendering page #{page_number} from #{png_path}")
|
60
|
+
|
61
|
+
image = ChunkyPNG::Image.from_file(png_path)
|
48
62
|
|
49
63
|
if dirty_top_margin?(image, top_margin)
|
50
64
|
issues << Issue.new(page_number, :top)
|
@@ -64,7 +78,8 @@ module PDF
|
|
64
78
|
end
|
65
79
|
|
66
80
|
ensure
|
67
|
-
FileUtils.remove_entry(temp_dir_path)
|
81
|
+
FileUtils.remove_entry(temp_dir_path) unless @keep_pngs
|
82
|
+
logger.info("PNG files kept at: #{temp_dir_path}") if @keep_pngs
|
68
83
|
end
|
69
84
|
|
70
85
|
return issues
|
@@ -108,8 +123,11 @@ module PDF
|
|
108
123
|
height.times do |y_offset|
|
109
124
|
x_position = x + x_offset
|
110
125
|
y_position = y + y_offset
|
126
|
+
pixel = image[x_position, y_position]
|
111
127
|
|
112
|
-
if
|
128
|
+
if pixel != white
|
129
|
+
hex = ChunkyPNG::Color.to_hex(pixel)
|
130
|
+
logger.debug("Found #{hex} pixel at #{x_position},#{y_position}")
|
113
131
|
found_dirty_pixel = true
|
114
132
|
break
|
115
133
|
end
|
data/lib/pdf/margins/version.rb
CHANGED
data/test/checker_test.rb
CHANGED
@@ -2,18 +2,27 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class CheckerTest < Test::Unit::TestCase
|
4
4
|
|
5
|
+
def default_options(margin_width = 15)
|
6
|
+
{
|
7
|
+
top_margin: margin_width,
|
8
|
+
right_margin: margin_width,
|
9
|
+
bottom_margin: margin_width,
|
10
|
+
left_margin: margin_width
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
5
14
|
test "PDF as pages with clear margins tested as pages" do
|
6
|
-
checker = PDF::Margins::Checker.new(pdf_path('clear-margins-pages.pdf'),
|
15
|
+
checker = PDF::Margins::Checker.new(pdf_path('clear-margins-pages.pdf'), default_options)
|
7
16
|
assert_equal [], checker.issues
|
8
17
|
end
|
9
18
|
|
10
19
|
test "PDF as spreads with clear margins tested as spreads" do
|
11
|
-
checker = PDF::Margins::Checker.new(pdf_path('clear-margins-spreads.pdf'),
|
20
|
+
checker = PDF::Margins::Checker.new(pdf_path('clear-margins-spreads.pdf'), default_options.merge(spreads: true))
|
12
21
|
assert_equal [], checker.issues
|
13
22
|
end
|
14
23
|
|
15
24
|
test "PDF as spreads with clear margins tested as pages" do
|
16
|
-
checker = PDF::Margins::Checker.new(pdf_path('clear-margins-spreads.pdf'),
|
25
|
+
checker = PDF::Margins::Checker.new(pdf_path('clear-margins-spreads.pdf'), default_options)
|
17
26
|
assert_equal [
|
18
27
|
PDF::Margins::Issue.new(1, :left),
|
19
28
|
PDF::Margins::Issue.new(2, :right),
|
@@ -23,21 +32,21 @@ class CheckerTest < Test::Unit::TestCase
|
|
23
32
|
end
|
24
33
|
|
25
34
|
test "PDF as pages with dirty left margin" do
|
26
|
-
checker = PDF::Margins::Checker.new(pdf_path('left-margin-only.pdf'),
|
35
|
+
checker = PDF::Margins::Checker.new(pdf_path('left-margin-only.pdf'), default_options)
|
27
36
|
assert_equal [
|
28
37
|
PDF::Margins::Issue.new(1, :left)
|
29
38
|
], checker.issues
|
30
39
|
end
|
31
40
|
|
32
41
|
test "PDF as pages with dirty right margin" do
|
33
|
-
checker = PDF::Margins::Checker.new(pdf_path('right-margin-only.pdf'),
|
42
|
+
checker = PDF::Margins::Checker.new(pdf_path('right-margin-only.pdf'), default_options)
|
34
43
|
assert_equal [
|
35
44
|
PDF::Margins::Issue.new(1, :right)
|
36
45
|
], checker.issues
|
37
46
|
end
|
38
47
|
|
39
48
|
test "PDF with dirty top margin as spreads" do
|
40
|
-
checker = PDF::Margins::Checker.new(pdf_path('top-margin-only.pdf'),
|
49
|
+
checker = PDF::Margins::Checker.new(pdf_path('top-margin-only.pdf'), default_options.merge(spreads: true))
|
41
50
|
assert_equal [
|
42
51
|
PDF::Margins::Issue.new(1, :top),
|
43
52
|
PDF::Margins::Issue.new(2, :top),
|
@@ -47,7 +56,7 @@ class CheckerTest < Test::Unit::TestCase
|
|
47
56
|
end
|
48
57
|
|
49
58
|
test "PDF with dirty bottom margin as spreads" do
|
50
|
-
checker = PDF::Margins::Checker.new(pdf_path('bottom-margin-only.pdf'),
|
59
|
+
checker = PDF::Margins::Checker.new(pdf_path('bottom-margin-only.pdf'), default_options.merge(spreads: true))
|
51
60
|
assert_equal [
|
52
61
|
PDF::Margins::Issue.new(1, :bottom),
|
53
62
|
PDF::Margins::Issue.new(2, :bottom),
|
@@ -57,7 +66,7 @@ class CheckerTest < Test::Unit::TestCase
|
|
57
66
|
end
|
58
67
|
|
59
68
|
test "PDF with dirty top margin as pages" do
|
60
|
-
checker = PDF::Margins::Checker.new(pdf_path('top-margin-only.pdf'),
|
69
|
+
checker = PDF::Margins::Checker.new(pdf_path('top-margin-only.pdf'), default_options)
|
61
70
|
assert_equal [
|
62
71
|
PDF::Margins::Issue.new(1, :top),
|
63
72
|
PDF::Margins::Issue.new(2, :top),
|
@@ -67,7 +76,7 @@ class CheckerTest < Test::Unit::TestCase
|
|
67
76
|
end
|
68
77
|
|
69
78
|
test "PDF with dirty bottom margin as pages" do
|
70
|
-
checker = PDF::Margins::Checker.new(pdf_path('bottom-margin-only.pdf'),
|
79
|
+
checker = PDF::Margins::Checker.new(pdf_path('bottom-margin-only.pdf'), default_options)
|
71
80
|
assert_equal [
|
72
81
|
PDF::Margins::Issue.new(1, :bottom),
|
73
82
|
PDF::Margins::Issue.new(2, :bottom),
|
@@ -77,17 +86,17 @@ class CheckerTest < Test::Unit::TestCase
|
|
77
86
|
end
|
78
87
|
|
79
88
|
test "PDF with all dirty margins being checked as pages with a margin width of 0" do
|
80
|
-
checker = PDF::Margins::Checker.new(pdf_path('16-page-mini.pdf'), 0
|
89
|
+
checker = PDF::Margins::Checker.new(pdf_path('16-page-mini.pdf'), default_options(0))
|
81
90
|
assert_equal [], checker.issues
|
82
91
|
end
|
83
92
|
|
84
93
|
test "PDF with all dirty margins being checked as spreads with a margin width of 0" do
|
85
|
-
checker = PDF::Margins::Checker.new(pdf_path('16-page-mini.pdf'), 0
|
94
|
+
checker = PDF::Margins::Checker.new(pdf_path('16-page-mini.pdf'), default_options(0).merge(spreads: true))
|
86
95
|
assert_equal [], checker.issues
|
87
96
|
end
|
88
97
|
|
89
98
|
test "shelling out to mudraw fails" do
|
90
|
-
checker = PDF::Margins::Checker.new(pdf_path('bottom-margin-only.pdf'),
|
99
|
+
checker = PDF::Margins::Checker.new(pdf_path('bottom-margin-only.pdf'), default_options)
|
91
100
|
checker.expects(:system).returns(false)
|
92
101
|
assert_raises(PDF::Margins::MuDrawCommandError) { checker.issues }
|
93
102
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdf_margins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chunky_png
|