pdf-reader 1.2.0 → 1.3.0
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 +7 -1
- data/README.rdoc +1 -0
- data/Rakefile +23 -8
- data/lib/pdf-reader.rb +3 -1
- data/lib/pdf/hash.rb +5 -1
- data/lib/pdf/reader.rb +8 -1
- data/lib/pdf/reader/afm/Courier-Bold.afm +342 -0
- data/lib/pdf/reader/afm/Courier-BoldOblique.afm +342 -0
- data/lib/pdf/reader/afm/Courier-Oblique.afm +342 -0
- data/lib/pdf/reader/afm/Courier.afm +342 -0
- data/lib/pdf/reader/afm/Helvetica-Bold.afm +2827 -0
- data/lib/pdf/reader/afm/Helvetica-BoldOblique.afm +2827 -0
- data/lib/pdf/reader/afm/Helvetica-Oblique.afm +3051 -0
- data/lib/pdf/reader/afm/Helvetica.afm +3051 -0
- data/lib/pdf/reader/afm/Symbol.afm +213 -0
- data/lib/pdf/reader/afm/Times-Bold.afm +2588 -0
- data/lib/pdf/reader/afm/Times-BoldItalic.afm +2384 -0
- data/lib/pdf/reader/afm/Times-Italic.afm +2667 -0
- data/lib/pdf/reader/afm/Times-Roman.afm +2419 -0
- data/lib/pdf/reader/afm/ZapfDingbats.afm +225 -0
- data/lib/pdf/reader/buffer.rb +14 -6
- data/lib/pdf/reader/cid_widths.rb +61 -0
- data/lib/pdf/reader/cmap.rb +8 -2
- data/lib/pdf/reader/encoding.rb +52 -27
- data/lib/pdf/reader/error.rb +16 -1
- data/lib/pdf/reader/filter.rb +2 -0
- data/lib/pdf/reader/filter/ascii85.rb +3 -1
- data/lib/pdf/reader/filter/ascii_hex.rb +3 -1
- data/lib/pdf/reader/filter/depredict.rb +2 -0
- data/lib/pdf/reader/filter/flate.rb +3 -1
- data/lib/pdf/reader/filter/lzw.rb +1 -0
- data/lib/pdf/reader/filter/null.rb +1 -0
- data/lib/pdf/reader/filter/run_length.rb +2 -1
- data/lib/pdf/reader/font.rb +74 -18
- data/lib/pdf/reader/font_descriptor.rb +80 -0
- data/lib/pdf/reader/glyph_hash.rb +6 -0
- data/lib/pdf/reader/lzw.rb +1 -0
- data/lib/pdf/reader/object_cache.rb +1 -1
- data/lib/pdf/reader/object_hash.rb +1 -1
- data/lib/pdf/reader/page_layout.rb +125 -0
- data/lib/pdf/reader/page_state.rb +172 -69
- data/lib/pdf/reader/page_text_receiver.rb +50 -21
- data/lib/pdf/reader/pages_strategy.rb +17 -4
- data/lib/pdf/reader/parser.rb +25 -52
- data/lib/pdf/reader/print_receiver.rb +5 -0
- data/lib/pdf/reader/reference.rb +2 -0
- data/lib/pdf/reader/register_receiver.rb +1 -1
- data/lib/pdf/reader/standard_security_handler.rb +2 -0
- data/lib/pdf/reader/stream.rb +2 -0
- data/lib/pdf/reader/synchronized_cache.rb +32 -0
- data/lib/pdf/reader/text_receiver.rb +5 -4
- data/lib/pdf/reader/text_run.rb +80 -0
- data/lib/pdf/reader/token.rb +2 -0
- data/lib/pdf/reader/transformation_matrix.rb +194 -0
- data/lib/pdf/reader/width_calculator.rb +11 -0
- data/lib/pdf/reader/width_calculator/built_in.rb +50 -0
- data/lib/pdf/reader/width_calculator/composite.rb +27 -0
- data/lib/pdf/reader/width_calculator/true_type.rb +56 -0
- data/lib/pdf/reader/width_calculator/type_one_or_three.rb +32 -0
- data/lib/pdf/reader/width_calculator/type_zero.rb +24 -0
- data/lib/pdf/reader/xref.rb +9 -2
- metadata +119 -13
@@ -0,0 +1,11 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
# PDF files may define fonts in a number of ways. Each approach means we must
|
4
|
+
# calculate glyph widths differently, so this set of classes conform to an
|
5
|
+
# interface that will perform the appropriate calculations.
|
6
|
+
|
7
|
+
require 'pdf/reader/width_calculator/built_in'
|
8
|
+
require 'pdf/reader/width_calculator/composite'
|
9
|
+
require 'pdf/reader/width_calculator/true_type'
|
10
|
+
require 'pdf/reader/width_calculator/type_zero'
|
11
|
+
require 'pdf/reader/width_calculator/type_one_or_three'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'afm'
|
4
|
+
require 'pdf/reader/synchronized_cache'
|
5
|
+
|
6
|
+
module AFM
|
7
|
+
# this is a monkey patch for the AFM gem. hopefully my patch will be accepted
|
8
|
+
# upstream and I can drop this
|
9
|
+
class Font
|
10
|
+
def metrics_for_name(name)
|
11
|
+
@char_metrics[name.to_s]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class PDF::Reader
|
17
|
+
module WidthCalculator
|
18
|
+
|
19
|
+
# Type1 fonts can be one of 14 "built in" standard fonts. In these cases,
|
20
|
+
# the reader is expected to have it's own copy of the font metrics.
|
21
|
+
# see Section 9.6.2.2, PDF 32000-1:2008, pp 256
|
22
|
+
class BuiltIn
|
23
|
+
|
24
|
+
def initialize(font)
|
25
|
+
@font = font
|
26
|
+
@@all_metrics ||= PDF::Reader::SynchronizedCache.new
|
27
|
+
|
28
|
+
metrics_path = File.join(File.dirname(__FILE__), "..","afm","#{font.basefont}.afm")
|
29
|
+
|
30
|
+
if File.file?(metrics_path)
|
31
|
+
@metrics = @@all_metrics[metrics_path] ||= AFM::Font.new(metrics_path)
|
32
|
+
else
|
33
|
+
raise ArgumentError, "No built-in metrics for #{font.basefont}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def glyph_width(code_point)
|
38
|
+
return 0 if code_point.nil? || code_point < 0
|
39
|
+
|
40
|
+
m = @metrics.metrics_for(code_point)
|
41
|
+
if m.nil?
|
42
|
+
name = @font.encoding.int_to_name(code_point)
|
43
|
+
m = @metrics.metrics_for_name(name)
|
44
|
+
end
|
45
|
+
m[:wx]
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class PDF::Reader
|
4
|
+
module WidthCalculator
|
5
|
+
# CIDFontType0 or CIDFontType2 use DW (integer) and W (array) to determine
|
6
|
+
# codepoint widths, note that CIDFontType2 will contain a true type font
|
7
|
+
# program which could be used to calculate width, however, a conforming writer
|
8
|
+
# is supposed to convert the widths for the codepoints used into the W array
|
9
|
+
# so that it can be used.
|
10
|
+
# see Section 9.7.4.1, PDF 32000-1:2008, pp 269-270
|
11
|
+
class Composite
|
12
|
+
|
13
|
+
def initialize(font)
|
14
|
+
@font = font
|
15
|
+
@widths = PDF::Reader::CidWidths.new(@font.cid_default_width, @font.cid_widths)
|
16
|
+
end
|
17
|
+
|
18
|
+
def glyph_width(code_point)
|
19
|
+
return 0 if code_point.nil? || code_point < 0
|
20
|
+
|
21
|
+
w = @widths[code_point]
|
22
|
+
# 0 is a valid width
|
23
|
+
return w.to_f unless w.nil?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class PDF::Reader
|
4
|
+
module WidthCalculator
|
5
|
+
# Calculates the width of a glyph in a TrueType font
|
6
|
+
class TrueType
|
7
|
+
|
8
|
+
def initialize(font)
|
9
|
+
@font = font
|
10
|
+
|
11
|
+
if @font.font_descriptor
|
12
|
+
@missing_width = @font.font_descriptor.missing_width
|
13
|
+
else
|
14
|
+
@missing_width = 0
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def glyph_width(code_point)
|
19
|
+
return 0 if code_point.nil? || code_point < 0
|
20
|
+
|
21
|
+
glyph_width_from_font(code_point) || glyph_width_from_descriptor(code_point)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
#TODO convert Type3 units 1000 units => 1 text space unit
|
27
|
+
def glyph_width_from_font(code_point)
|
28
|
+
return if @font.widths.nil? || @font.widths.count == 0
|
29
|
+
|
30
|
+
# in ruby a negative index is valid, and will go from the end of the array
|
31
|
+
# which is undesireable in this case.
|
32
|
+
if @font.first_char <= code_point
|
33
|
+
@font.widths.fetch(code_point - @font.first_char, @missing_width).to_f
|
34
|
+
else
|
35
|
+
@missing_width.to_f
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def glyph_width_from_descriptor(code_point)
|
40
|
+
return unless @font.font_descriptor
|
41
|
+
|
42
|
+
# true type fonts will have most of their information contained
|
43
|
+
# with-in a program inside the font descriptor, however the widths
|
44
|
+
# may not be in standard PDF glyph widths (1000 units => 1 text space unit)
|
45
|
+
# so this width will need to be scaled
|
46
|
+
w = @font.font_descriptor.find_glyph_width(code_point)
|
47
|
+
if w
|
48
|
+
w.to_f * @font.font_descriptor.glyph_to_pdf_scale_factor
|
49
|
+
else
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class PDF::Reader
|
4
|
+
module WidthCalculator
|
5
|
+
# Calculates the width of a glyph in a Type One or Type Three
|
6
|
+
class TypeOneOrThree
|
7
|
+
|
8
|
+
def initialize(font)
|
9
|
+
@font = font
|
10
|
+
|
11
|
+
if @font.font_descriptor
|
12
|
+
@missing_width = @font.font_descriptor.missing_width
|
13
|
+
else
|
14
|
+
@missing_width = 0
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def glyph_width(code_point)
|
19
|
+
return 0 if code_point.nil? || code_point < 0
|
20
|
+
return 0 if @font.widths.nil? || @font.widths.count == 0
|
21
|
+
|
22
|
+
# in ruby a negative index is valid, and will go from the end of the array
|
23
|
+
# which is undesireable in this case.
|
24
|
+
if @font.first_char <= code_point
|
25
|
+
@font.widths.fetch(code_point - @font.first_char, @missing_width).to_f
|
26
|
+
else
|
27
|
+
@missing_width.to_f
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class PDF::Reader
|
4
|
+
module WidthCalculator
|
5
|
+
# Type0 (or Composite) fonts are a "root font" that rely on a "descendant font"
|
6
|
+
# to do the heavy lifting. The "descendant font" is a CID-Keyed font.
|
7
|
+
# see Section 9.7.1, PDF 32000-1:2008, pp 267
|
8
|
+
# so if we are calculating a Type0 font width, we just pass off to
|
9
|
+
# the descendant font
|
10
|
+
class TypeZero
|
11
|
+
|
12
|
+
def initialize(font)
|
13
|
+
@font = font
|
14
|
+
@descendant_font = @font.descendantfonts.first
|
15
|
+
end
|
16
|
+
|
17
|
+
def glyph_width(code_point)
|
18
|
+
return 0 if code_point.nil? || code_point < 0
|
19
|
+
|
20
|
+
@descendant_font.glyph_width(code_point).to_f
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/pdf/reader/xref.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
################################################################################
|
2
4
|
#
|
3
5
|
# Copyright (C) 2006 Peter J Jones (pjones@pmade.com)
|
@@ -111,7 +113,8 @@ class PDF::Reader
|
|
111
113
|
return load_xref_stream(stream)
|
112
114
|
end
|
113
115
|
|
114
|
-
raise PDF::Reader::MalformedPDFError,
|
116
|
+
raise PDF::Reader::MalformedPDFError,
|
117
|
+
"xref table not found at offset #{offset} (#{tok_one} != xref)"
|
115
118
|
end
|
116
119
|
################################################################################
|
117
120
|
# Assumes the underlying buffer is positioned at the start of a traditional
|
@@ -137,7 +140,9 @@ class PDF::Reader
|
|
137
140
|
|
138
141
|
trailer = Parser.new(buf, self).parse_token
|
139
142
|
|
140
|
-
|
143
|
+
unless trailer.kind_of?(Hash)
|
144
|
+
raise MalformedPDFError, "PDF malformed, trailer should be a dictionary"
|
145
|
+
end
|
141
146
|
|
142
147
|
load_offsets(trailer[:XRefStm]) if trailer.has_key?(:XRefStm)
|
143
148
|
load_offsets(trailer[:Prev].to_i) if trailer.has_key?(:Prev)
|
@@ -232,6 +237,8 @@ class PDF::Reader
|
|
232
237
|
end
|
233
238
|
io.rewind
|
234
239
|
offset < 50 ? offset : nil
|
240
|
+
rescue EOFError
|
241
|
+
return nil
|
235
242
|
end
|
236
243
|
end
|
237
244
|
################################################################################
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdf-reader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -28,29 +28,29 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: rspec
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
37
|
+
version: '2.3'
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
45
|
+
version: '2.3'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: ZenTest
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 4.4.2
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,15 +58,15 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 4.4.2
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: cane
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
67
|
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 2.2.3
|
70
70
|
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +74,55 @@ dependencies:
|
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 2.2.3
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: morecane
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: ir_b
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rdoc
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
78
126
|
- !ruby/object:Gem::Dependency
|
79
127
|
name: Ascii85
|
80
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,6 +171,38 @@ dependencies:
|
|
123
171
|
- - ~>
|
124
172
|
- !ruby/object:Gem::Version
|
125
173
|
version: '2.0'
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: ttfunk
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
type: :runtime
|
183
|
+
prerelease: false
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: afm
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
194
|
+
requirements:
|
195
|
+
- - ~>
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: 0.2.0
|
198
|
+
type: :runtime
|
199
|
+
prerelease: false
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ~>
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 0.2.0
|
126
206
|
description: The PDF::Reader library implements a PDF parser conforming as much as
|
127
207
|
possible to the PDF specification from Adobe
|
128
208
|
email:
|
@@ -151,17 +231,26 @@ files:
|
|
151
231
|
- examples/version.rb
|
152
232
|
- lib/pdf/hash.rb
|
153
233
|
- lib/pdf/reader.rb
|
234
|
+
- lib/pdf/reader/width_calculator/built_in.rb
|
235
|
+
- lib/pdf/reader/width_calculator/type_zero.rb
|
236
|
+
- lib/pdf/reader/width_calculator/true_type.rb
|
237
|
+
- lib/pdf/reader/width_calculator/composite.rb
|
238
|
+
- lib/pdf/reader/width_calculator/type_one_or_three.rb
|
154
239
|
- lib/pdf/reader/xref.rb
|
155
240
|
- lib/pdf/reader/page.rb
|
241
|
+
- lib/pdf/reader/transformation_matrix.rb
|
156
242
|
- lib/pdf/reader/encoding.rb
|
243
|
+
- lib/pdf/reader/page_layout.rb
|
157
244
|
- lib/pdf/reader/font.rb
|
158
245
|
- lib/pdf/reader/print_receiver.rb
|
159
246
|
- lib/pdf/reader/lzw.rb
|
160
247
|
- lib/pdf/reader/buffer.rb
|
248
|
+
- lib/pdf/reader/synchronized_cache.rb
|
161
249
|
- lib/pdf/reader/object_stream.rb
|
162
250
|
- lib/pdf/reader/cmap.rb
|
163
251
|
- lib/pdf/reader/text_receiver.rb
|
164
252
|
- lib/pdf/reader/register_receiver.rb
|
253
|
+
- lib/pdf/reader/cid_widths.rb
|
165
254
|
- lib/pdf/reader/page_text_receiver.rb
|
166
255
|
- lib/pdf/reader/encodings/mac_roman.txt
|
167
256
|
- lib/pdf/reader/encodings/zapf_dingbats.txt
|
@@ -181,19 +270,36 @@ files:
|
|
181
270
|
- lib/pdf/reader/object_hash.rb
|
182
271
|
- lib/pdf/reader/reference.rb
|
183
272
|
- lib/pdf/reader/glyphlist.txt
|
273
|
+
- lib/pdf/reader/afm/Courier-BoldOblique.afm
|
274
|
+
- lib/pdf/reader/afm/Symbol.afm
|
275
|
+
- lib/pdf/reader/afm/Times-Italic.afm
|
276
|
+
- lib/pdf/reader/afm/Courier-Oblique.afm
|
277
|
+
- lib/pdf/reader/afm/Helvetica-Bold.afm
|
278
|
+
- lib/pdf/reader/afm/Courier-Bold.afm
|
279
|
+
- lib/pdf/reader/afm/Times-BoldItalic.afm
|
280
|
+
- lib/pdf/reader/afm/Helvetica-BoldOblique.afm
|
281
|
+
- lib/pdf/reader/afm/Helvetica.afm
|
282
|
+
- lib/pdf/reader/afm/ZapfDingbats.afm
|
283
|
+
- lib/pdf/reader/afm/Helvetica-Oblique.afm
|
284
|
+
- lib/pdf/reader/afm/Times-Bold.afm
|
285
|
+
- lib/pdf/reader/afm/Times-Roman.afm
|
286
|
+
- lib/pdf/reader/afm/Courier.afm
|
184
287
|
- lib/pdf/reader/token.rb
|
185
288
|
- lib/pdf/reader/parser.rb
|
186
289
|
- lib/pdf/reader/page_state.rb
|
187
290
|
- lib/pdf/reader/error.rb
|
188
291
|
- lib/pdf/reader/glyph_hash.rb
|
292
|
+
- lib/pdf/reader/width_calculator.rb
|
189
293
|
- lib/pdf/reader/resource_methods.rb
|
190
294
|
- lib/pdf/reader/standard_security_handler.rb
|
295
|
+
- lib/pdf/reader/text_run.rb
|
191
296
|
- lib/pdf/reader/form_xobject.rb
|
192
297
|
- lib/pdf/reader/stream.rb
|
193
298
|
- lib/pdf/reader/pages_strategy.rb
|
194
299
|
- lib/pdf/reader/abstract_strategy.rb
|
195
300
|
- lib/pdf/reader/metadata_strategy.rb
|
196
301
|
- lib/pdf/reader/object_cache.rb
|
302
|
+
- lib/pdf/reader/font_descriptor.rb
|
197
303
|
- lib/pdf-reader.rb
|
198
304
|
- Rakefile
|
199
305
|
- README.rdoc
|