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,225 @@
|
|
1
|
+
StartFontMetrics 4.1
|
2
|
+
Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.
|
3
|
+
Comment Creation Date: Thu May 1 15:14:13 1997
|
4
|
+
Comment UniqueID 43082
|
5
|
+
Comment VMusage 45775 55535
|
6
|
+
FontName ZapfDingbats
|
7
|
+
FullName ITC Zapf Dingbats
|
8
|
+
FamilyName ZapfDingbats
|
9
|
+
Weight Medium
|
10
|
+
ItalicAngle 0
|
11
|
+
IsFixedPitch false
|
12
|
+
CharacterSet Special
|
13
|
+
FontBBox -1 -143 981 820
|
14
|
+
UnderlinePosition -100
|
15
|
+
UnderlineThickness 50
|
16
|
+
Version 002.000
|
17
|
+
Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.
|
18
|
+
EncodingScheme FontSpecific
|
19
|
+
StdHW 28
|
20
|
+
StdVW 90
|
21
|
+
StartCharMetrics 202
|
22
|
+
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
|
23
|
+
C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;
|
24
|
+
C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;
|
25
|
+
C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;
|
26
|
+
C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;
|
27
|
+
C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;
|
28
|
+
C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;
|
29
|
+
C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;
|
30
|
+
C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;
|
31
|
+
C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ;
|
32
|
+
C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;
|
33
|
+
C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;
|
34
|
+
C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;
|
35
|
+
C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;
|
36
|
+
C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;
|
37
|
+
C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;
|
38
|
+
C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;
|
39
|
+
C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;
|
40
|
+
C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;
|
41
|
+
C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;
|
42
|
+
C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;
|
43
|
+
C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;
|
44
|
+
C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;
|
45
|
+
C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;
|
46
|
+
C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;
|
47
|
+
C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;
|
48
|
+
C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;
|
49
|
+
C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;
|
50
|
+
C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;
|
51
|
+
C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;
|
52
|
+
C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;
|
53
|
+
C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;
|
54
|
+
C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;
|
55
|
+
C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;
|
56
|
+
C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;
|
57
|
+
C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;
|
58
|
+
C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;
|
59
|
+
C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;
|
60
|
+
C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;
|
61
|
+
C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;
|
62
|
+
C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;
|
63
|
+
C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;
|
64
|
+
C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;
|
65
|
+
C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;
|
66
|
+
C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;
|
67
|
+
C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;
|
68
|
+
C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;
|
69
|
+
C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;
|
70
|
+
C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;
|
71
|
+
C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;
|
72
|
+
C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;
|
73
|
+
C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;
|
74
|
+
C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;
|
75
|
+
C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;
|
76
|
+
C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;
|
77
|
+
C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;
|
78
|
+
C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;
|
79
|
+
C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;
|
80
|
+
C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;
|
81
|
+
C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;
|
82
|
+
C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;
|
83
|
+
C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;
|
84
|
+
C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;
|
85
|
+
C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;
|
86
|
+
C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;
|
87
|
+
C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;
|
88
|
+
C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;
|
89
|
+
C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;
|
90
|
+
C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;
|
91
|
+
C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;
|
92
|
+
C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;
|
93
|
+
C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;
|
94
|
+
C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;
|
95
|
+
C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;
|
96
|
+
C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;
|
97
|
+
C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;
|
98
|
+
C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;
|
99
|
+
C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;
|
100
|
+
C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;
|
101
|
+
C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;
|
102
|
+
C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;
|
103
|
+
C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;
|
104
|
+
C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;
|
105
|
+
C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;
|
106
|
+
C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;
|
107
|
+
C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;
|
108
|
+
C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;
|
109
|
+
C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;
|
110
|
+
C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;
|
111
|
+
C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;
|
112
|
+
C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;
|
113
|
+
C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;
|
114
|
+
C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;
|
115
|
+
C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;
|
116
|
+
C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;
|
117
|
+
C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ;
|
118
|
+
C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ;
|
119
|
+
C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ;
|
120
|
+
C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ;
|
121
|
+
C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ;
|
122
|
+
C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ;
|
123
|
+
C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ;
|
124
|
+
C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ;
|
125
|
+
C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ;
|
126
|
+
C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ;
|
127
|
+
C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ;
|
128
|
+
C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ;
|
129
|
+
C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ;
|
130
|
+
C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ;
|
131
|
+
C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;
|
132
|
+
C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;
|
133
|
+
C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;
|
134
|
+
C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;
|
135
|
+
C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;
|
136
|
+
C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;
|
137
|
+
C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;
|
138
|
+
C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;
|
139
|
+
C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;
|
140
|
+
C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;
|
141
|
+
C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;
|
142
|
+
C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;
|
143
|
+
C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;
|
144
|
+
C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;
|
145
|
+
C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;
|
146
|
+
C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;
|
147
|
+
C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;
|
148
|
+
C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;
|
149
|
+
C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;
|
150
|
+
C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;
|
151
|
+
C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;
|
152
|
+
C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;
|
153
|
+
C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;
|
154
|
+
C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;
|
155
|
+
C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;
|
156
|
+
C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;
|
157
|
+
C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;
|
158
|
+
C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;
|
159
|
+
C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;
|
160
|
+
C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;
|
161
|
+
C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;
|
162
|
+
C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;
|
163
|
+
C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;
|
164
|
+
C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;
|
165
|
+
C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;
|
166
|
+
C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;
|
167
|
+
C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;
|
168
|
+
C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;
|
169
|
+
C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;
|
170
|
+
C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;
|
171
|
+
C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;
|
172
|
+
C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;
|
173
|
+
C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;
|
174
|
+
C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;
|
175
|
+
C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;
|
176
|
+
C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;
|
177
|
+
C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;
|
178
|
+
C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;
|
179
|
+
C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;
|
180
|
+
C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;
|
181
|
+
C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;
|
182
|
+
C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;
|
183
|
+
C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;
|
184
|
+
C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;
|
185
|
+
C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;
|
186
|
+
C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;
|
187
|
+
C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;
|
188
|
+
C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;
|
189
|
+
C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;
|
190
|
+
C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;
|
191
|
+
C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;
|
192
|
+
C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;
|
193
|
+
C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;
|
194
|
+
C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;
|
195
|
+
C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;
|
196
|
+
C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;
|
197
|
+
C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;
|
198
|
+
C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;
|
199
|
+
C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;
|
200
|
+
C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;
|
201
|
+
C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;
|
202
|
+
C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;
|
203
|
+
C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;
|
204
|
+
C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;
|
205
|
+
C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;
|
206
|
+
C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;
|
207
|
+
C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;
|
208
|
+
C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;
|
209
|
+
C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;
|
210
|
+
C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;
|
211
|
+
C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;
|
212
|
+
C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;
|
213
|
+
C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;
|
214
|
+
C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;
|
215
|
+
C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;
|
216
|
+
C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;
|
217
|
+
C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;
|
218
|
+
C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;
|
219
|
+
C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;
|
220
|
+
C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;
|
221
|
+
C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;
|
222
|
+
C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;
|
223
|
+
C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;
|
224
|
+
EndCharMetrics
|
225
|
+
EndFontMetrics
|
data/lib/pdf/reader/buffer.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# coding:
|
1
|
+
# coding: ASCII-8BIT
|
2
2
|
|
3
3
|
################################################################################
|
4
4
|
#
|
@@ -115,6 +115,7 @@ class PDF::Reader
|
|
115
115
|
# return the byte offset where the first XRef table in th source can be found.
|
116
116
|
#
|
117
117
|
def find_first_xref_offset
|
118
|
+
check_size_is_non_zero
|
118
119
|
@io.seek(-1024, IO::SEEK_END) rescue @io.seek(0)
|
119
120
|
data = @io.read(1024)
|
120
121
|
|
@@ -129,6 +130,13 @@ class PDF::Reader
|
|
129
130
|
|
130
131
|
private
|
131
132
|
|
133
|
+
def check_size_is_non_zero
|
134
|
+
@io.seek(-1, IO::SEEK_END)
|
135
|
+
@io.seek(0)
|
136
|
+
rescue Errno::EINVAL
|
137
|
+
raise MalformedPDFError, "PDF file is empty"
|
138
|
+
end
|
139
|
+
|
132
140
|
# Returns true if this buffer is parsing a content stream
|
133
141
|
#
|
134
142
|
def in_content_stream?
|
@@ -236,7 +244,7 @@ class PDF::Reader
|
|
236
244
|
if byte.nil?
|
237
245
|
finished = true # unbalanced params
|
238
246
|
elsif (48..57).include?(byte) || (65..90).include?(byte) || (97..122).include?(byte)
|
239
|
-
str << byte
|
247
|
+
str << byte
|
240
248
|
elsif byte <= 32
|
241
249
|
# ignore it
|
242
250
|
else
|
@@ -266,7 +274,7 @@ class PDF::Reader
|
|
266
274
|
if byte.nil?
|
267
275
|
count = 0 # unbalanced params
|
268
276
|
elsif byte == 0x5C
|
269
|
-
str << byte
|
277
|
+
str << byte << @io.getbyte
|
270
278
|
elsif byte == 0x28 # "("
|
271
279
|
str << "("
|
272
280
|
count += 1
|
@@ -274,7 +282,7 @@ class PDF::Reader
|
|
274
282
|
count -= 1
|
275
283
|
str << ")" unless count == 0
|
276
284
|
else
|
277
|
-
str << byte
|
285
|
+
str << byte unless count == 0
|
278
286
|
end
|
279
287
|
end
|
280
288
|
|
@@ -327,7 +335,7 @@ class PDF::Reader
|
|
327
335
|
@io.getbyte
|
328
336
|
@tokens << ">>"
|
329
337
|
else
|
330
|
-
@tokens <<
|
338
|
+
@tokens << ">"
|
331
339
|
end
|
332
340
|
tok = ""
|
333
341
|
break
|
@@ -351,7 +359,7 @@ class PDF::Reader
|
|
351
359
|
tok = ""
|
352
360
|
break
|
353
361
|
else
|
354
|
-
tok << byte
|
362
|
+
tok << byte
|
355
363
|
end
|
356
364
|
end
|
357
365
|
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'forwardable'
|
5
|
+
|
6
|
+
class PDF::Reader
|
7
|
+
# A Hash-like object that wraps the array of glyph widths in a CID font
|
8
|
+
# and gives us a nice way to query it for specific widths.
|
9
|
+
#
|
10
|
+
# there are two ways to calculate a cidfont_glyph_width, that are defined
|
11
|
+
# in Section 9.7.4.3 PDF 32000-1:2008 pp 271, the differences are remarked
|
12
|
+
# on below. because of these difference that may be contained within the
|
13
|
+
# same array, it is a bit difficult to parse this array.
|
14
|
+
class CidWidths
|
15
|
+
extend Forwardable
|
16
|
+
|
17
|
+
# Graphics State Operators
|
18
|
+
def_delegators :@widths, :[], :fetch
|
19
|
+
|
20
|
+
def initialize(default, array)
|
21
|
+
@widths = parse_array(default, array.dup)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def parse_array(default, array)
|
27
|
+
widths = Hash.new(default)
|
28
|
+
params = []
|
29
|
+
while array.size > 0
|
30
|
+
params << array.shift
|
31
|
+
|
32
|
+
if params.size == 2 && params.last.is_a?(Array)
|
33
|
+
widths.merge! parse_first_form(params.first, params.last)
|
34
|
+
params = []
|
35
|
+
elsif params.size == 3
|
36
|
+
widths.merge! parse_second_form(params[0], params[1], params[2])
|
37
|
+
params = []
|
38
|
+
end
|
39
|
+
end
|
40
|
+
widths
|
41
|
+
end
|
42
|
+
|
43
|
+
# this is the form 10 [234 63 234 346 47 234] where width of index 10 is
|
44
|
+
# 234, index 11 is 63, etc
|
45
|
+
def parse_first_form(first, widths)
|
46
|
+
widths.inject({}) { |accum, glyph_width|
|
47
|
+
accum[first + accum.size] = glyph_width
|
48
|
+
accum
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
# this is the form 10 20 123 where all index between 10 and 20 have width 123
|
53
|
+
def parse_second_form(first, final, width)
|
54
|
+
(first..final).inject({}) { |accum, index|
|
55
|
+
accum[index] = width
|
56
|
+
accum
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/lib/pdf/reader/cmap.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
################################################################################
|
2
4
|
#
|
3
5
|
# Copyright (C) 2008 James Healy (jimmy@deefa.com)
|
@@ -24,6 +26,10 @@
|
|
24
26
|
################################################################################
|
25
27
|
|
26
28
|
class PDF::Reader
|
29
|
+
|
30
|
+
# wraps a string containing a PDF CMap and provides convenience methods for
|
31
|
+
# extracting various useful information.
|
32
|
+
#
|
27
33
|
class CMap # :nodoc:
|
28
34
|
|
29
35
|
attr_reader :map
|
@@ -84,9 +90,9 @@ class PDF::Reader
|
|
84
90
|
else # UTF-16
|
85
91
|
str.unpack("n*")
|
86
92
|
end
|
87
|
-
if unpacked_string.
|
93
|
+
if unpacked_string.size == 1
|
88
94
|
unpacked_string
|
89
|
-
elsif unpacked_string.
|
95
|
+
elsif unpacked_string.size == 2 && unpacked_string[0] > 0xD800 && unpacked_string[0] < 0xDBFF
|
90
96
|
# this is a Unicode UTF-16 "Surrogate Pair" see Unicode Spec. Chapter 3.7
|
91
97
|
# lets convert to a UTF-32. (the high bit is between 0xD800-0xDBFF, the
|
92
98
|
# low bit is between 0xDC00-0xDFFF) for example: U+1D44E (U+D835 U+DC4E)
|
data/lib/pdf/reader/encoding.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
################################################################################
|
2
4
|
#
|
3
5
|
# Copyright (C) 2008 James Healy (jimmy@deefa.com)
|
@@ -24,6 +26,8 @@
|
|
24
26
|
################################################################################
|
25
27
|
|
26
28
|
class PDF::Reader
|
29
|
+
# Util class for working with string encodings in PDF files. Mostly used to
|
30
|
+
# convert strings of various PDF-dialect encodings into UTF-8.
|
27
31
|
class Encoding # :nodoc:
|
28
32
|
CONTROL_CHARS = [0,1,2,3,4,5,6,7,8,11,12,14,15,16,17,18,19,20,21,22,23,
|
29
33
|
24,25,26,27,28,29,30,31]
|
@@ -32,6 +36,10 @@ class PDF::Reader
|
|
32
36
|
attr_reader :unpack
|
33
37
|
|
34
38
|
def initialize(enc)
|
39
|
+
@mapping = {} # maps from character codes to Unicode codepoints
|
40
|
+
# also maps control and invalid chars to UNKNOWN_CHAR
|
41
|
+
@string_cache = {} # maps from character codes to UTF-8 strings.
|
42
|
+
|
35
43
|
if enc.kind_of?(Hash)
|
36
44
|
self.differences = enc[:Differences] if enc[:Differences]
|
37
45
|
enc = enc[:Encoding] || enc[:BaseEncoding]
|
@@ -44,7 +52,9 @@ class PDF::Reader
|
|
44
52
|
@enc_name = enc
|
45
53
|
@unpack = get_unpack(enc)
|
46
54
|
@map_file = get_mapping_file(enc)
|
55
|
+
|
47
56
|
load_mapping(@map_file) if @map_file
|
57
|
+
add_control_chars_to_mapping
|
48
58
|
end
|
49
59
|
|
50
60
|
# set the differences table for this encoding. should be an array in the following format:
|
@@ -66,6 +76,7 @@ class PDF::Reader
|
|
66
76
|
byte = val.to_i
|
67
77
|
else
|
68
78
|
@differences[byte] = val
|
79
|
+
@mapping[byte] = names_to_unicode[val]
|
69
80
|
byte += 1
|
70
81
|
end
|
71
82
|
end
|
@@ -73,6 +84,7 @@ class PDF::Reader
|
|
73
84
|
end
|
74
85
|
|
75
86
|
def differences
|
87
|
+
# this method is only used by the spec tests
|
76
88
|
@differences ||= {}
|
77
89
|
end
|
78
90
|
|
@@ -95,8 +107,37 @@ class PDF::Reader
|
|
95
107
|
end
|
96
108
|
end
|
97
109
|
|
110
|
+
def int_to_utf8_string(glyph_code)
|
111
|
+
@string_cache[glyph_code] ||= internal_int_to_utf8_string(glyph_code)
|
112
|
+
end
|
113
|
+
|
114
|
+
# convert an integer glyph code into an Adobe glyph name.
|
115
|
+
#
|
116
|
+
# int_to_name(65)
|
117
|
+
# => :A
|
118
|
+
#
|
119
|
+
# TODO: this needs to be expanded to return the appropriate name for standard
|
120
|
+
# glyph codes in the encoding. 65 to :A, etc. At the moment it only
|
121
|
+
# handles glyphs in the difference table
|
122
|
+
#
|
123
|
+
def int_to_name(glyph_code)
|
124
|
+
if @enc_name == "Identity-H" || @enc_name == "Identity-V"
|
125
|
+
nil
|
126
|
+
else
|
127
|
+
@differences[glyph_code]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
98
131
|
private
|
99
132
|
|
133
|
+
def internal_int_to_utf8_string(glyph_code)
|
134
|
+
ret = [
|
135
|
+
@mapping[glyph_code.to_i] || glyph_code.to_i
|
136
|
+
].pack("U*")
|
137
|
+
ret.force_encoding("UTF-8") if ret.respond_to?(:force_encoding)
|
138
|
+
ret
|
139
|
+
end
|
140
|
+
|
100
141
|
def utf8_conversion_impossible?
|
101
142
|
@enc_name == :"Identity-H" || @enc_name == :"Identity-V"
|
102
143
|
end
|
@@ -109,28 +150,8 @@ class PDF::Reader
|
|
109
150
|
end
|
110
151
|
|
111
152
|
def convert_to_utf8(str)
|
112
|
-
ret = str.unpack(unpack).map { |c|
|
113
|
-
differences[c] || c
|
114
|
-
}.map { |c|
|
115
|
-
mapping[c] || c
|
116
|
-
}.map { |c|
|
117
|
-
names_to_unicode[c] || c
|
118
|
-
}.map { |c|
|
119
|
-
if PDF::Reader::Encoding::CONTROL_CHARS.include?(c)
|
120
|
-
PDF::Reader::Encoding::UNKNOWN_CHAR
|
121
|
-
else
|
122
|
-
c
|
123
|
-
end
|
124
|
-
}.map { |c|
|
125
|
-
if c.nil? || !c.is_a?(Fixnum)
|
126
|
-
PDF::Reader::Encoding::UNKNOWN_CHAR
|
127
|
-
else
|
128
|
-
c
|
129
|
-
end
|
130
|
-
}.pack("U*")
|
131
|
-
|
153
|
+
ret = str.unpack(unpack).map! { |c| @mapping[c] || c }.pack("U*")
|
132
154
|
ret.force_encoding("UTF-8") if ret.respond_to?(:force_encoding)
|
133
|
-
|
134
155
|
ret
|
135
156
|
end
|
136
157
|
|
@@ -164,12 +185,8 @@ class PDF::Reader
|
|
164
185
|
end
|
165
186
|
end
|
166
187
|
|
167
|
-
def mapping
|
168
|
-
@mapping ||= {}
|
169
|
-
end
|
170
|
-
|
171
188
|
def has_mapping?
|
172
|
-
mapping.size > 0
|
189
|
+
@mapping.size > 0
|
173
190
|
end
|
174
191
|
|
175
192
|
def names_to_unicode
|
@@ -183,10 +200,18 @@ class PDF::Reader
|
|
183
200
|
File.open(file, mode) do |f|
|
184
201
|
f.each do |l|
|
185
202
|
m, single_byte, unicode = *l.match(/([0-9A-Za-z]+);([0-9A-F]{4})/)
|
186
|
-
mapping["0x#{single_byte}".hex] = "0x#{unicode}".hex if single_byte
|
203
|
+
@mapping["0x#{single_byte}".hex] = "0x#{unicode}".hex if single_byte
|
187
204
|
end
|
188
205
|
end
|
189
206
|
end
|
190
207
|
|
208
|
+
def add_control_chars_to_mapping
|
209
|
+
PDF::Reader::Encoding::CONTROL_CHARS.each do |byte|
|
210
|
+
unless @mapping[byte]
|
211
|
+
@mapping[byte] = PDF::Reader::Encoding::UNKNOWN_CHAR
|
212
|
+
end
|
213
|
+
end
|
214
|
+
@mapping[nil] = PDF::Reader::Encoding::UNKNOWN_CHAR
|
215
|
+
end
|
191
216
|
end
|
192
217
|
end
|