hexapdf 0.20.1 → 0.20.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/data/hexapdf/encoding/glyphlist.txt +4283 -4282
- data/data/hexapdf/encoding/zapfdingbats.txt +203 -202
- data/lib/hexapdf/font/encoding/glyph_list.rb +5 -6
- data/lib/hexapdf/task/optimize.rb +3 -3
- data/lib/hexapdf/version.rb +1 -1
- data/test/hexapdf/task/test_optimize.rb +4 -1
- data/test/hexapdf/test_writer.rb +2 -2
- metadata +2 -2
@@ -12,6 +12,8 @@
|
|
12
12
|
# implied. See the License for the specific language governing
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
# -----------------------------------------------------------
|
15
|
+
# Modified for use with HexaPDF
|
16
|
+
# -----------------------------------------------------------
|
15
17
|
# Name: ITC Zapf Dingbats Glyph List
|
16
18
|
# Table version: 2.0
|
17
19
|
# Date: September 20, 2002
|
@@ -21,205 +23,204 @@
|
|
21
23
|
# (1) glyph name--upper/lowercase letters and digits
|
22
24
|
# (2) Unicode scalar value--four uppercase hexadecimal digits
|
23
25
|
#
|
24
|
-
a100
|
25
|
-
a101
|
26
|
-
a102
|
27
|
-
a103
|
28
|
-
a104
|
29
|
-
a105
|
30
|
-
a106
|
31
|
-
a107
|
32
|
-
a108
|
33
|
-
a109
|
34
|
-
a10
|
35
|
-
a110
|
36
|
-
a111
|
37
|
-
a112
|
38
|
-
a117
|
39
|
-
a118
|
40
|
-
a119
|
41
|
-
a11
|
42
|
-
a120
|
43
|
-
a121
|
44
|
-
a122
|
45
|
-
a123
|
46
|
-
a124
|
47
|
-
a125
|
48
|
-
a126
|
49
|
-
a127
|
50
|
-
a128
|
51
|
-
a129
|
52
|
-
a12
|
53
|
-
a130
|
54
|
-
a131
|
55
|
-
a132
|
56
|
-
a133
|
57
|
-
a134
|
58
|
-
a135
|
59
|
-
a136
|
60
|
-
a137
|
61
|
-
a138
|
62
|
-
a139
|
63
|
-
a13
|
64
|
-
a140
|
65
|
-
a141
|
66
|
-
a142
|
67
|
-
a143
|
68
|
-
a144
|
69
|
-
a145
|
70
|
-
a146
|
71
|
-
a147
|
72
|
-
a148
|
73
|
-
a149
|
74
|
-
a14
|
75
|
-
a150
|
76
|
-
a151
|
77
|
-
a152
|
78
|
-
a153
|
79
|
-
a154
|
80
|
-
a155
|
81
|
-
a156
|
82
|
-
a157
|
83
|
-
a158
|
84
|
-
a159
|
85
|
-
a15
|
86
|
-
a160
|
87
|
-
a161
|
88
|
-
a162
|
89
|
-
a163
|
90
|
-
a164
|
91
|
-
a165
|
92
|
-
a166
|
93
|
-
a167
|
94
|
-
a168
|
95
|
-
a169
|
96
|
-
a16
|
97
|
-
a170
|
98
|
-
a171
|
99
|
-
a172
|
100
|
-
a173
|
101
|
-
a174
|
102
|
-
a175
|
103
|
-
a176
|
104
|
-
a177
|
105
|
-
a178
|
106
|
-
a179
|
107
|
-
a17
|
108
|
-
a180
|
109
|
-
a181
|
110
|
-
a182
|
111
|
-
a183
|
112
|
-
a184
|
113
|
-
a185
|
114
|
-
a186
|
115
|
-
a187
|
116
|
-
a188
|
117
|
-
a189
|
118
|
-
a18
|
119
|
-
a190
|
120
|
-
a191
|
121
|
-
a192
|
122
|
-
a193
|
123
|
-
a194
|
124
|
-
a195
|
125
|
-
a196
|
126
|
-
a197
|
127
|
-
a198
|
128
|
-
a199
|
129
|
-
a19
|
130
|
-
a1
|
131
|
-
a200
|
132
|
-
a201
|
133
|
-
a202
|
134
|
-
a203
|
135
|
-
a204
|
136
|
-
a205
|
137
|
-
a206
|
138
|
-
a20
|
139
|
-
a21
|
140
|
-
a22
|
141
|
-
a23
|
142
|
-
a24
|
143
|
-
a25
|
144
|
-
a26
|
145
|
-
a27
|
146
|
-
a28
|
147
|
-
a29
|
148
|
-
a2
|
149
|
-
a30
|
150
|
-
a31
|
151
|
-
a32
|
152
|
-
a33
|
153
|
-
a34
|
154
|
-
a35
|
155
|
-
a36
|
156
|
-
a37
|
157
|
-
a38
|
158
|
-
a39
|
159
|
-
a3
|
160
|
-
a40
|
161
|
-
a41
|
162
|
-
a42
|
163
|
-
a43
|
164
|
-
a44
|
165
|
-
a45
|
166
|
-
a46
|
167
|
-
a47
|
168
|
-
a48
|
169
|
-
a49
|
170
|
-
a4
|
171
|
-
a50
|
172
|
-
a51
|
173
|
-
a52
|
174
|
-
a53
|
175
|
-
a54
|
176
|
-
a55
|
177
|
-
a56
|
178
|
-
a57
|
179
|
-
a58
|
180
|
-
a59
|
181
|
-
a5
|
182
|
-
a60
|
183
|
-
a61
|
184
|
-
a62
|
185
|
-
a63
|
186
|
-
a64
|
187
|
-
a65
|
188
|
-
a66
|
189
|
-
a67
|
190
|
-
a68
|
191
|
-
a69
|
192
|
-
a6
|
193
|
-
a70
|
194
|
-
a71
|
195
|
-
a72
|
196
|
-
a73
|
197
|
-
a74
|
198
|
-
a75
|
199
|
-
a76
|
200
|
-
a77
|
201
|
-
a78
|
202
|
-
a79
|
203
|
-
a7
|
204
|
-
a81
|
205
|
-
a82
|
206
|
-
a83
|
207
|
-
a84
|
208
|
-
a85
|
209
|
-
a86
|
210
|
-
a87
|
211
|
-
a88
|
212
|
-
a89
|
213
|
-
a8
|
214
|
-
a90
|
215
|
-
a91
|
216
|
-
a92
|
217
|
-
a93
|
218
|
-
a94
|
219
|
-
a95
|
220
|
-
a96
|
221
|
-
a97
|
222
|
-
a98
|
223
|
-
a99
|
224
|
-
a9
|
225
|
-
#END
|
26
|
+
a100;❞
|
27
|
+
a101;❡
|
28
|
+
a102;❢
|
29
|
+
a103;❣
|
30
|
+
a104;❤
|
31
|
+
a105;✐
|
32
|
+
a106;❥
|
33
|
+
a107;❦
|
34
|
+
a108;❧
|
35
|
+
a109;♠
|
36
|
+
a10;✡
|
37
|
+
a110;♥
|
38
|
+
a111;♦
|
39
|
+
a112;♣
|
40
|
+
a117;✉
|
41
|
+
a118;✈
|
42
|
+
a119;✇
|
43
|
+
a11;☛
|
44
|
+
a120;①
|
45
|
+
a121;②
|
46
|
+
a122;③
|
47
|
+
a123;④
|
48
|
+
a124;⑤
|
49
|
+
a125;⑥
|
50
|
+
a126;⑦
|
51
|
+
a127;⑧
|
52
|
+
a128;⑨
|
53
|
+
a129;⑩
|
54
|
+
a12;☞
|
55
|
+
a130;❶
|
56
|
+
a131;❷
|
57
|
+
a132;❸
|
58
|
+
a133;❹
|
59
|
+
a134;❺
|
60
|
+
a135;❻
|
61
|
+
a136;❼
|
62
|
+
a137;❽
|
63
|
+
a138;❾
|
64
|
+
a139;❿
|
65
|
+
a13;✌
|
66
|
+
a140;➀
|
67
|
+
a141;➁
|
68
|
+
a142;➂
|
69
|
+
a143;➃
|
70
|
+
a144;➄
|
71
|
+
a145;➅
|
72
|
+
a146;➆
|
73
|
+
a147;➇
|
74
|
+
a148;➈
|
75
|
+
a149;➉
|
76
|
+
a14;✍
|
77
|
+
a150;➊
|
78
|
+
a151;➋
|
79
|
+
a152;➌
|
80
|
+
a153;➍
|
81
|
+
a154;➎
|
82
|
+
a155;➏
|
83
|
+
a156;➐
|
84
|
+
a157;➑
|
85
|
+
a158;➒
|
86
|
+
a159;➓
|
87
|
+
a15;✎
|
88
|
+
a160;➔
|
89
|
+
a161;→
|
90
|
+
a162;➣
|
91
|
+
a163;↔
|
92
|
+
a164;↕
|
93
|
+
a165;➙
|
94
|
+
a166;➛
|
95
|
+
a167;➜
|
96
|
+
a168;➝
|
97
|
+
a169;➞
|
98
|
+
a16;✏
|
99
|
+
a170;➟
|
100
|
+
a171;➠
|
101
|
+
a172;➡
|
102
|
+
a173;➢
|
103
|
+
a174;➤
|
104
|
+
a175;➥
|
105
|
+
a176;➦
|
106
|
+
a177;➧
|
107
|
+
a178;➨
|
108
|
+
a179;➩
|
109
|
+
a17;✑
|
110
|
+
a180;➫
|
111
|
+
a181;➭
|
112
|
+
a182;➯
|
113
|
+
a183;➲
|
114
|
+
a184;➳
|
115
|
+
a185;➵
|
116
|
+
a186;➸
|
117
|
+
a187;➺
|
118
|
+
a188;➻
|
119
|
+
a189;➼
|
120
|
+
a18;✒
|
121
|
+
a190;➽
|
122
|
+
a191;➾
|
123
|
+
a192;➚
|
124
|
+
a193;➪
|
125
|
+
a194;➶
|
126
|
+
a195;➹
|
127
|
+
a196;➘
|
128
|
+
a197;➴
|
129
|
+
a198;➷
|
130
|
+
a199;➬
|
131
|
+
a19;✓
|
132
|
+
a1;✁
|
133
|
+
a200;➮
|
134
|
+
a201;➱
|
135
|
+
a202;✃
|
136
|
+
a203;❐
|
137
|
+
a204;❒
|
138
|
+
a205;❮
|
139
|
+
a206;❰
|
140
|
+
a20;✔
|
141
|
+
a21;✕
|
142
|
+
a22;✖
|
143
|
+
a23;✗
|
144
|
+
a24;✘
|
145
|
+
a25;✙
|
146
|
+
a26;✚
|
147
|
+
a27;✛
|
148
|
+
a28;✜
|
149
|
+
a29;✢
|
150
|
+
a2;✂
|
151
|
+
a30;✣
|
152
|
+
a31;✤
|
153
|
+
a32;✥
|
154
|
+
a33;✦
|
155
|
+
a34;✧
|
156
|
+
a35;★
|
157
|
+
a36;✩
|
158
|
+
a37;✪
|
159
|
+
a38;✫
|
160
|
+
a39;✬
|
161
|
+
a3;✄
|
162
|
+
a40;✭
|
163
|
+
a41;✮
|
164
|
+
a42;✯
|
165
|
+
a43;✰
|
166
|
+
a44;✱
|
167
|
+
a45;✲
|
168
|
+
a46;✳
|
169
|
+
a47;✴
|
170
|
+
a48;✵
|
171
|
+
a49;✶
|
172
|
+
a4;☎
|
173
|
+
a50;✷
|
174
|
+
a51;✸
|
175
|
+
a52;✹
|
176
|
+
a53;✺
|
177
|
+
a54;✻
|
178
|
+
a55;✼
|
179
|
+
a56;✽
|
180
|
+
a57;✾
|
181
|
+
a58;✿
|
182
|
+
a59;❀
|
183
|
+
a5;✆
|
184
|
+
a60;❁
|
185
|
+
a61;❂
|
186
|
+
a62;❃
|
187
|
+
a63;❄
|
188
|
+
a64;❅
|
189
|
+
a65;❆
|
190
|
+
a66;❇
|
191
|
+
a67;❈
|
192
|
+
a68;❉
|
193
|
+
a69;❊
|
194
|
+
a6;✝
|
195
|
+
a70;❋
|
196
|
+
a71;●
|
197
|
+
a72;❍
|
198
|
+
a73;■
|
199
|
+
a74;❏
|
200
|
+
a75;❑
|
201
|
+
a76;▲
|
202
|
+
a77;▼
|
203
|
+
a78;◆
|
204
|
+
a79;❖
|
205
|
+
a7;✞
|
206
|
+
a81;◗
|
207
|
+
a82;❘
|
208
|
+
a83;❙
|
209
|
+
a84;❚
|
210
|
+
a85;❯
|
211
|
+
a86;❱
|
212
|
+
a87;❲
|
213
|
+
a88;❳
|
214
|
+
a89;❨
|
215
|
+
a8;✟
|
216
|
+
a90;❩
|
217
|
+
a91;❬
|
218
|
+
a92;❭
|
219
|
+
a93;❪
|
220
|
+
a94;❫
|
221
|
+
a95;❴
|
222
|
+
a96;❵
|
223
|
+
a97;❛
|
224
|
+
a98;❜
|
225
|
+
a99;❝
|
226
|
+
a9;✠
|
@@ -131,13 +131,12 @@ module HexaPDF
|
|
131
131
|
def load_file(file)
|
132
132
|
name2uni = {}
|
133
133
|
uni2name = {}
|
134
|
-
File.open(file, '
|
134
|
+
File.open(file, 'r:UTF-8') do |f|
|
135
|
+
25.times { f.gets } # Skip comments
|
135
136
|
while (line = f.gets)
|
136
|
-
|
137
|
-
|
138
|
-
name =
|
139
|
-
codes = line[index + 1, 50].split(" ").map(&:hex).pack('U*')
|
140
|
-
name2uni[name] = codes
|
137
|
+
name, codes = line.split(';', 2)
|
138
|
+
name = name.to_sym
|
139
|
+
name2uni[name] = codes.chomp!
|
141
140
|
uni2name[codes] = name unless uni2name.key?(codes)
|
142
141
|
end
|
143
142
|
end
|
@@ -234,7 +234,7 @@ module HexaPDF
|
|
234
234
|
page.contents = processor.result
|
235
235
|
page[:Contents].set_filter(:FlateDecode)
|
236
236
|
xobjects = page.resources[:XObject]
|
237
|
-
processor.used_references.each {|ref| used_refs[xobjects[ref]] = true }
|
237
|
+
processor.used_references.each {|ref| used_refs[xobjects[ref]] = true } if xobjects
|
238
238
|
end
|
239
239
|
used_refs
|
240
240
|
end
|
@@ -245,7 +245,7 @@ module HexaPDF
|
|
245
245
|
unless used_refs
|
246
246
|
used_refs = {}
|
247
247
|
doc.pages.each do |page|
|
248
|
-
xobjects = page.resources[:XObject]
|
248
|
+
next unless (xobjects = page.resources[:XObject])
|
249
249
|
HexaPDF::Content::Parser.parse(page.contents) do |op, operands|
|
250
250
|
used_refs[xobjects[operands[0]]] = true if op == :Do
|
251
251
|
end
|
@@ -253,7 +253,7 @@ module HexaPDF
|
|
253
253
|
end
|
254
254
|
|
255
255
|
doc.pages.each do |page|
|
256
|
-
xobjects = page.resources[:XObject]
|
256
|
+
next unless (xobjects = page.resources[:XObject])
|
257
257
|
xobjects.each do |key, obj|
|
258
258
|
next if used_refs[obj]
|
259
259
|
xobjects.delete(key)
|
data/lib/hexapdf/version.rb
CHANGED
@@ -168,12 +168,14 @@ describe HexaPDF::Task::Optimize do
|
|
168
168
|
page1.resources[:XObject][:test] = @doc.add({})
|
169
169
|
page1.resources[:XObject][:used_on_page2] = @doc.add({})
|
170
170
|
page1.resources[:XObject][:unused] = @doc.add({})
|
171
|
-
page1.contents = "/test Do"
|
171
|
+
page1.contents = "/test Do /InvalidRef Do"
|
172
172
|
page2 = @doc.pages.add
|
173
173
|
page2.resources[:XObject] = {}
|
174
174
|
page2.resources[:XObject][:used_on2] = page1.resources[:XObject][:used_on_page2]
|
175
175
|
page2.resources[:XObject][:also_unused] = page1.resources[:XObject][:unused]
|
176
176
|
page2.contents = "/used_on2 Do"
|
177
|
+
page3 = @doc.pages.add
|
178
|
+
page3.contents = "/unused Do "
|
177
179
|
|
178
180
|
@doc.task(:optimize, prune_page_resources: true, compress_pages: compress_pages)
|
179
181
|
|
@@ -182,6 +184,7 @@ describe HexaPDF::Task::Optimize do
|
|
182
184
|
refute(page1.resources[:XObject].key?(:unused))
|
183
185
|
assert(page2.resources[:XObject].key?(:used_on2))
|
184
186
|
refute(page2.resources[:XObject].key?(:also_unused))
|
187
|
+
assert_equal("/unused Do#{compress_pages ? "\n" : ' '}", page3.contents)
|
185
188
|
end
|
186
189
|
end
|
187
190
|
end
|
data/test/hexapdf/test_writer.rb
CHANGED
@@ -40,7 +40,7 @@ describe HexaPDF::Writer do
|
|
40
40
|
219
|
41
41
|
%%EOF
|
42
42
|
3 0 obj
|
43
|
-
<</Producer(HexaPDF version 0.20.
|
43
|
+
<</Producer(HexaPDF version 0.20.2)>>
|
44
44
|
endobj
|
45
45
|
xref
|
46
46
|
3 1
|
@@ -72,7 +72,7 @@ describe HexaPDF::Writer do
|
|
72
72
|
141
|
73
73
|
%%EOF
|
74
74
|
6 0 obj
|
75
|
-
<</Producer(HexaPDF version 0.20.
|
75
|
+
<</Producer(HexaPDF version 0.20.2)>>
|
76
76
|
endobj
|
77
77
|
2 0 obj
|
78
78
|
<</Length 10>>stream
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hexapdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.20.
|
4
|
+
version: 0.20.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Leitner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cmdparse
|