pdf-writer 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +44 -0
- data/LICENCE +118 -0
- data/README +32 -0
- data/bin/loader +54 -0
- data/bin/manual +22 -0
- data/bin/manual.bat +2 -0
- data/demo/chunkybacon.rb +28 -0
- data/demo/code.rb +63 -0
- data/demo/colornames.rb +843 -0
- data/demo/demo.rb +65 -0
- data/demo/gettysburg.rb +58 -0
- data/demo/hello.rb +18 -0
- data/demo/individual-i.rb +81 -0
- data/demo/pac.rb +62 -0
- data/demo/pagenumber.rb +67 -0
- data/demo/qr-language.rb +573 -0
- data/demo/qr-library.rb +371 -0
- data/images/chunkybacon.jpg +0 -0
- data/images/chunkybacon.png +0 -0
- data/images/pdfwriter-icon.jpg +0 -0
- data/images/pdfwriter-small.jpg +0 -0
- data/lib/pdf/charts.rb +13 -0
- data/lib/pdf/charts/stddev.rb +431 -0
- data/lib/pdf/grid.rb +135 -0
- data/lib/pdf/math.rb +108 -0
- data/lib/pdf/quickref.rb +330 -0
- data/lib/pdf/simpletable.rb +946 -0
- data/lib/pdf/techbook.rb +890 -0
- data/lib/pdf/writer.rb +2661 -0
- data/lib/pdf/writer/arc4.rb +63 -0
- data/lib/pdf/writer/fontmetrics.rb +201 -0
- data/lib/pdf/writer/fonts/Courier-Bold.afm +342 -0
- data/lib/pdf/writer/fonts/Courier-BoldOblique.afm +342 -0
- data/lib/pdf/writer/fonts/Courier-Oblique.afm +342 -0
- data/lib/pdf/writer/fonts/Courier.afm +342 -0
- data/lib/pdf/writer/fonts/Helvetica-Bold.afm +2827 -0
- data/lib/pdf/writer/fonts/Helvetica-BoldOblique.afm +2827 -0
- data/lib/pdf/writer/fonts/Helvetica-Oblique.afm +3051 -0
- data/lib/pdf/writer/fonts/Helvetica.afm +3051 -0
- data/lib/pdf/writer/fonts/MustRead.html +1 -0
- data/lib/pdf/writer/fonts/Symbol.afm +213 -0
- data/lib/pdf/writer/fonts/Times-Bold.afm +2588 -0
- data/lib/pdf/writer/fonts/Times-BoldItalic.afm +2384 -0
- data/lib/pdf/writer/fonts/Times-Italic.afm +2667 -0
- data/lib/pdf/writer/fonts/Times-Roman.afm +2419 -0
- data/lib/pdf/writer/fonts/ZapfDingbats.afm +225 -0
- data/lib/pdf/writer/graphics.rb +727 -0
- data/lib/pdf/writer/graphics/imageinfo.rb +365 -0
- data/lib/pdf/writer/lang.rb +43 -0
- data/lib/pdf/writer/lang/en.rb +77 -0
- data/lib/pdf/writer/object.rb +23 -0
- data/lib/pdf/writer/object/action.rb +40 -0
- data/lib/pdf/writer/object/annotation.rb +42 -0
- data/lib/pdf/writer/object/catalog.rb +39 -0
- data/lib/pdf/writer/object/contents.rb +68 -0
- data/lib/pdf/writer/object/destination.rb +40 -0
- data/lib/pdf/writer/object/encryption.rb +53 -0
- data/lib/pdf/writer/object/font.rb +76 -0
- data/lib/pdf/writer/object/fontdescriptor.rb +34 -0
- data/lib/pdf/writer/object/fontencoding.rb +39 -0
- data/lib/pdf/writer/object/image.rb +168 -0
- data/lib/pdf/writer/object/info.rb +55 -0
- data/lib/pdf/writer/object/outline.rb +30 -0
- data/lib/pdf/writer/object/outlines.rb +30 -0
- data/lib/pdf/writer/object/page.rb +195 -0
- data/lib/pdf/writer/object/pages.rb +115 -0
- data/lib/pdf/writer/object/procset.rb +46 -0
- data/lib/pdf/writer/object/viewerpreferences.rb +74 -0
- data/lib/pdf/writer/ohash.rb +58 -0
- data/lib/pdf/writer/oreader.rb +25 -0
- data/lib/pdf/writer/state.rb +48 -0
- data/lib/pdf/writer/strokestyle.rb +138 -0
- data/manual.pwd +5151 -0
- metadata +147 -0
@@ -0,0 +1,365 @@
|
|
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
|
+
# This file is also licensed under standard Ruby licensing provisions: the
|
10
|
+
# Ruby licence and the GNU General Public Licence, version 2 or later.
|
11
|
+
#
|
12
|
+
# $Id: imageinfo.rb,v 1.2 2005/05/16 03:59:21 austin Exp $
|
13
|
+
#++
|
14
|
+
require 'pdf/writer/oreader'
|
15
|
+
|
16
|
+
# This is based on ImageSize, by Keisuke Minami <keisuke@rccn.com>. It can
|
17
|
+
# be found at http://www.rubycgi.org/tools/index.en.htm
|
18
|
+
#
|
19
|
+
# This has been integrated into PDF::Writer because as yet there has been
|
20
|
+
# no response to emails asking for my extensions to be integrated and a
|
21
|
+
# RubyGem package to be made available.
|
22
|
+
class PDF::Writer::Graphics::ImageInfo
|
23
|
+
# Image Format Constants
|
24
|
+
module Formats
|
25
|
+
OTHER = "OTHER"
|
26
|
+
GIF = "GIF" # CompuServe GIF87a and GIF89a images.
|
27
|
+
PNG = "PNG" # Portable Network Graphics, PNG
|
28
|
+
JPEG = "JPEG" # JPEG
|
29
|
+
BMP = "BMP" # Windows or OS/2 Bitmaps
|
30
|
+
PPM = "PPM" # PPM is like PBM, PGM, & XV
|
31
|
+
PBM = "PBM"
|
32
|
+
PGM = "PGM"
|
33
|
+
# XV = "XV" # Not supported
|
34
|
+
TIFF = "TIFF" # TIFF formats
|
35
|
+
XBM = "XBM" # X Bitmap
|
36
|
+
XPM = "XPM" # X Pixmap
|
37
|
+
PSD = "PSD" # PhotoShop
|
38
|
+
PCX = "PCX" # PCX Bitmap
|
39
|
+
SWF = "SWF" # Flash
|
40
|
+
end
|
41
|
+
Type = Formats
|
42
|
+
|
43
|
+
class << self
|
44
|
+
def formats
|
45
|
+
Formats.constants
|
46
|
+
end
|
47
|
+
alias :type_list :formats
|
48
|
+
end
|
49
|
+
|
50
|
+
JPEG_SOF_BLOCKS = %W(\xc0 \xc1 \xc2 \xc3 \xc5 \xc6 \xc7 \xc9 \xca \xcb \xcd \xce \xcf)
|
51
|
+
JPEG_APP_BLOCKS = %W(\xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef)
|
52
|
+
|
53
|
+
# Receive image & make size. argument is image String or IO
|
54
|
+
def initialize(data, format = nil)
|
55
|
+
@data = data.dup rescue data
|
56
|
+
@info = {}
|
57
|
+
|
58
|
+
if @data.kind_of?(IO)
|
59
|
+
@top = @data.read(128)
|
60
|
+
@data.seek(0, 0)
|
61
|
+
# Define Singleton-method definition to IO (byte, offset)
|
62
|
+
def @data.read_o(length = 1, offset = nil)
|
63
|
+
self.seek(offset, 0) if offset
|
64
|
+
ret = self.read(length)
|
65
|
+
raise "cannot read!!" unless ret
|
66
|
+
ret
|
67
|
+
end
|
68
|
+
elsif @data.is_a?(String)
|
69
|
+
@top = @data[0, 128]
|
70
|
+
# Define Singleton-method definition to String (byte, offset)
|
71
|
+
@data.extend(PDF::Writer::OffsetReader)
|
72
|
+
else
|
73
|
+
raise "argument class error!! #{data.type}"
|
74
|
+
end
|
75
|
+
|
76
|
+
if format.nil?
|
77
|
+
@format = discover_format
|
78
|
+
else
|
79
|
+
match = false
|
80
|
+
Formats.constants.each { |t| match = true if format == t }
|
81
|
+
raise("format is failed. #{format}\n") unless match
|
82
|
+
@format = format
|
83
|
+
end
|
84
|
+
|
85
|
+
__send__("measure_#@format".intern) unless @format == Formats::OTHER
|
86
|
+
|
87
|
+
@data = data.dup
|
88
|
+
end
|
89
|
+
|
90
|
+
attr_reader :format
|
91
|
+
alias :get_type :format
|
92
|
+
attr_reader :height
|
93
|
+
alias :get_height :height
|
94
|
+
attr_reader :width
|
95
|
+
alias :get_width width
|
96
|
+
|
97
|
+
attr_reader :bits
|
98
|
+
attr_reader :channels
|
99
|
+
|
100
|
+
attr_reader :info
|
101
|
+
|
102
|
+
def discover_format
|
103
|
+
if @top =~ %r{^GIF8[79]a}
|
104
|
+
Formats::GIF
|
105
|
+
elsif @top[0, 3] == "\xff\xd8\xff"
|
106
|
+
Formats::JPEG
|
107
|
+
elsif @top[0, 8] == "\x89PNG\x0d\x0a\x1a\x0a"
|
108
|
+
Formats::PNG
|
109
|
+
elsif @top[0, 3] == "FWS"
|
110
|
+
Formats::SWF
|
111
|
+
elsif @top[0, 4] == "8BPS"
|
112
|
+
Formats::PSD
|
113
|
+
elsif @top[0, 2] == 'BM'
|
114
|
+
Formats::BMP
|
115
|
+
elsif @top[0, 4] == "MM\x00\x2a"
|
116
|
+
Formats::TIFF
|
117
|
+
elsif @top[0, 4] == "II\x2a\x00"
|
118
|
+
Formats::TIFF
|
119
|
+
elsif @top[0, 12] == "\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a"
|
120
|
+
Formats::JP2
|
121
|
+
elsif @top =~ %r{^P[1-7]}
|
122
|
+
Formats::PPM
|
123
|
+
elsif @top =~ %r{\#define\s+\S+\s+\d+}
|
124
|
+
Formats::XBM
|
125
|
+
elsif @top =~ %r{/\* XPM \*/}
|
126
|
+
Formats::XPM
|
127
|
+
elsif @top[0] == 10
|
128
|
+
Formats::PCX
|
129
|
+
else
|
130
|
+
Formats::OTHER # might be WBMP
|
131
|
+
end
|
132
|
+
end
|
133
|
+
private :discover_format
|
134
|
+
|
135
|
+
def measure_GIF
|
136
|
+
@data.read_o(6) # Skip GIF8.a
|
137
|
+
@width, @height, @bits = @data.read_o(5).unpack('vvC')
|
138
|
+
if @bits & 0x80 == 0x80
|
139
|
+
@bits = (@bits & 0x07) + 1
|
140
|
+
else
|
141
|
+
@bits = 0
|
142
|
+
end
|
143
|
+
@channels = 3
|
144
|
+
end
|
145
|
+
private :measure_GIF
|
146
|
+
|
147
|
+
def measure_PNG
|
148
|
+
@data.read_o(12)
|
149
|
+
raise "This file is not PNG." unless @data.read_o(4) == "IHDR"
|
150
|
+
# The file information is in the IHDR section.
|
151
|
+
# Offset Bytes Meaning
|
152
|
+
# 0 4 Width
|
153
|
+
# 5 4 Height
|
154
|
+
# 9 1 Bit Depth
|
155
|
+
# 10 1 Compression Method
|
156
|
+
# 11 1 Filter Method
|
157
|
+
# 12 1 Interlace Method
|
158
|
+
ihdr = @data.read_o(13).unpack("NNCCCCC")
|
159
|
+
@width = ihdr[0]
|
160
|
+
@height = ihdr[1]
|
161
|
+
@bits = ihdr[2]
|
162
|
+
@info[:color_type] = ihdr[3]
|
163
|
+
@info[:compression_method] = ihdr[4]
|
164
|
+
@info[:filter_method] = ihdr[5]
|
165
|
+
@info[:interlace_method] = ihdr[6]
|
166
|
+
|
167
|
+
|
168
|
+
end
|
169
|
+
private :measure_PNG
|
170
|
+
|
171
|
+
def measure_JPEG
|
172
|
+
c_marker = "\xff" # Section marker.
|
173
|
+
@data.read_o(2) # Skip the first two bytes of JPEG identifier.
|
174
|
+
loop do
|
175
|
+
marker, code, length = @data.read_o(4).unpack('aan')
|
176
|
+
raise "JPEG marker not found!" if marker != c_marker
|
177
|
+
|
178
|
+
if JPEG_SOF_BLOCKS.include?(code)
|
179
|
+
@bits, @height, @width, @channels = @data.read_o(6).unpack("CnnC")
|
180
|
+
break
|
181
|
+
end
|
182
|
+
|
183
|
+
buffer = @data.read_o(length - 2)
|
184
|
+
|
185
|
+
if JPEG_APP_BLOCKS.include?(code)
|
186
|
+
@info["APP#{code.to_i - 0xe0}"] = buffer
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
private :measure_JPEG
|
191
|
+
|
192
|
+
def measure_BMP
|
193
|
+
# Skip the first 14 bytes of the image.
|
194
|
+
@data.read_o(14)
|
195
|
+
# Up to the next 16 bytes will be used.
|
196
|
+
dim = @data.read_o(16)
|
197
|
+
|
198
|
+
# Get the "size" of the image from the next four bytes.
|
199
|
+
size = dim.unpack("V")
|
200
|
+
|
201
|
+
if size == 12
|
202
|
+
@width, @height, @bits = dim.unpack("x4vvx3C")
|
203
|
+
elsif size > 12 and (size <= 64 or size == 108)
|
204
|
+
@width, @height, @bits = dim.unpack("x4VVv")
|
205
|
+
end
|
206
|
+
end
|
207
|
+
private :measure_BMP
|
208
|
+
|
209
|
+
def measure_PPM
|
210
|
+
header = @data.read_o(1024)
|
211
|
+
header.gsub!(/^\#[^\n\r]*/m, "")
|
212
|
+
md = %r{^(P[1-6])\s+?(\d+)\s+?(\d+)}mo.match(header)
|
213
|
+
|
214
|
+
@width = md.captures[1]
|
215
|
+
@height = md.captures[2]
|
216
|
+
|
217
|
+
case md.captures[0]
|
218
|
+
when "P1", "P4"
|
219
|
+
@format = "PBM"
|
220
|
+
when "P2", "P5"
|
221
|
+
@format = "PGM"
|
222
|
+
when "P3", "P6"
|
223
|
+
@format = "PPM"
|
224
|
+
# when "P7"
|
225
|
+
# @format = "XV"
|
226
|
+
# header =~ /IMGINFO:(\d+)x(\d+)/m
|
227
|
+
# width = $1.to_i; height = $2.to_i
|
228
|
+
end
|
229
|
+
end
|
230
|
+
private :measure_PPM
|
231
|
+
|
232
|
+
alias :measure_PGM :measure_PPM
|
233
|
+
private :measure_PGM
|
234
|
+
alias :measure_PBM :measure_PPM
|
235
|
+
private :measure_PBM
|
236
|
+
|
237
|
+
XBM_DIMENSIONS_RE = %r{^\#define\s*\S*\s*(\d+)\s*\n\#define\s*\S*\s*(\d+)}mi
|
238
|
+
def measure_XBM
|
239
|
+
md = XBM_DIMENSIONS_RE.match(@data.read_o(1024))
|
240
|
+
|
241
|
+
@width = md.captures[0].to_i
|
242
|
+
@height = md.captures[1].to_i
|
243
|
+
end
|
244
|
+
private :measure_XBM
|
245
|
+
|
246
|
+
XPM_DIMENSIONS_RE = %r<"\s*(\d+)\s+(\d+)(\s+\d+\s+\d+){1,2}\s*">m
|
247
|
+
def measure_XPM
|
248
|
+
while line = @data.read_o(1024)
|
249
|
+
md = XPM_DIMENSIONS_RE.match(line)
|
250
|
+
if md
|
251
|
+
@width = md.captures[0].to_i
|
252
|
+
@height = md.captures[1].to_i
|
253
|
+
break
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
private :measure_XPM
|
258
|
+
|
259
|
+
def measure_PSD
|
260
|
+
@width, @height = @data.read_o(26).unpack("x14NN")
|
261
|
+
end
|
262
|
+
private :measure_PSD
|
263
|
+
|
264
|
+
def measure_PCX
|
265
|
+
header = @data.read_o(128)
|
266
|
+
head_part = header.unpack('C4S4')
|
267
|
+
@width = head_part[6] - head_part[4] + 1
|
268
|
+
@height = head_part[7] - head_part[5] + 1
|
269
|
+
end
|
270
|
+
private :measure_PCX
|
271
|
+
|
272
|
+
def measure_SWF
|
273
|
+
header = @data.read_o(9)
|
274
|
+
raise "This file is not SWF." unless header.unpack('a3')[0] == 'FWS'
|
275
|
+
|
276
|
+
bits = Integer("0b#{header.unpack('@8B5')}")
|
277
|
+
header << @data.read_o(bits * 4 / 8 + 1)
|
278
|
+
|
279
|
+
str = *(header.unpack("@8B#{5 + bits * 4}"))
|
280
|
+
last = 5
|
281
|
+
x_min = Integer("0b#{str[last, bits]}")
|
282
|
+
x_max = Integer("0b#{str[(last + bits), bits]}")
|
283
|
+
y_min = Integer("0b#{str[(last + (2 * bits)), bits]}")
|
284
|
+
y_max = Integer("0b#{str[(last + (3 * bits)), bits]}")
|
285
|
+
@width = (x_max - x_min) / 20
|
286
|
+
@height = (y_max - y_min) / 20
|
287
|
+
end
|
288
|
+
private :measure_SWF
|
289
|
+
|
290
|
+
# The same as SWF, except that the original data is compressed with
|
291
|
+
# Zlib. Disabled for now.
|
292
|
+
def measure_SWC
|
293
|
+
end
|
294
|
+
private :measure_SWC
|
295
|
+
|
296
|
+
def measure_TIFF
|
297
|
+
# 'v' little-endian
|
298
|
+
# 'n' default to big-endian
|
299
|
+
endian = (@data.read_o(4) =~ /II\x2a\x00/o) ? 'v' : 'n'
|
300
|
+
|
301
|
+
packspec = [
|
302
|
+
nil, # nothing (shouldn't happen)
|
303
|
+
'C', # BYTE (8-bit unsigned integer)
|
304
|
+
nil, # ASCII
|
305
|
+
endian, # SHORT (16-bit unsigned integer)
|
306
|
+
endian.upcase, # LONG (32-bit unsigned integer)
|
307
|
+
nil, # RATIONAL
|
308
|
+
'c', # SBYTE (8-bit signed integer)
|
309
|
+
nil, # UNDEFINED
|
310
|
+
endian, # SSHORT (16-bit unsigned integer)
|
311
|
+
endian.upcase, # SLONG (32-bit unsigned integer)
|
312
|
+
]
|
313
|
+
|
314
|
+
# Find the IFD location.
|
315
|
+
ifd_addr = *(@data.read_o(4).unpack(endian.upcase))
|
316
|
+
# Get the number of entries in the IFD.
|
317
|
+
ifd = @data.read_o(2, ifd_addr)
|
318
|
+
num_dirent = *(ifd.unpack(endian)) # Make it useful
|
319
|
+
ifd_addr += 2
|
320
|
+
num_dirent = ifd_addr + (num_dirent * 12) # Calc. maximum offset of IFD
|
321
|
+
|
322
|
+
loop do
|
323
|
+
break if @width and @height
|
324
|
+
|
325
|
+
ifd = @data.read_o(12, ifd_addr) # Get directory entry.
|
326
|
+
break if ifd.nil? or ifd_addr > num_dirent
|
327
|
+
ifd_addr += 12
|
328
|
+
|
329
|
+
tag = *(ifd.unpack(endian)) # ...decode its tag
|
330
|
+
type = *(ifd[2, 2].unpack(endian)) # ... and data type
|
331
|
+
|
332
|
+
# Check the type for sanity.
|
333
|
+
next if type > packspec.size or packspec[type].nil?
|
334
|
+
|
335
|
+
case tag
|
336
|
+
when 0x0100, 0xa002 # width
|
337
|
+
@width = *(ifd[8, 4].unpack(packspec[type]))
|
338
|
+
when 0x0101, 0xa003 # height
|
339
|
+
@height = *(ifd[8, 4].unpack(packspec[type]))
|
340
|
+
end
|
341
|
+
end
|
342
|
+
end
|
343
|
+
private :measure_TIFF
|
344
|
+
end
|
345
|
+
|
346
|
+
if __FILE__ == $0
|
347
|
+
require 'pdf/writer'
|
348
|
+
require 'pdf/writer/graphics'
|
349
|
+
|
350
|
+
print "Image Formats: #{PDF::Writer::Graphics::ImageInfo.formats.inspect}\n"
|
351
|
+
|
352
|
+
Dir.glob("*").each do |file|
|
353
|
+
print "#{file} (string)\n"
|
354
|
+
open(file, "rb") do |fh|
|
355
|
+
image = PDF::Writer::Graphics::ImageInfo.new(fh.read)
|
356
|
+
print <<-EOF
|
357
|
+
Format : #{image.format}
|
358
|
+
Width : #{image.width.inspect}
|
359
|
+
Height : #{image.height.inspect}
|
360
|
+
Bits : #{image.bits.inspect}
|
361
|
+
Channels: #{image.channels.inspect}
|
362
|
+
EOF
|
363
|
+
end
|
364
|
+
end
|
365
|
+
end
|
@@ -0,0 +1,43 @@
|
|
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: lang.rb,v 1.1 2005/05/18 11:57:58 austin Exp $
|
10
|
+
#++
|
11
|
+
|
12
|
+
module PDF::Writer::Lang
|
13
|
+
@message = {}
|
14
|
+
|
15
|
+
class << self
|
16
|
+
# PDF::Writer is fully internationalized. This module method sets the
|
17
|
+
# error messages to the specified language Module. The language Module
|
18
|
+
# must have a constant Hash called +Message+ containing a set of
|
19
|
+
# symbols and localized versions of the messages associated with them.
|
20
|
+
#
|
21
|
+
# If the file 'pdf/writer/lang/es' contains the module
|
22
|
+
# <tt>PDF::Writer::Lang::ES</tt>, the error messages for PDF could be
|
23
|
+
# localized to Espa�ol thus:
|
24
|
+
#
|
25
|
+
# require 'pdf/writer'
|
26
|
+
# require 'pdf/writer/lang/es'
|
27
|
+
#
|
28
|
+
# Localization is module-global; in a multithreaded program, all
|
29
|
+
# threads will use the current language's messages.
|
30
|
+
#
|
31
|
+
# See PDF::Writer::Lang::EN for more information.
|
32
|
+
attr_accessor :language
|
33
|
+
def language=(ll) #:nodoc:
|
34
|
+
@language = ll
|
35
|
+
@message.replace ll.instance_variable_get('@message')
|
36
|
+
end
|
37
|
+
|
38
|
+
# Looks up the mesasge
|
39
|
+
def [](message_id)
|
40
|
+
@message[message_id]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,77 @@
|
|
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: en.rb,v 1.7 2005/06/08 12:16:11 austin Exp $
|
10
|
+
#++
|
11
|
+
# PDF::Writer::Lang::EN is the English-language output module. It contains a
|
12
|
+
# hash, @message, that contains the messages that may be reported by any
|
13
|
+
# method in the PDF library. The messages are identified by a Symbol.
|
14
|
+
#
|
15
|
+
# <b>Symbol</b>:: <b>Meaning</b>
|
16
|
+
# <b>:uri_09x</b>:: URIs must be HTTP or FTP URIs in this version of RSS.
|
17
|
+
module PDF::Writer::Lang::EN
|
18
|
+
@message = {
|
19
|
+
:invalid_pos => ":pos must be either :before or :after.",
|
20
|
+
:req_FPXO => "Pages#<< requires a PDF::Writer::Page, PDF::Writer::Font, or PDF::Writer::ExternalObject.",
|
21
|
+
:req_FPXOH => "Pages#add requires a PDF::Writer::Page, PDF::Writer::Font, PDF::Writer::ExternalObject, or Hash.",
|
22
|
+
:png_invalid_header => "Invalid PNG header.",
|
23
|
+
:png_unsupp_compres => "Unsupported PNG compression method.",
|
24
|
+
:png_unsupp_filter => "Unsupported PNG filter method.",
|
25
|
+
:png_header_missing => "PNG information header is missing.",
|
26
|
+
:png_8bit_colour => "Only PNG colour depths of 8 bits or less are supported.",
|
27
|
+
:png_alpha_trans => "PNG alpha channel transparency is not supported; only palette transparency is supported.",
|
28
|
+
:data_must_be_array => "The table data is not an Array. (Temporary limitation.)",
|
29
|
+
:columns_unspecified => "Columns are unspecified. They must be data[0] and be an array.",
|
30
|
+
:no_zlib_no_compress => "Could not load Zlib. PDF compression is disabled.",
|
31
|
+
:simpletable_columns_undefined => "Columns are undefined for table.",
|
32
|
+
:simpletable_data_empty => "Table data is empty.",
|
33
|
+
:techbook_eval_exception => <<-EOS ,
|
34
|
+
|
35
|
+
Error in document around line %d:
|
36
|
+
%s
|
37
|
+
Backtrace:
|
38
|
+
%s
|
39
|
+
EOS
|
40
|
+
:techbook_bad_columns_directive => "Invalid argument to directive .columns: %s",
|
41
|
+
:techbook_cannot_find_document => "Error: cannot find a document.",
|
42
|
+
:techbook_using_default_doc => "Using default document '%s'.",
|
43
|
+
:techbook_using_cached_doc => "Using cached document '%s'...",
|
44
|
+
:techbook_regenerating => "Cached document is older than source document. Regenerating.",
|
45
|
+
:techbook_ignoring_cache => "Ignoring cached document.",
|
46
|
+
:techbook_unknown_xref => "Unknown cross-reference %s.",
|
47
|
+
:techbook_code_not_empty => "Code is not empty:",
|
48
|
+
:techbook_usage_banner => "Usage: %s [options] [INPUT FILE]",
|
49
|
+
:techbook_usage_banner_1 => [
|
50
|
+
"INPUT FILE, if not specified, will be 'manual.pwd', either in the",
|
51
|
+
"current directory or relative to this file.",
|
52
|
+
""
|
53
|
+
],
|
54
|
+
:techbook_help_force_regen => [
|
55
|
+
"Forces the regeneration of the document,",
|
56
|
+
"ignoring the cached document version."
|
57
|
+
],
|
58
|
+
:techbook_help_no_cache => [
|
59
|
+
"Disables generated document caching.",
|
60
|
+
],
|
61
|
+
:techbook_help_compress => [
|
62
|
+
"Compresses the resulting PDF.",
|
63
|
+
],
|
64
|
+
:techbook_help_help => [
|
65
|
+
"Shows this text.",
|
66
|
+
],
|
67
|
+
:techbook_exception => "Exception %1s around line %2d.",
|
68
|
+
:C_callback_form_error => "Stand-alone callbacks must be of the form <C:callback />.",
|
69
|
+
:c_callback_form_error => "Paired callbacks must be of the form <c:callback>...</c:callback>.",
|
70
|
+
:callback_warning => "Unknown %1s callback: '%2s'. Ignoring.",
|
71
|
+
:charts_stddev_data_empty => "Charts::StdDev data is empty.",
|
72
|
+
:charts_stddev_scale_norange => "Charts::StdDev::Scale has no range.",
|
73
|
+
:charts_stddev_scale_nostep => "Charts::StdDev::Scale has no step.",
|
74
|
+
}
|
75
|
+
|
76
|
+
PDF::Writer::Lang.language = self
|
77
|
+
end
|