pdf-writer 1.1.1 → 1.1.2
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 +23 -1
- data/README +2 -2
- data/demo/colornames.rb +19 -823
- data/demo/demo.rb +2 -2
- data/demo/pac.rb +12 -12
- data/demo/pagenumber.rb +16 -12
- data/lib/pdf/charts/stddev.rb +10 -10
- data/lib/pdf/quickref.rb +5 -4
- data/lib/pdf/simpletable.rb +16 -16
- data/lib/pdf/techbook.rb +11 -11
- data/lib/pdf/writer.rb +136 -134
- data/lib/pdf/writer/graphics.rb +3 -3
- data/lib/pdf/writer/lang/en.rb +2 -1
- data/lib/pdf/writer/object/contents.rb +3 -2
- data/lib/pdf/writer/object/image.rb +150 -10
- data/manual.pwd +470 -117
- metadata +3 -4
- data/lib/pdf/grid.rb +0 -135
data/demo/demo.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: demo.rb,v 1.8 2005/
|
9
|
+
# $Id: demo.rb,v 1.8.2.1 2005/08/25 03:38:05 austin Exp $
|
10
10
|
#++
|
11
11
|
begin
|
12
12
|
require 'pdf/writer'
|
@@ -50,7 +50,7 @@ end
|
|
50
50
|
x = (x - xw - 2)
|
51
51
|
end
|
52
52
|
|
53
|
-
pdf.stroke_color(Color::Black)
|
53
|
+
pdf.stroke_color(Color::RGB::Black)
|
54
54
|
pdf.stroke_style(PDF::Writer::StrokeStyle.new(1))
|
55
55
|
pdf.rectangle(20, 20, 558, 802)
|
56
56
|
|
data/demo/pac.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: pac.rb,v 1.4 2005/
|
9
|
+
# $Id: pac.rb,v 1.4.2.1 2005/08/25 03:38:05 austin Exp $
|
10
10
|
#++
|
11
11
|
begin
|
12
12
|
require 'pdf/writer'
|
@@ -21,34 +21,34 @@ end
|
|
21
21
|
|
22
22
|
pdf = PDF::Writer.new(:orientation => :landscape)
|
23
23
|
|
24
|
-
pdf.fill_color Color::Black
|
24
|
+
pdf.fill_color Color::RGB::Black
|
25
25
|
pdf.rectangle(0, 0, pdf.page_width, pdf.page_height).fill
|
26
26
|
|
27
27
|
# Wall
|
28
|
-
pdf.fill_color Color::Magenta
|
29
|
-
pdf.stroke_color Color::Cyan
|
28
|
+
pdf.fill_color Color::RGB::Magenta
|
29
|
+
pdf.stroke_color Color::RGB::Cyan
|
30
30
|
pdf.rounded_rectangle(20, 500, 750, 20, 10).close_fill_stroke
|
31
31
|
pdf.rounded_rectangle(20, 200, 750, 20, 10).close_fill_stroke
|
32
32
|
|
33
33
|
# Body
|
34
|
-
pdf.fill_color Color::Yellow
|
35
|
-
pdf.stroke_color Color::Black
|
34
|
+
pdf.fill_color Color::RGB::Yellow
|
35
|
+
pdf.stroke_color Color::RGB::Black
|
36
36
|
pdf.circle_at(150, 350, 100).fill_stroke
|
37
37
|
|
38
38
|
# Mouth
|
39
|
-
pdf.fill_color Color::Black
|
39
|
+
pdf.fill_color Color::RGB::Black
|
40
40
|
pdf.segment_at(150, 350, 100, 100, 30, -30).close_fill_stroke
|
41
41
|
|
42
42
|
# Dot
|
43
|
-
pdf.fill_color Color::Yellow
|
43
|
+
pdf.fill_color Color::RGB::Yellow
|
44
44
|
pdf.circle_at(250, 350, 20).fill_stroke
|
45
45
|
pdf.circle_at(300, 350, 10).fill_stroke
|
46
46
|
pdf.circle_at(350, 350, 10).fill_stroke
|
47
47
|
pdf.circle_at(400, 350, 10).fill_stroke
|
48
48
|
pdf.circle_at(450, 350, 10).fill_stroke
|
49
49
|
|
50
|
-
pdf.fill_color Color::Blue
|
51
|
-
pdf.stroke_color Color::Cyan
|
50
|
+
pdf.fill_color Color::RGB::Blue
|
51
|
+
pdf.stroke_color Color::RGB::Cyan
|
52
52
|
pdf.move_to(500, 250)
|
53
53
|
pdf.line_to(500, 425)
|
54
54
|
pdf.curve_to(550, 475, 600, 475, 650, 425)
|
@@ -60,10 +60,10 @@ pdf.line_to(550, 250)
|
|
60
60
|
pdf.line_to(525, 275)
|
61
61
|
pdf.line_to(500, 250).fill_stroke
|
62
62
|
|
63
|
-
pdf.fill_color Color::White
|
63
|
+
pdf.fill_color Color::RGB::White
|
64
64
|
pdf.rectangle(525, 375, 25, 25).fill
|
65
65
|
pdf.rectangle(575, 375, 25, 25).fill
|
66
|
-
pdf.fill_color Color::Black
|
66
|
+
pdf.fill_color Color::RGB::Black
|
67
67
|
pdf.rectangle(525, 375, 10, 10).fill
|
68
68
|
pdf.rectangle(575, 375, 10, 10).fill
|
69
69
|
|
data/demo/pagenumber.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: pagenumber.rb,v 1.5 2005/
|
9
|
+
# $Id: pagenumber.rb,v 1.5.2.1 2005/08/25 03:38:05 austin Exp $
|
10
10
|
#++
|
11
11
|
begin
|
12
12
|
require 'pdf/writer'
|
@@ -23,10 +23,10 @@ def grey_page(pdf)
|
|
23
23
|
@page_num ||= 0
|
24
24
|
@page_num += 1
|
25
25
|
pdf.save_state
|
26
|
-
pdf.fill_color Color::Grey90
|
27
|
-
x = pdf.
|
28
|
-
y = pdf.
|
29
|
-
pdf.add_text(x, y,
|
26
|
+
pdf.fill_color Color::RGB::Grey90
|
27
|
+
x = pdf.margin_x_middle - (pdf.text_width(@page_num, 48) / 2.0)
|
28
|
+
y = pdf.margin_y_middle - (pdf.font_height(48) / 2.0)
|
29
|
+
pdf.add_text(x, y, @page_num, 48)
|
30
30
|
pdf.restore_state
|
31
31
|
end
|
32
32
|
|
@@ -39,28 +39,32 @@ pdf = PDF::Writer.new(:paper => "A10")
|
|
39
39
|
pdf.margins_pt 0
|
40
40
|
pdf.select_font "Helvetica"
|
41
41
|
|
42
|
-
|
43
|
-
|
42
|
+
x = pdf.absolute_x_middle
|
43
|
+
|
44
|
+
grey_page(pdf) # Page 1: 99 of 99
|
45
|
+
sa = pdf.start_page_numbering(x, 70, 9, :center, nil, 99)
|
46
|
+
pdf.stop_page_numbering(true, :current, sa)
|
44
47
|
make_page(pdf) # Page 2: 1 of 2
|
48
|
+
sa = pdf.start_page_numbering(x, 60, 9, nil, nil, 1)
|
45
49
|
make_page(pdf) # Page 3: 2 of 2
|
46
50
|
pdf.stop_page_numbering(true, :current, sa)
|
47
51
|
make_page(pdf) # Page 4: blank
|
48
|
-
sb = pdf.start_page_numbering(
|
52
|
+
sb = pdf.start_page_numbering(x, 50, 9, :center, nil, 10)
|
49
53
|
make_page(pdf) # Page 5: 10 of 12
|
50
54
|
make_page(pdf) # Page 6: 11 of 12
|
51
55
|
pdf.stop_page_numbering(true, :next, sb)
|
52
56
|
make_page(pdf) # Page 7: 12 of 12
|
53
|
-
sc = pdf.start_page_numbering(
|
57
|
+
sc = pdf.start_page_numbering(x, 40, 9, nil, nil, 1)
|
54
58
|
make_page(pdf) # Page 8: 1 of 3
|
55
59
|
make_page(pdf) # Page 9: 2 of 3
|
56
60
|
make_page(pdf) # Page 10: 3 of 3
|
57
61
|
pdf.stop_page_numbering(true, :current, sc)
|
58
62
|
make_page(pdf) # Page 11: blank
|
59
|
-
sd = pdf.start_page_numbering(
|
63
|
+
sd = pdf.start_page_numbering(x, 30, 9, nil, nil, 1)
|
60
64
|
make_page(pdf) # Page 12: 1 of 6
|
61
65
|
make_page(pdf) # Page 13: 2 of 6
|
62
|
-
se = pdf.start_page_numbering(
|
63
|
-
sf = pdf.start_page_numbering(
|
66
|
+
se = pdf.start_page_numbering(x, 20, 9, nil, nil, 5)
|
67
|
+
sf = pdf.start_page_numbering(x, 10, 9, :right, nil, 1)
|
64
68
|
make_page(pdf) # Page 14: 3 of 6, 5 of 10, 1 of 8
|
65
69
|
make_page(pdf) # Page 15: 4 of 6, 6 of 10, 2 of 8
|
66
70
|
make_page(pdf) # Page 16: 5 of 6, 7 of 10, 3 of 8
|
data/lib/pdf/charts/stddev.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: stddev.rb,v 1.9 2005/
|
9
|
+
# $Id: stddev.rb,v 1.9.2.1 2005/08/25 03:38:05 austin Exp $
|
10
10
|
#++
|
11
11
|
require 'pdf/writer'
|
12
12
|
require 'pdf/charts'
|
@@ -20,7 +20,7 @@ require 'ostruct'
|
|
20
20
|
# The scale of responses is the vertical scale; the average data points
|
21
21
|
# and standard deviation values are the horizontal scale.
|
22
22
|
class PDF::Charts::StdDev
|
23
|
-
VERSION = '1.1.
|
23
|
+
VERSION = '1.1.2'
|
24
24
|
|
25
25
|
# A data element.
|
26
26
|
DataPoint = Struct.new(:label, :average, :stddev)
|
@@ -117,7 +117,7 @@ class PDF::Charts::StdDev
|
|
117
117
|
scale.show_labels = false
|
118
118
|
scale.label = Label.new do |label|
|
119
119
|
label.text_size = 8
|
120
|
-
label.text_color = Color::Black
|
120
|
+
label.text_color = Color::RGB::Black
|
121
121
|
label.pad = 2
|
122
122
|
label.decimal_precision = 1
|
123
123
|
end
|
@@ -126,32 +126,32 @@ class PDF::Charts::StdDev
|
|
126
126
|
@show_labels = true
|
127
127
|
@label = Label.new do |label|
|
128
128
|
label.height = 25
|
129
|
-
label.background_color = Color::Black
|
130
|
-
label.text_color = Color::White
|
129
|
+
label.background_color = Color::RGB::Black
|
130
|
+
label.text_color = Color::RGB::White
|
131
131
|
label.text_size = 12
|
132
132
|
end
|
133
133
|
|
134
134
|
@outer_borders = Marker.new do |marker|
|
135
135
|
marker.style = PDF::Writer::StrokeStyle.new(1.5)
|
136
|
-
marker.color = Color::Black
|
136
|
+
marker.color = Color::RGB::Black
|
137
137
|
end
|
138
138
|
@inner_borders = nil
|
139
139
|
|
140
140
|
@dot = Marker.new do |marker|
|
141
141
|
marker.style = PDF::Writer::StrokeStyle.new(5)
|
142
|
-
marker.color = Color::Black
|
142
|
+
marker.color = Color::RGB::Black
|
143
143
|
end
|
144
144
|
@bar = Marker.new do |marker|
|
145
145
|
marker.style = PDF::Writer::StrokeStyle.new(0.5)
|
146
|
-
marker.color = Color::Black
|
146
|
+
marker.color = Color::RGB::Black
|
147
147
|
end
|
148
148
|
@upper_crossbar = Marker.new do |marker|
|
149
149
|
marker.style = PDF::Writer::StrokeStyle.new(1)
|
150
|
-
marker.color = Color::Black
|
150
|
+
marker.color = Color::RGB::Black
|
151
151
|
end
|
152
152
|
@lower_crossbar = Marker.new do |marker|
|
153
153
|
marker.style = PDF::Writer::StrokeStyle.new(1)
|
154
|
-
marker.color = Color::Black
|
154
|
+
marker.color = Color::RGB::Black
|
155
155
|
end
|
156
156
|
|
157
157
|
@height = 200
|
data/lib/pdf/quickref.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: quickref.rb,v 1.10 2005/
|
9
|
+
# $Id: quickref.rb,v 1.10.2.2 2005/08/25 03:51:44 austin Exp $
|
10
10
|
#++
|
11
11
|
require 'pdf/simpletable'
|
12
12
|
|
@@ -51,7 +51,7 @@ require 'pdf/simpletable'
|
|
51
51
|
# qr.lines "Text to put after the header."
|
52
52
|
# qr.save_as "MyQuickRef.pdf"
|
53
53
|
class PDF::QuickRef
|
54
|
-
VERSION = '1.1.
|
54
|
+
VERSION = '1.1.2'
|
55
55
|
|
56
56
|
# Create the quick reference document. +paper+ is passed unchanged to
|
57
57
|
# the PDF::Writer.new; the page is always created landscape. Margins
|
@@ -110,7 +110,7 @@ class PDF::QuickRef
|
|
110
110
|
# Put lines between the columns.
|
111
111
|
all = @pdf.open_object
|
112
112
|
@pdf.save_state
|
113
|
-
@pdf.stroke_color! Color::Black
|
113
|
+
@pdf.stroke_color! Color::RGB::Black
|
114
114
|
@pdf.stroke_style PDF::Writer::StrokeStyle::DEFAULT
|
115
115
|
(1 .. (columns - 1)).each do |ii|
|
116
116
|
x = @pdf.left_margin + (@pdf.column_width * ii)
|
@@ -287,7 +287,8 @@ class PDF::QuickRef
|
|
287
287
|
end
|
288
288
|
|
289
289
|
# Draws a horizontal line with the specified style and colour.
|
290
|
-
def hline(style = PDF::Writer::StrokeStyle::DEFAULT,
|
290
|
+
def hline(style = PDF::Writer::StrokeStyle::DEFAULT,
|
291
|
+
color = Color::RGB::Black)
|
291
292
|
@pdf.y -= 2.5
|
292
293
|
@pdf.save_state
|
293
294
|
@pdf.stroke_style style
|
data/lib/pdf/simpletable.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: simpletable.rb,v 1.13 2005/
|
9
|
+
# $Id: simpletable.rb,v 1.13.2.1 2005/08/25 03:38:05 austin Exp $
|
10
10
|
#++
|
11
11
|
require 'pdf/writer'
|
12
12
|
require 'transaction/simple/group'
|
@@ -14,7 +14,7 @@ require 'transaction/simple/group'
|
|
14
14
|
# This class will create tables with a relatively simple API and internal
|
15
15
|
# implementation.
|
16
16
|
class PDF::SimpleTable
|
17
|
-
VERSION = '1.1.
|
17
|
+
VERSION = '1.1.2'
|
18
18
|
|
19
19
|
include Transaction::Simple
|
20
20
|
|
@@ -75,18 +75,18 @@ class PDF::SimpleTable
|
|
75
75
|
@show_lines = :outer
|
76
76
|
@show_headings = true
|
77
77
|
@shade_rows = :shaded
|
78
|
-
@shade_color = Color::Grey80
|
79
|
-
@shade_color2 = Color::Grey70
|
78
|
+
@shade_color = Color::RGB::Grey80
|
79
|
+
@shade_color2 = Color::RGB::Grey70
|
80
80
|
@shade_headings = false
|
81
|
-
@shade_heading_color = Color::Grey90
|
81
|
+
@shade_heading_color = Color::RGB::Grey90
|
82
82
|
@font_size = 10
|
83
83
|
@heading_font_size = 12
|
84
84
|
@title_font_size = 12
|
85
85
|
@title_gap = 5
|
86
|
-
@title_color = Color::Black
|
87
|
-
@heading_color = Color::Black
|
88
|
-
@text_color = Color::Black
|
89
|
-
@line_color = Color::Black
|
86
|
+
@title_color = Color::RGB::Black
|
87
|
+
@heading_color = Color::RGB::Black
|
88
|
+
@text_color = Color::RGB::Black
|
89
|
+
@line_color = Color::RGB::Black
|
90
90
|
@position = :center
|
91
91
|
@orientation = :center
|
92
92
|
@bold_headings = false
|
@@ -146,16 +146,16 @@ class PDF::SimpleTable
|
|
146
146
|
# will be shaded with #shade_color; the rest of the
|
147
147
|
# rows will be shaded with #shade_color2.
|
148
148
|
attr_accessor :shade_rows
|
149
|
-
# The main row shading colour. Defaults to Color::Grey80. Used with
|
149
|
+
# The main row shading colour. Defaults to Color::RGB::Grey80. Used with
|
150
150
|
# #shade_rows of <tt>:shaded</tt> and <tt>:striped</tt>.
|
151
151
|
attr_accessor :shade_color
|
152
152
|
# The alternate row shading colour, used with #shade_rows of
|
153
|
-
# <tt>:striped</tt>. Defaults to Color::Grey70.
|
153
|
+
# <tt>:striped</tt>. Defaults to Color::RGB::Grey70.
|
154
154
|
attr_accessor :shade_color2
|
155
155
|
# Places a background colour in the heading if +true+.
|
156
156
|
attr_accessor :shade_headings
|
157
157
|
# Defines the colour of the background shading for the heading if
|
158
|
-
# #shade_headings is +true+. Default is Color::Grey90.
|
158
|
+
# #shade_headings is +true+. Default is Color::RGB::Grey90.
|
159
159
|
attr_accessor :shade_heading_color
|
160
160
|
# The font size of the data cells, in points. Defaults to 10 points.
|
161
161
|
attr_accessor :font_size
|
@@ -166,13 +166,13 @@ class PDF::SimpleTable
|
|
166
166
|
# The gap, in PDF units, between the title and the table. Defaults to 5
|
167
167
|
# units.
|
168
168
|
attr_accessor :title_gap
|
169
|
-
# The text colour of the title. Defaults to Color::Black.
|
169
|
+
# The text colour of the title. Defaults to Color::RGB::Black.
|
170
170
|
attr_accessor :title_color
|
171
|
-
# The text colour of the heading. Defaults to Color::Black.
|
171
|
+
# The text colour of the heading. Defaults to Color::RGB::Black.
|
172
172
|
attr_accessor :heading_color
|
173
|
-
# The text colour of the body cells. Defaults to Color::Black.
|
173
|
+
# The text colour of the body cells. Defaults to Color::RGB::Black.
|
174
174
|
attr_accessor :text_color
|
175
|
-
# The colour of the table lines. Defaults to Color::Black.
|
175
|
+
# The colour of the table lines. Defaults to Color::RGB::Black.
|
176
176
|
attr_accessor :line_color
|
177
177
|
# The +x+ position of the table. This will be one of:
|
178
178
|
#
|
data/lib/pdf/techbook.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
8
8
|
# for full licensing information.
|
9
9
|
#
|
10
|
-
# $Id: techbook.rb,v 1.17 2005/
|
10
|
+
# $Id: techbook.rb,v 1.17.2.1 2005/08/25 03:38:05 austin Exp $
|
11
11
|
#++
|
12
12
|
require 'pdf/simpletable'
|
13
13
|
require 'pdf/charts/stddev'
|
@@ -396,36 +396,36 @@ class PDF::TechBook < PDF::Writer
|
|
396
396
|
private :techbook_find_directive
|
397
397
|
|
398
398
|
H1_STYLE = {
|
399
|
-
:background => Color::Black,
|
400
|
-
:foreground => Color::White,
|
399
|
+
:background => Color::RGB::Black,
|
400
|
+
:foreground => Color::RGB::White,
|
401
401
|
:justification => :center,
|
402
402
|
:font_size => 26,
|
403
403
|
:bar => true
|
404
404
|
}
|
405
405
|
H2_STYLE = {
|
406
|
-
:background => Color::Grey80,
|
407
|
-
:foreground => Color::Black,
|
406
|
+
:background => Color::RGB::Grey80,
|
407
|
+
:foreground => Color::RGB::Black,
|
408
408
|
:justification => :left,
|
409
409
|
:font_size => 18,
|
410
410
|
:bar => true
|
411
411
|
}
|
412
412
|
H3_STYLE = {
|
413
|
-
:background => Color::White,
|
414
|
-
:foreground => Color::Black,
|
413
|
+
:background => Color::RGB::White,
|
414
|
+
:foreground => Color::RGB::Black,
|
415
415
|
:justification => :left,
|
416
416
|
:font_size => 18,
|
417
417
|
:bar => false
|
418
418
|
}
|
419
419
|
H4_STYLE = {
|
420
|
-
:background => Color::White,
|
421
|
-
:foreground => Color::Black,
|
420
|
+
:background => Color::RGB::White,
|
421
|
+
:foreground => Color::RGB::Black,
|
422
422
|
:justification => :left,
|
423
423
|
:font_size => 14,
|
424
424
|
:bar => false
|
425
425
|
}
|
426
426
|
H5_STYLE = {
|
427
|
-
:background => Color::White,
|
428
|
-
:foreground => Color::Black,
|
427
|
+
:background => Color::RGB::White,
|
428
|
+
:foreground => Color::RGB::Black,
|
429
429
|
:justification => :left,
|
430
430
|
:font_size => 12,
|
431
431
|
:bar => false
|
data/lib/pdf/writer.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
7
|
# for full licensing information.
|
8
8
|
#
|
9
|
-
# $Id: writer.rb,v 1.38 2005/
|
9
|
+
# $Id: writer.rb,v 1.38.2.1 2005/08/25 03:38:05 austin Exp $
|
10
10
|
#++
|
11
11
|
require 'thread'
|
12
12
|
require 'open-uri'
|
@@ -19,7 +19,7 @@ require 'color'
|
|
19
19
|
module PDF
|
20
20
|
class Writer
|
21
21
|
# The version of PDF::Writer.
|
22
|
-
VERSION = '1.1.
|
22
|
+
VERSION = '1.1.2'
|
23
23
|
|
24
24
|
# Escape the text so that it's safe for insertion into the PDF
|
25
25
|
# document.
|
@@ -194,9 +194,9 @@ class PDF::Writer
|
|
194
194
|
|
195
195
|
all = pdf.open_object
|
196
196
|
pdf.save_state
|
197
|
-
|
198
|
-
pdf.stroke_color!
|
199
|
-
pdf.fill_color!
|
197
|
+
kk = Color::CMYK.new(0, 0, 0, 100)
|
198
|
+
pdf.stroke_color! kk
|
199
|
+
pdf.fill_color! kk
|
200
200
|
pdf.stroke_style! StrokeStyle.new(0.3)
|
201
201
|
|
202
202
|
pdf.prepress_clip_mark(tx1, ty0, 0, mark_length, bleed_size) # Upper Right
|
@@ -359,13 +359,10 @@ class PDF::Writer
|
|
359
359
|
@pages = PDF::Writer::Object::Pages.new(self)
|
360
360
|
|
361
361
|
@current_node = @pages
|
362
|
-
|
363
|
-
@current_text_render_style = 0
|
364
|
-
|
365
362
|
@procset = PDF::Writer::Object::Procset.new(self)
|
366
363
|
@info = PDF::Writer::Object::Info.new(self)
|
367
364
|
@page = PDF::Writer::Object::Page.new(self)
|
368
|
-
|
365
|
+
@current_text_render_style = 0
|
369
366
|
@first_page = @page
|
370
367
|
|
371
368
|
@version = version
|
@@ -405,8 +402,8 @@ class PDF::Writer
|
|
405
402
|
# process.
|
406
403
|
@pageset[1] = @pages.first_page
|
407
404
|
|
408
|
-
fill_color! Color::Black
|
409
|
-
stroke_color! Color::Black
|
405
|
+
fill_color! Color::RGB::Black
|
406
|
+
stroke_color! Color::RGB::Black
|
410
407
|
|
411
408
|
yield self if block_given?
|
412
409
|
end
|
@@ -600,6 +597,11 @@ class PDF::Writer
|
|
600
597
|
start_new_page if @y < bottom # Make a new page
|
601
598
|
end
|
602
599
|
|
600
|
+
# Allows the user to find out what the ID is of the first page that was
|
601
|
+
# created during startup - useful if they wish to add something to it
|
602
|
+
# later.
|
603
|
+
attr_reader :first_page
|
604
|
+
|
603
605
|
# Add a new translation table for a font family. A font family will be
|
604
606
|
# used to associate a single name and font styles with multiple fonts.
|
605
607
|
# A style will be identified with a single-character style identifier or
|
@@ -619,11 +621,6 @@ class PDF::Writer
|
|
619
621
|
# Each font family key is the base name for the font.
|
620
622
|
attr_reader :font_families
|
621
623
|
|
622
|
-
# Allows the user to find out what the ID is of the first page that was
|
623
|
-
# created during startup - useful if they wish to add something to it
|
624
|
-
# later.
|
625
|
-
attr_reader :first_page
|
626
|
-
|
627
624
|
# Initialize the font families for the default fonts.
|
628
625
|
def init_font_families
|
629
626
|
# Set the known family groups. These font families will be used to
|
@@ -700,33 +697,33 @@ class PDF::Writer
|
|
700
697
|
:add => 32
|
701
698
|
}
|
702
699
|
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
700
|
+
# Encrypts the document. This will set the user and owner passwords that
|
701
|
+
# will be used to access the document and set the permissions the user
|
702
|
+
# has with the document. The passwords are limited to 32 characters.
|
703
|
+
#
|
704
|
+
# The permissions provided are an array of symbols, allowing identified
|
705
|
+
# users to perform particular actions:
|
706
|
+
# <tt>:print</tt>:: Print.
|
707
|
+
# <tt>:modify</tt>:: Modify text or objects.
|
708
|
+
# <tt>:copy</tt>:: Copy text or objects.
|
709
|
+
# <tt>:add</tt>:: Add text or objects.
|
710
|
+
def encrypt(user_pass = nil, owner_pass = nil, permissions = [])
|
711
|
+
perms = ["11000000"].pack("B8")
|
712
|
+
|
713
|
+
permissions.each do |perm|
|
714
|
+
perms += ENCRYPT_OPTIONS[perm] if ENCRYPT_OPTIONS[perm]
|
715
|
+
end
|
716
|
+
|
717
|
+
@arc4 ||= PDF::ARC4.new
|
718
|
+
owner_pass ||= user_pass
|
719
|
+
|
720
|
+
options = {
|
721
|
+
:owner_pass => owner_pass,
|
722
|
+
:user_pass => user_pass,
|
723
|
+
:permissions => perms,
|
724
|
+
}
|
725
|
+
@encryption = PDF::Writer::Object::Encryption.new(self, options)
|
726
|
+
end
|
730
727
|
|
731
728
|
def encrypted?
|
732
729
|
not @encryption.nil?
|
@@ -738,7 +735,7 @@ class PDF::Writer
|
|
738
735
|
|
739
736
|
# Return the PDF stream as a string.
|
740
737
|
def render(debug = false)
|
741
|
-
|
738
|
+
add_page_numbers
|
742
739
|
@compression = false if $DEBUG or debug
|
743
740
|
@arc4.init(@encryption_key) unless @arc4.nil?
|
744
741
|
|
@@ -2197,30 +2194,35 @@ class PDF::Writer
|
|
2197
2194
|
def start_page_numbering(x, y, size, pos = nil, pattern = nil, starting = nil)
|
2198
2195
|
pos ||= :left
|
2199
2196
|
pattern ||= "<PAGENUM> of <TOTALPAGENUM>"
|
2197
|
+
starting ||= 1
|
2200
2198
|
|
2201
2199
|
@page_numbering ||= []
|
2202
2200
|
@page_numbering << (o = {})
|
2203
2201
|
|
2204
|
-
page = @pageset.size
|
2202
|
+
page = @pageset.size - 1
|
2205
2203
|
o[page] = {
|
2206
2204
|
:x => x,
|
2207
2205
|
:y => y,
|
2208
2206
|
:pos => pos,
|
2209
2207
|
:pattern => pattern,
|
2210
2208
|
:starting => starting,
|
2211
|
-
:size => size
|
2209
|
+
:size => size,
|
2210
|
+
:start => true
|
2212
2211
|
}
|
2213
2212
|
@page_numbering.index(o)
|
2214
2213
|
end
|
2215
2214
|
|
2216
2215
|
# Given a particular generic page number +page_num+ (numbered
|
2217
2216
|
# sequentially from the beginning of the page set), return the page
|
2218
|
-
# number under a particular page numbering +scheme
|
2219
|
-
# page numbering is not turned
|
2217
|
+
# number under a particular page numbering +scheme+ (defaults to the
|
2218
|
+
# first scheme turned on). Returns +nil+ if page numbering is not turned
|
2219
|
+
# on or if the page is not under the current numbering scheme.
|
2220
|
+
#
|
2221
|
+
# This method has been dprecated.
|
2220
2222
|
def which_page_number(page_num, scheme = 0)
|
2221
2223
|
return nil unless @page_numbering
|
2222
2224
|
|
2223
|
-
num
|
2225
|
+
num = nil
|
2224
2226
|
start = start_num = 1
|
2225
2227
|
|
2226
2228
|
@page_numbering[scheme].each do |kk, vv|
|
@@ -2232,7 +2234,7 @@ class PDF::Writer
|
|
2232
2234
|
num = page_num - start_num + start
|
2233
2235
|
end
|
2234
2236
|
else
|
2235
|
-
num =
|
2237
|
+
num = nil
|
2236
2238
|
end
|
2237
2239
|
end
|
2238
2240
|
end
|
@@ -2245,103 +2247,108 @@ class PDF::Writer
|
|
2245
2247
|
# numbering +scheme+ will be stopped as well. If +stop_at+ is
|
2246
2248
|
# <tt>:current</tt>, then the page numbering will stop at this page;
|
2247
2249
|
# otherwise, it will stop at the next page.
|
2250
|
+
#
|
2251
|
+
# This method has been dprecated.
|
2248
2252
|
def stop_page_numbering(stop_total = false, stop_at = :current, scheme = 0)
|
2249
2253
|
return false unless @page_numbering
|
2250
2254
|
|
2251
|
-
page = @pageset.size
|
2255
|
+
page = @pageset.size - 1
|
2252
2256
|
|
2253
|
-
|
2254
|
-
|
2255
|
-
@page_numbering[scheme][page]["stoptn"] = true
|
2256
|
-
else
|
2257
|
-
@page_numbering[scheme][page]["stopn"] = true
|
2258
|
-
end
|
2259
|
-
else
|
2260
|
-
if stop_total
|
2261
|
-
@page_numbering[scheme][page] = "stopt"
|
2262
|
-
else
|
2263
|
-
@page_numbering[scheme][page] = "stop"
|
2264
|
-
end
|
2257
|
+
@page_numbering[scheme][page] ||= {}
|
2258
|
+
o = @page_numbering[scheme][page]
|
2265
2259
|
|
2266
|
-
|
2260
|
+
case [ stop_total, stop_at == :current ]
|
2261
|
+
when [ true, true ]
|
2262
|
+
o[:stop] = :stop_total
|
2263
|
+
when [ true, false ]
|
2264
|
+
o[:stop] = :stop_total_next
|
2265
|
+
when [ false, true ]
|
2266
|
+
o[:stop] = :stop_next
|
2267
|
+
else
|
2268
|
+
o[:stop] = :stop
|
2267
2269
|
end
|
2268
2270
|
end
|
2269
2271
|
|
2270
|
-
def page_number_search(
|
2271
|
-
|
2272
|
-
|
2273
|
-
|
2274
|
-
else
|
2275
|
-
return scheme if v == label
|
2276
|
-
end
|
2277
|
-
end
|
2278
|
-
0
|
2272
|
+
def page_number_search(condition, scheme)
|
2273
|
+
res = nil
|
2274
|
+
scheme.each { |page, value| res = page if value[:stop] == condition }
|
2275
|
+
res
|
2279
2276
|
end
|
2280
2277
|
private :page_number_search
|
2281
2278
|
|
2282
2279
|
def add_page_numbers
|
2283
2280
|
# This will go through the @page_numbering array and add the page
|
2284
2281
|
# numbers are required.
|
2285
|
-
|
2286
|
-
|
2287
|
-
|
2288
|
-
|
2289
|
-
|
2290
|
-
|
2291
|
-
#
|
2292
|
-
|
2293
|
-
|
2294
|
-
if
|
2295
|
-
total_pages =
|
2282
|
+
if @page_numbering
|
2283
|
+
page_count = @pageset.size
|
2284
|
+
pn_tmp = @page_numbering.dup
|
2285
|
+
|
2286
|
+
# Go through each of the page numbering schemes.
|
2287
|
+
pn_tmp.each do |scheme|
|
2288
|
+
# First, find the total pages for this schemes.
|
2289
|
+
page = page_number_search(:stop_total, scheme)
|
2290
|
+
|
2291
|
+
if page
|
2292
|
+
total_pages = page
|
2296
2293
|
else
|
2297
|
-
|
2298
|
-
if
|
2299
|
-
total_pages =
|
2294
|
+
page = page_number_search(:stop_total_next, scheme)
|
2295
|
+
if page
|
2296
|
+
total_pages = page
|
2300
2297
|
else
|
2301
|
-
total_pages =
|
2298
|
+
total_pages = page_count
|
2302
2299
|
end
|
2303
2300
|
end
|
2304
|
-
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2308
|
-
|
2301
|
+
|
2302
|
+
status = nil
|
2303
|
+
delta = pattern = pos = x = y = size = nil
|
2304
|
+
|
2305
|
+
@pageset.each_with_index do |page, index|
|
2306
|
+
next if status.nil? and scheme[index].nil?
|
2307
|
+
|
2308
|
+
info = scheme[index]
|
2309
|
+
if info
|
2310
|
+
if info[:start]
|
2311
|
+
status = true
|
2309
2312
|
if info[:starting]
|
2310
|
-
|
2313
|
+
delta = info[:starting] - index
|
2311
2314
|
else
|
2312
|
-
|
2315
|
+
delta = index
|
2316
|
+
end
|
2317
|
+
|
2318
|
+
pattern = info[:pattern]
|
2319
|
+
pos = info[:pos]
|
2320
|
+
x = info[:x]
|
2321
|
+
y = info[:y]
|
2322
|
+
size = info[:size]
|
2323
|
+
|
2324
|
+
# Check for the special case of page numbering starting and
|
2325
|
+
# stopping on the same page.
|
2326
|
+
status = :stop_next if info[:stop]
|
2327
|
+
elsif [:stop, :stop_total].include?(info[:stop])
|
2328
|
+
status = :stop_now
|
2329
|
+
elsif status == true and [:stop_next, :stop_total_next].include?(info[:stop])
|
2330
|
+
status = :stop_next
|
2313
2331
|
end
|
2314
|
-
# Also check for the special case of the numbering stopping
|
2315
|
-
# and starting on the same page.
|
2316
|
-
status = 2 if info["stopn"] or info["stoptn"]
|
2317
|
-
elsif tmp[page_num] == "stop" or tmp[page_num] == "stopt"
|
2318
|
-
status = 0 # we are stopping page numbers
|
2319
|
-
elsif status == 1 and (tmp[page_num] == "stoptn" or tmp[page_num] == "stopn")
|
2320
|
-
status = 2
|
2321
2332
|
end
|
2322
2333
|
|
2323
|
-
if status
|
2334
|
+
if status
|
2324
2335
|
# Add the page numbering to this page
|
2325
|
-
|
2326
|
-
|
2327
|
-
|
2328
|
-
|
2329
|
-
end
|
2336
|
+
num = index + delta.to_i
|
2337
|
+
total = total_pages + num - index
|
2338
|
+
patt = pattern.gsub(/<PAGENUM>/, num.to_s).gsub(/<TOTALPAGENUM>/, total.to_s)
|
2339
|
+
reopen_object(page.contents.first)
|
2330
2340
|
|
2331
|
-
|
2332
|
-
|
2333
|
-
reopen_object(id.contents.first)
|
2334
|
-
case info[:pos]
|
2335
|
-
when :right
|
2341
|
+
case pos
|
2342
|
+
when :left # Write the page number from x.
|
2336
2343
|
w = 0
|
2337
|
-
when :
|
2338
|
-
w = text_width(
|
2339
|
-
when :center
|
2340
|
-
w = text_width(
|
2344
|
+
when :right # Write the page number to x.
|
2345
|
+
w = text_width(patt, size)
|
2346
|
+
when :center # Write the page number around x.
|
2347
|
+
w = text_width(patt, size) / 2.0
|
2341
2348
|
end
|
2342
|
-
add_text(
|
2349
|
+
add_text(x - w, y, patt, size)
|
2343
2350
|
close_object
|
2344
|
-
status =
|
2351
|
+
status = nil if [ :stop_now, :stop_next ].include?(status)
|
2345
2352
|
end
|
2346
2353
|
end
|
2347
2354
|
end
|
@@ -2349,11 +2356,6 @@ class PDF::Writer
|
|
2349
2356
|
end
|
2350
2357
|
private :add_page_numbers
|
2351
2358
|
|
2352
|
-
def clean_up
|
2353
|
-
add_page_numbers
|
2354
|
-
end
|
2355
|
-
private :clean_up
|
2356
|
-
|
2357
2359
|
def preprocess_text(text)
|
2358
2360
|
text
|
2359
2361
|
end
|
@@ -2530,8 +2532,8 @@ class PDF::Writer
|
|
2530
2532
|
class TagAlink
|
2531
2533
|
# The default anchored link style.
|
2532
2534
|
DEFAULT_STYLE = {
|
2533
|
-
:color => Color::Blue,
|
2534
|
-
:text_color => Color::Blue,
|
2535
|
+
:color => Color::RGB::Blue,
|
2536
|
+
:text_color => Color::RGB::Blue,
|
2535
2537
|
:draw_line => true,
|
2536
2538
|
:line_style => { :dash => PDF::Writer::StrokeStyle::SOLID_LINE },
|
2537
2539
|
:factor => 0.05
|
@@ -2542,9 +2544,9 @@ class PDF::Writer
|
|
2542
2544
|
# is expected to be a hash with the following keys:
|
2543
2545
|
#
|
2544
2546
|
# <tt>:color</tt>:: The colour to be applied to the link
|
2545
|
-
# underline. Default is Color::Blue.
|
2547
|
+
# underline. Default is Color::RGB::Blue.
|
2546
2548
|
# <tt>:text_color</tt>:: The colour to be applied to the link text.
|
2547
|
-
# Default is Color::Blue.
|
2549
|
+
# Default is Color::RGB::Blue.
|
2548
2550
|
# <tt>:factor</tt>:: The size of the line, as a multiple of the
|
2549
2551
|
# text height. Default is 0.05.
|
2550
2552
|
# <tt>:draw_line</tt>:: Whether to draw the underline as part of
|
@@ -2691,11 +2693,11 @@ class PDF::Writer
|
|
2691
2693
|
# with <C:bullet>.
|
2692
2694
|
class TagBullet
|
2693
2695
|
# The default bullet color.
|
2694
|
-
DEFAULT_COLOR = Color::Black
|
2696
|
+
DEFAULT_COLOR = Color::RGB::Black
|
2695
2697
|
|
2696
2698
|
class << self
|
2697
2699
|
# Sets the style for <C:bullet> callback bullets that follow.
|
2698
|
-
# Default is Color::Black.
|
2700
|
+
# Default is Color::RGB::Black.
|
2699
2701
|
#
|
2700
2702
|
# Set this to +nil+ to get the default colour.
|
2701
2703
|
attr_accessor :color
|
@@ -2722,17 +2724,17 @@ class PDF::Writer
|
|
2722
2724
|
# A callback function to support drawing of a disc bullet style.
|
2723
2725
|
class TagDisc
|
2724
2726
|
# The default disc bullet foreground.
|
2725
|
-
DEFAULT_FOREGROUND = Color::Black
|
2727
|
+
DEFAULT_FOREGROUND = Color::RGB::Black
|
2726
2728
|
# The default disc bullet background.
|
2727
|
-
DEFAULT_BACKGROUND = Color::White
|
2729
|
+
DEFAULT_BACKGROUND = Color::RGB::White
|
2728
2730
|
class << self
|
2729
2731
|
# The foreground color for <C:disc> bullets. Default is
|
2730
|
-
# Color::Black.
|
2732
|
+
# Color::RGB::Black.
|
2731
2733
|
#
|
2732
2734
|
# Set to +nil+ to get the default color.
|
2733
2735
|
attr_accessor :foreground
|
2734
2736
|
# The background color for <C:disc> bullets. Default is
|
2735
|
-
# Color::White.
|
2737
|
+
# Color::RGB::White.
|
2736
2738
|
#
|
2737
2739
|
# Set to +nil+ to get the default color.
|
2738
2740
|
attr_accessor :background
|