pdf-writer 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|