pdf-labels 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/LICENCE +38 -0
- data/Manifest.txt +141 -0
- data/README.txt +72 -0
- data/Rakefile +30 -0
- data/lib/alias.rb +8 -0
- data/lib/glabel_template.rb +36 -0
- data/lib/label.rb +52 -0
- data/lib/layout.rb +13 -0
- data/lib/length_node.rb +47 -0
- data/lib/markup.rb +25 -0
- data/lib/pdf_label_page.rb +171 -0
- data/lib/pdf_labels.rb +6 -0
- data/lib/template.rb +37 -0
- data/templates/avery-iso-templates.xml +222 -0
- data/templates/avery-other-templates.xml +21 -0
- data/templates/avery-us-templates.xml +599 -0
- data/templates/glabels-2.0.dtd +329 -0
- data/templates/misc-iso-templates.xml +434 -0
- data/templates/misc-other-templates.xml +21 -0
- data/templates/misc-us-templates.xml +183 -0
- data/templates/paper-sizes.xml +37 -0
- data/templates/zweckform-iso-templates.xml +197 -0
- data/test/test_pdf_label_page.rb +91 -0
- data/vendor/color.rb +87 -0
- data/vendor/color/cmyk.rb +182 -0
- data/vendor/color/css.rb +27 -0
- data/vendor/color/grayscale.rb +135 -0
- data/vendor/color/hsl.rb +130 -0
- data/vendor/color/palette.rb +15 -0
- data/vendor/color/palette/gimp.rb +107 -0
- data/vendor/color/palette/monocontrast.rb +180 -0
- data/vendor/color/rgb-colors.rb +189 -0
- data/vendor/color/rgb.rb +311 -0
- data/vendor/color/rgb/metallic.rb +28 -0
- data/vendor/color/yiq.rb +78 -0
- data/vendor/pdf/charts.rb +13 -0
- data/vendor/pdf/charts/stddev.rb +433 -0
- data/vendor/pdf/grid.rb +135 -0
- data/vendor/pdf/math.rb +108 -0
- data/vendor/pdf/pagenumbers.rb +288 -0
- data/vendor/pdf/quickref.rb +331 -0
- data/vendor/pdf/simpletable.rb +947 -0
- data/vendor/pdf/techbook.rb +901 -0
- data/vendor/pdf/writer.rb +2801 -0
- data/vendor/pdf/writer/arc4.rb +63 -0
- data/vendor/pdf/writer/fontmetrics.rb +202 -0
- data/vendor/pdf/writer/fonts/Courier-Bold.afm +342 -0
- data/vendor/pdf/writer/fonts/Courier-BoldOblique.afm +342 -0
- data/vendor/pdf/writer/fonts/Courier-Oblique.afm +342 -0
- data/vendor/pdf/writer/fonts/Courier.afm +342 -0
- data/vendor/pdf/writer/fonts/Helvetica-Bold.afm +2827 -0
- data/vendor/pdf/writer/fonts/Helvetica-BoldOblique.afm +2827 -0
- data/vendor/pdf/writer/fonts/Helvetica-Oblique.afm +3051 -0
- data/vendor/pdf/writer/fonts/Helvetica.afm +3051 -0
- data/vendor/pdf/writer/fonts/Symbol.afm +213 -0
- data/vendor/pdf/writer/fonts/Times-Bold.afm +2588 -0
- data/vendor/pdf/writer/fonts/Times-BoldItalic.afm +2384 -0
- data/vendor/pdf/writer/fonts/Times-Italic.afm +2667 -0
- data/vendor/pdf/writer/fonts/Times-Roman.afm +2419 -0
- data/vendor/pdf/writer/fonts/ZapfDingbats.afm +225 -0
- data/vendor/pdf/writer/graphics.rb +813 -0
- data/vendor/pdf/writer/graphics/imageinfo.rb +365 -0
- data/vendor/pdf/writer/lang.rb +44 -0
- data/vendor/pdf/writer/lang/en.rb +104 -0
- data/vendor/pdf/writer/object.rb +23 -0
- data/vendor/pdf/writer/object/action.rb +40 -0
- data/vendor/pdf/writer/object/annotation.rb +42 -0
- data/vendor/pdf/writer/object/catalog.rb +39 -0
- data/vendor/pdf/writer/object/contents.rb +69 -0
- data/vendor/pdf/writer/object/destination.rb +40 -0
- data/vendor/pdf/writer/object/encryption.rb +53 -0
- data/vendor/pdf/writer/object/font.rb +68 -0
- data/vendor/pdf/writer/object/fontdescriptor.rb +34 -0
- data/vendor/pdf/writer/object/fontencoding.rb +40 -0
- data/vendor/pdf/writer/object/image.rb +308 -0
- data/vendor/pdf/writer/object/info.rb +79 -0
- data/vendor/pdf/writer/object/outline.rb +30 -0
- data/vendor/pdf/writer/object/outlines.rb +30 -0
- data/vendor/pdf/writer/object/page.rb +195 -0
- data/vendor/pdf/writer/object/pages.rb +115 -0
- data/vendor/pdf/writer/object/procset.rb +46 -0
- data/vendor/pdf/writer/object/viewerpreferences.rb +74 -0
- data/vendor/pdf/writer/ohash.rb +58 -0
- data/vendor/pdf/writer/oreader.rb +25 -0
- data/vendor/pdf/writer/state.rb +48 -0
- data/vendor/pdf/writer/strokestyle.rb +140 -0
- data/vendor/transaction/simple.rb +693 -0
- data/vendor/transaction/simple/group.rb +133 -0
- data/vendor/transaction/simple/threadsafe.rb +52 -0
- data/vendor/transaction/simple/threadsafe/group.rb +23 -0
- data/vendor/xml-mapping/ChangeLog +128 -0
- data/vendor/xml-mapping/LICENSE +56 -0
- data/vendor/xml-mapping/README +386 -0
- data/vendor/xml-mapping/README_XPATH +175 -0
- data/vendor/xml-mapping/Rakefile +214 -0
- data/vendor/xml-mapping/TODO.txt +32 -0
- data/vendor/xml-mapping/doc/xpath_impl_notes.txt +119 -0
- data/vendor/xml-mapping/examples/company.rb +34 -0
- data/vendor/xml-mapping/examples/company.xml +26 -0
- data/vendor/xml-mapping/examples/company_usage.intin.rb +19 -0
- data/vendor/xml-mapping/examples/company_usage.intout +39 -0
- data/vendor/xml-mapping/examples/order.rb +61 -0
- data/vendor/xml-mapping/examples/order.xml +54 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced.rb +7 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced.xml +9 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced_usage.intin.rb +12 -0
- data/vendor/xml-mapping/examples/order_signature_enhanced_usage.intout +16 -0
- data/vendor/xml-mapping/examples/order_usage.intin.rb +73 -0
- data/vendor/xml-mapping/examples/order_usage.intout +147 -0
- data/vendor/xml-mapping/examples/time_augm.intin.rb +19 -0
- data/vendor/xml-mapping/examples/time_augm.intout +23 -0
- data/vendor/xml-mapping/examples/time_node.rb +27 -0
- data/vendor/xml-mapping/examples/xpath_create_new.intin.rb +85 -0
- data/vendor/xml-mapping/examples/xpath_create_new.intout +181 -0
- data/vendor/xml-mapping/examples/xpath_docvsroot.intin.rb +30 -0
- data/vendor/xml-mapping/examples/xpath_docvsroot.intout +34 -0
- data/vendor/xml-mapping/examples/xpath_ensure_created.intin.rb +62 -0
- data/vendor/xml-mapping/examples/xpath_ensure_created.intout +114 -0
- data/vendor/xml-mapping/examples/xpath_pathological.intin.rb +42 -0
- data/vendor/xml-mapping/examples/xpath_pathological.intout +56 -0
- data/vendor/xml-mapping/examples/xpath_usage.intin.rb +51 -0
- data/vendor/xml-mapping/examples/xpath_usage.intout +57 -0
- data/vendor/xml-mapping/install.rb +40 -0
- data/vendor/xml-mapping/lib/xml/mapping.rb +14 -0
- data/vendor/xml-mapping/lib/xml/mapping/base.rb +571 -0
- data/vendor/xml-mapping/lib/xml/mapping/standard_nodes.rb +343 -0
- data/vendor/xml-mapping/lib/xml/mapping/version.rb +8 -0
- data/vendor/xml-mapping/lib/xml/xxpath.rb +354 -0
- data/vendor/xml-mapping/test/all_tests.rb +6 -0
- data/vendor/xml-mapping/test/company.rb +56 -0
- data/vendor/xml-mapping/test/documents_folders.rb +33 -0
- data/vendor/xml-mapping/test/fixtures/bookmarks1.xml +24 -0
- data/vendor/xml-mapping/test/fixtures/company1.xml +85 -0
- data/vendor/xml-mapping/test/fixtures/documents_folders.xml +71 -0
- data/vendor/xml-mapping/test/fixtures/documents_folders2.xml +30 -0
- data/vendor/xml-mapping/test/multiple_mappings.rb +80 -0
- data/vendor/xml-mapping/test/tests_init.rb +2 -0
- data/vendor/xml-mapping/test/xml_mapping_adv_test.rb +84 -0
- data/vendor/xml-mapping/test/xml_mapping_test.rb +201 -0
- data/vendor/xml-mapping/test/xpath_test.rb +273 -0
- metadata +191 -0
data/vendor/pdf/grid.rb
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
# PDF::Writer for Ruby.
|
4
|
+
# http://rubyforge.org/projects/ruby-pdf/
|
5
|
+
# Copyright 2003 - 2005 Austin Ziegler.
|
6
|
+
#
|
7
|
+
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
8
|
+
# for full licensing information.
|
9
|
+
#
|
10
|
+
# $Id: grid.rb,v 1.2 2005/08/12 03:19:44 austin Exp $
|
11
|
+
#++
|
12
|
+
require 'pdf/writer'
|
13
|
+
|
14
|
+
class PDF::Grid
|
15
|
+
# The scale of the grid lines in one direction. The scale always starts
|
16
|
+
# from the top or left of the page, depending on whether this is the X
|
17
|
+
# axis or Y axis. Minor lines are drawn before major lines.
|
18
|
+
class Scale
|
19
|
+
def initialize
|
20
|
+
@initial_gap = 0
|
21
|
+
|
22
|
+
yield self if block_given?
|
23
|
+
end
|
24
|
+
|
25
|
+
# The initial gap between the top or left of the page and the first
|
26
|
+
# grid line.
|
27
|
+
attr_accessor :initial_gap
|
28
|
+
# Major grid line style. The default is unset, which uses the current
|
29
|
+
# line style.
|
30
|
+
attr_accessor :major_style
|
31
|
+
# Major grid line colour. The default is unset, which uses the current
|
32
|
+
# line colour.
|
33
|
+
attr_accessor :major_color
|
34
|
+
# The number of units between each major line.
|
35
|
+
attr_accessor :major_step
|
36
|
+
# Minor grid line style. The default is unset, which uses the current
|
37
|
+
# line style.
|
38
|
+
attr_accessor :minor_style
|
39
|
+
# Minor grid line colour. The default is unset, which uses the current
|
40
|
+
# line colour.
|
41
|
+
attr_accessor :minor_color
|
42
|
+
# The number of units between each minor line.
|
43
|
+
attr_accessor :minor_step
|
44
|
+
end
|
45
|
+
|
46
|
+
def initialize
|
47
|
+
yield self if block_given?
|
48
|
+
end
|
49
|
+
|
50
|
+
# The X axis scale of the grid. X axis lines are drawn first.
|
51
|
+
attr_accessor :x_scale
|
52
|
+
# The Y axis scale of the grid. X axis lines are drawn first.
|
53
|
+
attr_accessor :y_scale
|
54
|
+
|
55
|
+
# Renders the grid on the document.
|
56
|
+
def render_on(pdf)
|
57
|
+
pdf.save_state
|
58
|
+
|
59
|
+
if @x_scale.minor_step and @x_scale.minor_step > 0
|
60
|
+
pdf.stroke_color! @x_scale.minor_color if @x_scale.minor_color
|
61
|
+
pdf.stroke_style! @x_scale.minor_style if @x_scale.minor_style
|
62
|
+
|
63
|
+
start = @x_scale.initial_gap
|
64
|
+
step = @x_scale.minor_step
|
65
|
+
|
66
|
+
start.step(pdf.page_width, step) do |x|
|
67
|
+
line(x, 0, x, pdf.page_height).stroke
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
if @y_scale.minor_step and @y_scale.minor_step > 0
|
72
|
+
pdf.stroke_color! @y_scale.minor_color if @y_scale.minor_color
|
73
|
+
pdf.stroke_style! @y_scale.minor_style if @y_scale.minor_style
|
74
|
+
|
75
|
+
start = pdf.page_height - @y_scale.initial_gap
|
76
|
+
step = -@y_scale.minor_step
|
77
|
+
|
78
|
+
start.step(0, step) do |y|
|
79
|
+
line(0, y, pdf.page_width, y).stroke
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
if @x_scale.major_step and @x_scale.major_step > 0
|
84
|
+
pdf.stroke_color! @x_scale.major_color if @x_scale.major_color
|
85
|
+
pdf.stroke_style! @x_scale.major_style if @x_scale.major_style
|
86
|
+
|
87
|
+
start = @x_scale.initial_gap
|
88
|
+
step = @x_scale.major_step
|
89
|
+
|
90
|
+
start.step(pdf.page_width, step) do |x|
|
91
|
+
line(x, 0, x, pdf.page_height).stroke
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
if @y_scale.major_step and @y_scale.major_step > 0
|
96
|
+
pdf.stroke_color! @y_scale.major_color if @y_scale.major_color
|
97
|
+
pdf.stroke_style! @y_scale.major_style if @y_scale.major_style
|
98
|
+
|
99
|
+
start = pdf.page_height - @y_scale.initial_gap
|
100
|
+
step = -@y_scale.major_step
|
101
|
+
|
102
|
+
start.step(0, step) do |y|
|
103
|
+
line(0, y, pdf.page_width, y).stroke
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# stroke_color(Color::::RGB::Grey60)
|
108
|
+
# y = absolute_top_margin
|
109
|
+
# line(0, y, @page_width, y).stroke
|
110
|
+
# line(0, @bottom_margin, @page_width, @bottom_margin).stroke
|
111
|
+
# line(@left_margin, 0, @left_margin, @page_height).stroke
|
112
|
+
# x = absolute_right_margin
|
113
|
+
# line(x, 0, x, @page_height).stroke
|
114
|
+
# y = @page_height / 2.0
|
115
|
+
# line(0, y, @left_margin, y).stroke
|
116
|
+
# x = absolute_right_margin
|
117
|
+
# line(x, y, @page_width, y).stroke
|
118
|
+
# x = @page_width / 2.0
|
119
|
+
# line(x, 0, x, @bottom_margin).stroke
|
120
|
+
# y = absolute_top_margin
|
121
|
+
# line(x, y, x, @page_height).stroke
|
122
|
+
|
123
|
+
# 0.step(@page_width, 10) do |x|
|
124
|
+
# add_text(x, 0, 3, x.to_s)
|
125
|
+
# add_text(x, @page_height - 3, 3, x.to_s)
|
126
|
+
# end
|
127
|
+
|
128
|
+
# 0.step(@page_height, 10) do |y|
|
129
|
+
# add_text(0, y, 3, y.to_s)
|
130
|
+
# add_text(@page_width - 5, y, 3, y.to_s)
|
131
|
+
# end
|
132
|
+
|
133
|
+
restore_state
|
134
|
+
end
|
135
|
+
end
|
data/vendor/pdf/math.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
#--
|
2
|
+
# PDF::Writer for Ruby.
|
3
|
+
# http://rubyforge.org/projects/ruby-pdf/
|
4
|
+
# Copyright 2003 - 2005 Austin Ziegler.
|
5
|
+
#
|
6
|
+
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
|
+
# for full licensing information.
|
8
|
+
#
|
9
|
+
# $Id: math.rb,v 1.3 2005/05/16 20:44:34 austin Exp $
|
10
|
+
#++
|
11
|
+
# Encapsulate some of the mathematical calculations that need to be
|
12
|
+
# performed when working with PDF documents. All angles in PDF::Writer are
|
13
|
+
# measured in degrees, but all angles in PDF documents are in radians. The
|
14
|
+
# standard conversions between radians, degrees, and gradians are
|
15
|
+
# provided.
|
16
|
+
#
|
17
|
+
# As with the Perl implementations of these conversions, they will be
|
18
|
+
# wrapped in the range of the target measurement (0..PI2 for radians,
|
19
|
+
# 0..360 for degrees, and 0..400 for gradians). To prevent this wrapping,
|
20
|
+
# provide a false value for the +wrap+ parameter.
|
21
|
+
#
|
22
|
+
# To wrap these values manually, use #rad2rad, #deg2deg, or #grad2grad.
|
23
|
+
module PDF::Math
|
24
|
+
class << self
|
25
|
+
PI2 = ::Math::PI * 2.0
|
26
|
+
|
27
|
+
# One degree of arc measured in terms of radians.
|
28
|
+
DR = PI2 / 360.0
|
29
|
+
# One radian of arc, measured in terms of degrees.
|
30
|
+
RD = 360 / PI2
|
31
|
+
# One degree of arc, measured in terms of gradians.
|
32
|
+
DG = 400 / 360.0
|
33
|
+
# One gradian of arc, measured in terms of degrees.
|
34
|
+
GD = 360 / 400.0
|
35
|
+
# One radian of arc, measured in terms of gradians.
|
36
|
+
RG = 400 / PI2
|
37
|
+
# One gradian of arc, measured in terms of radians.
|
38
|
+
GR = PI2 / 400.0
|
39
|
+
|
40
|
+
# Truncate the remainder.
|
41
|
+
def remt(num, den)
|
42
|
+
num - den * (num / den.to_f).to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
# Wrap radian values within the range of radians (0..PI2).
|
46
|
+
def rad2rad(rad)
|
47
|
+
remt(rad, PI2)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Wrap degree values within the range of degrees (0..360).
|
51
|
+
def deg2deg(deg)
|
52
|
+
remt(deg, 360)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Wrap gradian values within the range of gradians (0..400).
|
56
|
+
def grad2grad(grad)
|
57
|
+
remt(grad, 400)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Convert degrees to radians. The value will be constrained to the
|
61
|
+
# range of radians (0..PI2) unless +wrap+ is false.
|
62
|
+
def deg2rad(deg, wrap = true)
|
63
|
+
rad = DR * deg
|
64
|
+
rad = rad2rad(rad) if wrap
|
65
|
+
rad
|
66
|
+
end
|
67
|
+
|
68
|
+
# Convert degrees to gradians. The value will be constrained to the
|
69
|
+
# range of gradians (0..400) unless +wrap+ is false.
|
70
|
+
def deg2grad(deg, wrap = true)
|
71
|
+
grad = DG * deg
|
72
|
+
grad = grad2grad(grad) if wrap
|
73
|
+
grad
|
74
|
+
end
|
75
|
+
|
76
|
+
# Convert radians to degrees. The value will be constrained to the
|
77
|
+
# range of degrees (0..360) unless +wrap+ is false.
|
78
|
+
def rad2deg(rad, wrap = true)
|
79
|
+
deg = RD * rad
|
80
|
+
deg = deg2deg(deg) if wrap
|
81
|
+
deg
|
82
|
+
end
|
83
|
+
|
84
|
+
# Convert radians to gradians. The value will be constrained to the
|
85
|
+
# range of gradians (0..400) unless +wrap+ is false.
|
86
|
+
def rad2grad(rad, wrap = true)
|
87
|
+
grad = RG * rad
|
88
|
+
grad = grad2grad(grad) if wrap
|
89
|
+
grad
|
90
|
+
end
|
91
|
+
|
92
|
+
# Convert gradians to degrees. The value will be constrained to the
|
93
|
+
# range of degrees (0..360) unless +wrap+ is false.
|
94
|
+
def grad2deg(grad, wrap = true)
|
95
|
+
deg = GD * grad
|
96
|
+
deg = deg2deg(deg) if wrap
|
97
|
+
deg
|
98
|
+
end
|
99
|
+
|
100
|
+
# Convert gradians to radians. The value will be constrained to the
|
101
|
+
# range of radians (0..PI2) unless +wrap+ is false.
|
102
|
+
def grad2rad(grad, wrap = true)
|
103
|
+
rad = GR * grad
|
104
|
+
rad = rad2rad(rad) if wrap
|
105
|
+
rad
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,288 @@
|
|
1
|
+
#--
|
2
|
+
# PDF::Writer for Ruby.
|
3
|
+
# http://rubyforge.org/projects/ruby-pdf/
|
4
|
+
# Copyright 2003 - 2005 Austin Ziegler.
|
5
|
+
#
|
6
|
+
# Licensed under a MIT-style licence. See LICENCE in the main distribution
|
7
|
+
# for full licensing information.
|
8
|
+
#
|
9
|
+
# $Id: pagenumbers.rb,v 1.3 2005/10/12 14:41:40 austin Exp $
|
10
|
+
#++
|
11
|
+
require 'pdf/writer'
|
12
|
+
|
13
|
+
# This class will create tables with a relatively simple API and internal
|
14
|
+
# implementation.
|
15
|
+
class PDF::PageNumbers
|
16
|
+
VERSION = '1.1.4'
|
17
|
+
|
18
|
+
# Creates a page numbering object. The
|
19
|
+
def initialize(x, y, options = {})
|
20
|
+
@x = x
|
21
|
+
@y = y
|
22
|
+
|
23
|
+
@font = options[:font]
|
24
|
+
@font_encoding = options[:font_encoding]
|
25
|
+
@font_size = options[:font_size]
|
26
|
+
@alignment = options[:alignment] || :left
|
27
|
+
@pattern = options[:pattern] || "<PAGE> of <TOTAL>"
|
28
|
+
@first_page_number = options[:first_page_number] || 1
|
29
|
+
|
30
|
+
@start_pages = []
|
31
|
+
@stop_pages = []
|
32
|
+
|
33
|
+
yield self if block_given?
|
34
|
+
end
|
35
|
+
|
36
|
+
# The +x+ position for the page numbering. This will be used as a
|
37
|
+
# relative position based on <tt>#alignment</tt>.
|
38
|
+
attr_accessor :x
|
39
|
+
# The +y+ position for the page numbering.
|
40
|
+
attr_accessor :y
|
41
|
+
# The font that will be used for rendering the page numbers. If not
|
42
|
+
# specified, the font currently active at the time of page rendering
|
43
|
+
# will be used.
|
44
|
+
attr_accessor :font
|
45
|
+
# The font encoding for rendering page numbers. If not specified, the
|
46
|
+
# default font encoding will be used.
|
47
|
+
attr_accessor :font_encoding
|
48
|
+
# The size of the font for rendering page numbers. If not specified, the
|
49
|
+
# current font size at the time of page rendering will be used.
|
50
|
+
attr_accessor :font_size
|
51
|
+
# The alignment of the page numbers relative to <tt>#x</tt>. The options
|
52
|
+
# are <tt>:left</tt> (the text *begins* at <tt>#x</tt>),
|
53
|
+
# <tt>:right</tt> (the text *ends* at <tt>#x</tt>), and <tt>:center</tt>
|
54
|
+
# (the text *surrounds* <tt>#x</tt>). The default alignment is
|
55
|
+
# <tt>:left</tt>.
|
56
|
+
attr_accessor :alignment
|
57
|
+
# The page numbering pattern object. This object must either be a String
|
58
|
+
# or an object that responds to #apply(page, total). String patterns
|
59
|
+
# will be searched for <PAGE> and <TOTAL> and these strings will be
|
60
|
+
# replaced with the current page number and the total page number values
|
61
|
+
# in Arabic (1, 2, 3, 4, ...) numeral values.
|
62
|
+
#
|
63
|
+
# Pattern objects will have their #apply method called with the current
|
64
|
+
# page number and the total page number values. They will be expected to
|
65
|
+
# return a String for writing on the page.
|
66
|
+
#
|
67
|
+
# The default pattern is "<PAGE> of <TOTAL>".
|
68
|
+
attr_accessor :pattern
|
69
|
+
# The page numbering style. This is a number "generator" object that
|
70
|
+
# responds to #[] and returns a string representing that number.
|
71
|
+
# Symbolic values <tt>:default</tt>
|
72
|
+
#
|
73
|
+
# The
|
74
|
+
# values <tt>:arabic</tt> and <tt>:roman</tt>
|
75
|
+
attr_accessor :numbering_style
|
76
|
+
# The first page number is the value that will be used as the
|
77
|
+
# generic page number reported by the PDF document during rendering.
|
78
|
+
# This allows physical page 10 to be presented as page 1.
|
79
|
+
attr_accessor :first_page_number
|
80
|
+
|
81
|
+
# Starts page numbering with this page numbering object. The page
|
82
|
+
# numbering will begin on +first_page+, which will be either
|
83
|
+
# <tt>:this_page</tt> or <tt>:next_page</tt>.
|
84
|
+
def start(pdf, first_page = :this_page)
|
85
|
+
end
|
86
|
+
|
87
|
+
.blist {{{
|
88
|
+
<b>:this_page</b> will add the object just to the current page.
|
89
|
+
<b>:all_pages</b> will add the object to the current and all following pages.
|
90
|
+
<b>:even_pages</b> will add the object to following even pages, including the current page if it is an even page.
|
91
|
+
<b>:odd_pages</b> will add the object to following odd pages, including the current page if it is an odd page.
|
92
|
+
<b>:all_following_pages</b> will add the object to the next page created and all following pages.
|
93
|
+
<b>:following_even_pages</b> will add to the next even page created and all following even pages.
|
94
|
+
<b>:following_odd_pages</b> will add to the next odd page created and all following odd pages.
|
95
|
+
.endblist }}}
|
96
|
+
|
97
|
+
def restart_numbering(pdf, page = :this_page)
|
98
|
+
end
|
99
|
+
|
100
|
+
def stop_on_current_page(pdf)
|
101
|
+
end
|
102
|
+
|
103
|
+
def stop_on_next_page(pdf)
|
104
|
+
end
|
105
|
+
|
106
|
+
#
|
107
|
+
def start(pdf, on_page = :current)
|
108
|
+
end
|
109
|
+
|
110
|
+
def stop(pdf, on_page = :next)
|
111
|
+
end
|
112
|
+
|
113
|
+
def render(pdf, debug = false)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Put page numbers on the pages from the current page. Place them
|
117
|
+
# relative to the coordinates <tt>(x, y)</tt> with the text horizontally
|
118
|
+
# relative according to +pos+, which may be <tt>:left</tt>,
|
119
|
+
# <tt>:right</tt>, or <tt>:center</tt>. The page numbers will be written
|
120
|
+
# on each page using +pattern+.
|
121
|
+
#
|
122
|
+
# When +pattern+ is rendered, <PAGENUM> will be replaced with the
|
123
|
+
# current page number; <TOTALPAGENUM> will be replaced with the total
|
124
|
+
# number of pages in the page numbering scheme. The default +pattern+ is
|
125
|
+
# "<PAGENUM> of <TOTALPAGENUM>".
|
126
|
+
#
|
127
|
+
# If +starting+ is non-nil, this is the first page number. The number of
|
128
|
+
# total pages will be adjusted to account for this.
|
129
|
+
#
|
130
|
+
# Each time page numbers are started, a new page number scheme will be
|
131
|
+
# started. The scheme number will be returned.
|
132
|
+
def start_page_numbering(x, y, size, pos = nil, pattern = nil, starting = nil)
|
133
|
+
pos ||= :left
|
134
|
+
pattern ||= "<PAGENUM> of <TOTALPAGENUM>"
|
135
|
+
|
136
|
+
@page_numbering ||= []
|
137
|
+
@page_numbering << (o = {})
|
138
|
+
|
139
|
+
page = @pageset.size
|
140
|
+
o[page] = {
|
141
|
+
:x => x,
|
142
|
+
:y => y,
|
143
|
+
:pos => pos,
|
144
|
+
:pattern => pattern,
|
145
|
+
:starting => starting,
|
146
|
+
:size => size
|
147
|
+
}
|
148
|
+
@page_numbering.index(o)
|
149
|
+
end
|
150
|
+
|
151
|
+
# Given a particular generic page number +page_num+ (numbered
|
152
|
+
# sequentially from the beginning of the page set), return the page
|
153
|
+
# number under a particular page numbering +scheme+. Returns +nil+ if
|
154
|
+
# page numbering is not turned on.
|
155
|
+
def which_page_number(page_num, scheme = 0)
|
156
|
+
return nil unless @page_numbering
|
157
|
+
|
158
|
+
num = 0
|
159
|
+
start = start_num = 1
|
160
|
+
|
161
|
+
@page_numbering[scheme].each do |kk, vv|
|
162
|
+
if kk <= page_num
|
163
|
+
if vv.kind_of?(Hash)
|
164
|
+
unless vv[:starting].nil?
|
165
|
+
start = vv[:starting]
|
166
|
+
start_num = kk
|
167
|
+
num = page_num - start_num + start
|
168
|
+
end
|
169
|
+
else
|
170
|
+
num = 0
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
num
|
175
|
+
end
|
176
|
+
|
177
|
+
# Stop page numbering. Returns +false+ if page numbering is off.
|
178
|
+
#
|
179
|
+
# If +stop_total+ is true, then then the totaling of pages for this page
|
180
|
+
# numbering +scheme+ will be stopped as well. If +stop_at+ is
|
181
|
+
# <tt>:current</tt>, then the page numbering will stop at this page;
|
182
|
+
# otherwise, it will stop at the next page.
|
183
|
+
def stop_page_numbering(stop_total = false, stop_at = :current, scheme = 0)
|
184
|
+
return false unless @page_numbering
|
185
|
+
|
186
|
+
page = @pageset.size
|
187
|
+
|
188
|
+
if stop_at != :current and @page_numbering[scheme][page].kind_of?(Hash)
|
189
|
+
if stop_total
|
190
|
+
@page_numbering[scheme][page]["stoptn"] = true
|
191
|
+
else
|
192
|
+
@page_numbering[scheme][page]["stopn"] = true
|
193
|
+
end
|
194
|
+
else
|
195
|
+
if stop_total
|
196
|
+
@page_numbering[scheme][page] = "stopt"
|
197
|
+
else
|
198
|
+
@page_numbering[scheme][page] = "stop"
|
199
|
+
end
|
200
|
+
|
201
|
+
@page_numbering[scheme][page] << "n" unless stop_at == :current
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
def page_number_search(label, tmp)
|
206
|
+
tmp.each do |scheme, v|
|
207
|
+
if v.kind_of?(Hash)
|
208
|
+
return scheme unless v[label].nil?
|
209
|
+
else
|
210
|
+
return scheme if v == label
|
211
|
+
end
|
212
|
+
end
|
213
|
+
0
|
214
|
+
end
|
215
|
+
private :page_number_search
|
216
|
+
|
217
|
+
def add_page_numbers
|
218
|
+
# This will go through the @page_numbering array and add the page
|
219
|
+
# numbers are required.
|
220
|
+
unless @page_numbering.nil?
|
221
|
+
total_pages1 = @pageset.size
|
222
|
+
tmp1 = @page_numbering
|
223
|
+
status = 0
|
224
|
+
info = {}
|
225
|
+
tmp1.each do |tmp|
|
226
|
+
# Do each of the page numbering systems. First, find the total
|
227
|
+
# pages for this one.
|
228
|
+
k = page_number_search("stopt", tmp)
|
229
|
+
if k and k > 0
|
230
|
+
total_pages = k - 1
|
231
|
+
else
|
232
|
+
l = page_number_search("stoptn", tmp)
|
233
|
+
if l and l > 0
|
234
|
+
total_pages = l
|
235
|
+
else
|
236
|
+
total_pages = total_pages1
|
237
|
+
end
|
238
|
+
end
|
239
|
+
@pageset.each_with_index do |id, page_num|
|
240
|
+
next if page_num == 0
|
241
|
+
if tmp[page_num].kind_of?(Hash) # This must be the starting page #s
|
242
|
+
status = 1
|
243
|
+
info = tmp[page_num]
|
244
|
+
if info[:starting]
|
245
|
+
info[:delta] = info[:starting] - page_num
|
246
|
+
else
|
247
|
+
info[:delta] = page_num
|
248
|
+
end
|
249
|
+
# Also check for the special case of the numbering stopping
|
250
|
+
# and starting on the same page.
|
251
|
+
status = 2 if info["stopn"] or info["stoptn"]
|
252
|
+
elsif tmp[page_num] == "stop" or tmp[page_num] == "stopt"
|
253
|
+
status = 0 # we are stopping page numbers
|
254
|
+
elsif status == 1 and (tmp[page_num] == "stoptn" or tmp[page_num] == "stopn")
|
255
|
+
status = 2
|
256
|
+
end
|
257
|
+
|
258
|
+
if status != 0
|
259
|
+
# Add the page numbering to this page
|
260
|
+
unless info[:delta]
|
261
|
+
num = page_num
|
262
|
+
else
|
263
|
+
num = page_num + info[:delta]
|
264
|
+
end
|
265
|
+
|
266
|
+
total = total_pages + num - page_num
|
267
|
+
pat = info[:pattern].gsub(/<PAGENUM>/, num.to_s).gsub(/<TOTALPAGENUM>/, total.to_s)
|
268
|
+
reopen_object(id.contents.first)
|
269
|
+
|
270
|
+
case info[:pos]
|
271
|
+
when :left # Write the page number from x.
|
272
|
+
w = 0
|
273
|
+
when :right # Write the page number to x.
|
274
|
+
w = text_width(pat, info[:size])
|
275
|
+
when :center # Write the page number around x.
|
276
|
+
w = text_width(pat, info[:size]) / 2.0
|
277
|
+
end
|
278
|
+
add_text(info[:x] - w, info[:y], pat, info[:size])
|
279
|
+
close_object
|
280
|
+
status = 0 if status == 2
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
private :add_page_numbers
|
287
|
+
|
288
|
+
end
|