rbpdf 1.19.5 → 1.19.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +12 -0
- data/Gemfile +1 -2
- data/lib/rbpdf.rb +36 -4
- data/lib/rbpdf/version.rb +2 -2
- data/test/rbpdf_cell_test.rb +75 -190
- data/test/rbpdf_dom_test.rb +193 -269
- data/test/rbpdf_examples_test.rb +83 -0
- data/test/rbpdf_html_anchor_test.rb +2 -2
- data/test/rbpdf_htmlcell_test.rb +40 -48
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eb07b943fb93bd28c583e7d1725cb594fd38e37e
|
4
|
+
data.tar.gz: bc4e241e6d61bf6ff850080c598fe468a0c524a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01bf0690ab57b3248123090f7832826d60247d6361e276187a9efa98855a95733a869a48edd3d85f3b938f78c4ca424f7a830c6c203146830a350e2ee4bf8b9d
|
7
|
+
data.tar.gz: 65cc6adaff4ee5271c0f9d006e4dc600d93766c0d807fb90fd6120399ed73316258aee785bff8f963bee85a920705cb4414ef21fbe964785ea6543399e78995f
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
1.19.6 2018-10-06
|
2
|
+
- The problem of the line feed position of Ln() function has been fixed.
|
3
|
+
- Fixed a problem of line feed position occurring in the following <pre> tag of HTML in the following cases.
|
4
|
+
When a <br> tag is included immediately after the start of the <pre> tag.
|
5
|
+
When a <br> tag is included immediately before the end of the <pre> tag.
|
6
|
+
When a line feed is included immediately after the start of the tag.
|
7
|
+
When a line feed is included immediately before the end of the tag.
|
8
|
+
- Fixed a problem of line feed position occurring in the following </pre> and <p> tags of HTML in the following cases.
|
9
|
+
When a space is included between the </pre> tag and the <p> tag.
|
10
|
+
- Cell link bug fixed.
|
11
|
+
- Examples test added.
|
12
|
+
|
1
13
|
1.19.5 2018-06-24
|
2
14
|
- Fixed that the handling of Tempfile was wrong.
|
3
15
|
- Fixed compatibility problem with Magick::RGBColorspace and Magick::SRGBColorspace.
|
data/Gemfile
CHANGED
data/lib/rbpdf.rb
CHANGED
@@ -2994,7 +2994,7 @@ class RBPDF
|
|
2994
2994
|
#
|
2995
2995
|
def AddLink()
|
2996
2996
|
#Create a new internal link
|
2997
|
-
n = @links.length
|
2997
|
+
n = @links.length + 1
|
2998
2998
|
@links[n]=[0,0];
|
2999
2999
|
return n;
|
3000
3000
|
end
|
@@ -3757,7 +3757,7 @@ class RBPDF
|
|
3757
3757
|
if (@color_flag)
|
3758
3758
|
s<<' Q';
|
3759
3759
|
end
|
3760
|
-
if link && ((link.is_a?(String) and !link.empty?) or (link.is_a?(Integer) and link
|
3760
|
+
if link && ((link.is_a?(String) and !link.empty?) or (link.is_a?(Integer) and link != 0)) # Integer is PDF file Page No.
|
3761
3761
|
Link(xdx, y + ((h - @font_size) / 2.0), width, @font_size, link, ns)
|
3762
3762
|
end
|
3763
3763
|
end
|
@@ -3993,7 +3993,11 @@ class RBPDF
|
|
3993
3993
|
end
|
3994
3994
|
end
|
3995
3995
|
SetX(nx)
|
3996
|
+
|
3997
|
+
prevLastH = @lasth
|
3996
3998
|
ccode = getCellCode(w, h, '', cborder, 1, '', fill, '', 0, false)
|
3999
|
+
@lasth = prevLastH
|
4000
|
+
|
3997
4001
|
if (cborder != 0) or (fill == 1)
|
3998
4002
|
pagebuff = getPageBuffer(@page)
|
3999
4003
|
pstart = pagebuff[0, @intmrk[@page]]
|
@@ -4007,8 +4011,12 @@ class RBPDF
|
|
4007
4011
|
# put cursor at the beginning of text
|
4008
4012
|
SetY(y)
|
4009
4013
|
SetX(x)
|
4014
|
+
|
4015
|
+
prevLastH = @lasth
|
4010
4016
|
# design a cell around the text
|
4011
4017
|
ccode = getCellCode(w, h, '', border, 1, '', fill, '', 0, true)
|
4018
|
+
@lasth = prevLastH
|
4019
|
+
|
4012
4020
|
if (border != 0) or (fill == 1)
|
4013
4021
|
if !@transfmrk[@page].nil?
|
4014
4022
|
pagemark = @transfmrk[@page]
|
@@ -11242,8 +11250,24 @@ protected
|
|
11242
11250
|
html_b = html[offset, pos - offset + 6]
|
11243
11251
|
while html_b =~ /<xre([^\>]*)>(.*?)\n(.*?)<\/pre>/mi
|
11244
11252
|
# preserve newlines on <pre> tag
|
11245
|
-
html_b = html_b.gsub(/<xre([^\>]*)>(.*?)\n(.*?)<\/pre>/mi
|
11253
|
+
html_b = html_b.gsub(/<xre([^\>]*)>(.*?)\n(.*?)<\/pre>/mi) do
|
11254
|
+
if ($2 != '') and ($3 != '')
|
11255
|
+
"<xre#{$1}>#{$2}<br />#{$3}</pre>"
|
11256
|
+
elsif ($2 == '') and ($3 != '')
|
11257
|
+
"<xre#{$1}>#{$3}</pre>"
|
11258
|
+
elsif ($2 != '') and ($3 == '')
|
11259
|
+
"<xre#{$1}>#{$2}</pre>"
|
11260
|
+
else
|
11261
|
+
"<xre#{$1}></pre>"
|
11262
|
+
end
|
11263
|
+
end
|
11246
11264
|
end
|
11265
|
+
|
11266
|
+
# Delete the <br />(<br>) tag located immediately after the <pre> tag.
|
11267
|
+
html_b = html_b.gsub(/<xre([^\>]*)>((?:<[^\>]+>)*)<br *\/*>/, "<xre\\1>\\2")
|
11268
|
+
# Delete the <br />(<br>) tag located immediately before the </pre> tag.
|
11269
|
+
html_b = html_b.gsub(/<br *\/*>((?:<\/[^\>]+>)*)<\/pre>/, "\\1</pre>")
|
11270
|
+
|
11247
11271
|
while html_b =~ /<xre([^\>]*)>(.*?)[\s](.*?)<\/pre>/mi
|
11248
11272
|
# preserve whitespace on <pre> tag
|
11249
11273
|
html_b = html_b.gsub(/<xre([^\>]*)>(.*?)[\s](.*?)<\/pre>/mi, "<xre\\1>\\2 \\3</pre>")
|
@@ -12794,7 +12818,7 @@ public
|
|
12794
12818
|
startlinepage = @page
|
12795
12819
|
end
|
12796
12820
|
end
|
12797
|
-
elsif dom[key]['value'].length > 0
|
12821
|
+
elsif dom[key]['value'].strip.length > 0
|
12798
12822
|
# print list-item
|
12799
12823
|
if !empty_string(@lispacer)
|
12800
12824
|
SetFont(pfontname, pfontstyle, pfontsize)
|
@@ -13596,8 +13620,12 @@ public
|
|
13596
13620
|
@x += @pagedim[page]['olm'] - @pagedim[startpage]['olm']
|
13597
13621
|
end
|
13598
13622
|
end
|
13623
|
+
|
13624
|
+
prevLastH = @lasth
|
13599
13625
|
# design a cell around the text
|
13600
13626
|
ccode = @fill_color + "\n" + getCellCode(cw, ch, '', cborder, 1, '', fill, '', 0, true)
|
13627
|
+
@lasth = prevLastH
|
13628
|
+
|
13601
13629
|
if (cborder != 0) or (fill == 1)
|
13602
13630
|
pagebuff = getPageBuffer(@page)
|
13603
13631
|
pstart = pagebuff[0, @intmrk[@page]]
|
@@ -13618,8 +13646,12 @@ public
|
|
13618
13646
|
@y = parent['starty']
|
13619
13647
|
cw = (cellpos['endx'] - cellpos['startx']).abs
|
13620
13648
|
ch = endy - parent['starty']
|
13649
|
+
|
13650
|
+
prevLastH = @lasth
|
13621
13651
|
# design a cell around the text
|
13622
13652
|
ccode = @fill_color + "\n" + getCellCode(cw, ch, '', border, 1, '', fill, '', 0, true)
|
13653
|
+
@lasth = prevLastH
|
13654
|
+
|
13623
13655
|
if (border != 0) or (fill == 1)
|
13624
13656
|
if !@transfmrk[@page].nil?
|
13625
13657
|
pagemark = @transfmrk[@page]
|
data/lib/rbpdf/version.rb
CHANGED
data/test/rbpdf_cell_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2011-
|
1
|
+
# Copyright (c) 2011-2018 NAITOH Jun
|
2
2
|
# Released under the MIT license
|
3
3
|
# http://www.opensource.org/licenses/MIT
|
4
4
|
|
@@ -18,6 +18,9 @@ class RbpdfTest < Test::Unit::TestCase
|
|
18
18
|
pdf.add_page()
|
19
19
|
content = []
|
20
20
|
contents = pdf.send(:getCellCode, 10, 10, 'abc')
|
21
|
+
#pdf.send(:getCellCode, 10, 10, 'abc')
|
22
|
+
#contents = pdf.output()
|
23
|
+
|
21
24
|
contents.each_line {|line| content.push line.chomp }
|
22
25
|
|
23
26
|
assert_equal 2, content.length
|
@@ -131,203 +134,85 @@ class RbpdfTest < Test::Unit::TestCase
|
|
131
134
|
assert_equal " /Annots [ 200001 0 R ]", annots
|
132
135
|
end
|
133
136
|
|
134
|
-
test "
|
135
|
-
pdf = RBPDF.new
|
136
|
-
pdf.add_page
|
137
|
-
|
138
|
-
txt = 'abcdefg'
|
139
|
-
|
140
|
-
w = 50
|
141
|
-
y1 = pdf.get_y
|
142
|
-
pdf.multi_cell(w, 0, txt)
|
143
|
-
pno = pdf.get_page
|
144
|
-
assert_equal 1, pno
|
145
|
-
y2 = pdf.get_y
|
146
|
-
h1 = y2 - y1
|
147
|
-
|
148
|
-
h2 = pdf.getStringHeight(w, txt)
|
149
|
-
assert_in_delta h1, h2, 0.01
|
150
|
-
|
151
|
-
line = pdf.get_num_lines(txt, w)
|
152
|
-
assert_equal 1, line
|
153
|
-
|
154
|
-
w = 20
|
155
|
-
y1 = pdf.get_y
|
156
|
-
pdf.multi_cell(w, 0, txt)
|
157
|
-
pno = pdf.get_page
|
158
|
-
assert_equal 1, pno
|
159
|
-
y2 = pdf.get_y
|
160
|
-
h1 = y2 - y1
|
161
|
-
|
162
|
-
h2 = pdf.getStringHeight(w, txt)
|
163
|
-
assert_in_delta h1, h2, 0.01
|
164
|
-
|
165
|
-
line = pdf.get_num_lines(txt, w)
|
166
|
-
assert_equal 1, line
|
167
|
-
end
|
168
|
-
|
169
|
-
test "getStringHeight Line Break test" do
|
170
|
-
pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
|
171
|
-
pdf.add_page
|
172
|
-
|
173
|
-
txt = 'abcdefg'
|
174
|
-
|
175
|
-
w = 10
|
176
|
-
y1 = pdf.get_y
|
177
|
-
pdf.multi_cell(w, 0, txt)
|
178
|
-
pno = pdf.get_page
|
179
|
-
assert_equal 1, pno
|
180
|
-
y2 = pdf.get_y
|
181
|
-
h1 = y2 - y1
|
182
|
-
|
183
|
-
h2 = pdf.getStringHeight(w, txt)
|
184
|
-
assert_in_delta h1, h2, 0.01
|
185
|
-
|
186
|
-
line = pdf.get_num_lines(txt, w)
|
187
|
-
assert_equal 3, line
|
188
|
-
|
189
|
-
|
190
|
-
w = 5
|
191
|
-
y1 = pdf.get_y
|
192
|
-
pdf.multi_cell(w, 0, txt)
|
193
|
-
pno = pdf.get_page
|
194
|
-
assert_equal 1, pno
|
195
|
-
y2 = pdf.get_y
|
196
|
-
h1 = y2 - y1
|
197
|
-
|
198
|
-
h2 = pdf.getStringHeight(w, txt)
|
199
|
-
assert_in_delta h1, h2, 0.01
|
200
|
-
|
201
|
-
line = pdf.get_num_lines(txt, w)
|
202
|
-
assert_equal 7, line
|
203
|
-
end
|
204
|
-
|
205
|
-
test "getStringHeight Multi Line test" do
|
206
|
-
pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
|
207
|
-
pdf.add_page
|
208
|
-
|
209
|
-
txt = "abc\ndif\nhij"
|
210
|
-
|
211
|
-
w = 100
|
212
|
-
y1 = pdf.get_y
|
213
|
-
pdf.multi_cell(w, 0, txt)
|
214
|
-
pno = pdf.get_page
|
215
|
-
assert_equal 1, pno
|
216
|
-
y2 = pdf.get_y
|
217
|
-
h1 = y2 - y1
|
218
|
-
|
219
|
-
h2 = pdf.getStringHeight(w, txt)
|
220
|
-
assert_in_delta h1, h2, 0.01
|
221
|
-
|
222
|
-
line = pdf.get_num_lines(txt, w)
|
223
|
-
assert_equal 3, line
|
224
|
-
end
|
225
|
-
|
226
|
-
test "getStringHeight Minimum Width test 1" do
|
227
|
-
pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
|
228
|
-
pdf.add_page
|
229
|
-
|
230
|
-
w = pdf.get_string_width('OO')
|
137
|
+
test "Cell link with Close and output PDF document test" do
|
138
|
+
pdf = RBPDF.new
|
231
139
|
|
232
|
-
|
233
|
-
|
234
|
-
y1 = pdf.get_y
|
235
|
-
pdf.multi_cell(w, 0, txt)
|
236
|
-
pno = pdf.get_page
|
237
|
-
assert_equal 1, pno
|
238
|
-
y2 = pdf.get_y
|
239
|
-
h1 = y2 - y1
|
140
|
+
# add a page
|
141
|
+
pdf.add_page()
|
240
142
|
|
241
|
-
|
242
|
-
|
143
|
+
text="DUMMY"
|
144
|
+
pdf.cell(0, 0, text, 1, 1, 'L', 1, 0)
|
243
145
|
|
244
|
-
|
245
|
-
|
146
|
+
# Close and output PDF document
|
147
|
+
content = []
|
148
|
+
contents = pdf.output()
|
149
|
+
contents.each_line {|line| content.push line.chomp }
|
150
|
+
assert_match(/3 0 obj/, content[1])
|
246
151
|
end
|
247
152
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
153
|
+
texts = {
|
154
|
+
'Basic' => {:params => [{:txt => "abcdefg", :w => 50, :pno => 1, :line => 1},
|
155
|
+
{:txt => "abcdefg", :w => 20, :pno => 1, :line => 1}]},
|
156
|
+
'Line Break' => {:params => [{:txt => "abcdefg", :w => 10, :pno => 1, :line => 3},
|
157
|
+
{:txt => "abcdefg", :w => 5, :pno => 1, :line => 7}]},
|
158
|
+
'Multi Line' => {:params => [{:txt => "abc\ndif\nhij", :w => 100, :pno => 1, :line => 3}]},
|
159
|
+
'Minimum Width' => {:params => [{:txt => "Export to PDF: align is Good.", :w => 'OO', :pno => 1, :line => 16}]},
|
160
|
+
'Minimum Width with font' => {:font => "kozminproregular", :orientation => 'L',
|
161
|
+
:params => [{:txt => "20", :w => '20', :pno => 1, :line => 2}]},
|
162
|
+
'Minimum Bidi' => {:params => [{:txt => "\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa", :w => 'OO', :pno => 1, :line => 5},
|
163
|
+
{:txt => "? \xd7\x93\xd7\x92 \xd7\xa1\xd7\xa7\xd7\xa8\xd7\x9f \xd7\xa9\xd7\x98 \xd7\x91\xd7\x99\xd7\x9d \xd7\x9e\xd7\x90\xd7\x95\xd7\x9b\xd7\x96\xd7\x91 \xd7\x95\xd7\x9c\xd7\xa4\xd7\xaa\xd7\xa2 \xd7\x9e\xd7\xa6\xd7\x90 \xd7\x9c\xd7\x95 \xd7\x97\xd7\x91\xd7\xa8\xd7\x94 \xd7\x90\xd7\x99\xd7\x9a \xd7\x94\xd7\xa7\xd7\x9c\xd7\x99\xd7\x98\xd7\x94", :w => 'OO', :pno => 1, :line => 41}]},
|
164
|
+
'Minimum Bidi with font' => {:font => "freesans", :rtl => true,
|
165
|
+
:params => [{:txt => "\xd7\x9c 000", :w => 'OO', :pno => 1, :line => 3}]},
|
166
|
+
}
|
167
|
+
|
168
|
+
data(texts)
|
169
|
+
test "getStringHeight test" do |data|
|
170
|
+
orientation = data[:orientation] ? data[:orientation] : 'P'
|
171
|
+
pdf = RBPDF.new(orientation, 'mm', 'A4', true, "UTF-8", true)
|
172
|
+
pdf.set_font(data[:font], '', 8) if data[:font]
|
173
|
+
|
174
|
+
if data[:rtl]
|
175
|
+
pdf.set_rtl(true)
|
176
|
+
pdf.set_temp_rtl('R')
|
177
|
+
end
|
264
178
|
|
265
|
-
h2 = pdf.getStringHeight(w, txt)
|
266
|
-
assert_in_delta h1, h2, 0.01
|
267
|
-
|
268
|
-
line = pdf.get_num_lines(txt, w)
|
269
|
-
assert_equal 2, line
|
270
|
-
end
|
271
|
-
|
272
|
-
test "getStringHeight Minimum Bidi test 1" do
|
273
|
-
pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
|
274
179
|
pdf.add_page
|
275
180
|
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
pdf.set_temp_rtl('R')
|
312
|
-
pdf.add_page
|
313
|
-
|
314
|
-
margins = pdf.get_margins
|
315
|
-
w = pdf.get_string_width('OO') + margins['cell'] * 2
|
316
|
-
|
317
|
-
txt = "\xd7\x9c 000"
|
318
|
-
|
319
|
-
y1 = pdf.get_y
|
320
|
-
pdf.multi_cell(w, 0, txt)
|
321
|
-
pno = pdf.get_page
|
322
|
-
assert_equal 1, pno
|
323
|
-
y2 = pdf.get_y
|
324
|
-
h1 = y2 - y1
|
325
|
-
|
326
|
-
h2 = pdf.getStringHeight(w, txt)
|
327
|
-
assert_in_delta h1, h2, 0.01
|
328
|
-
|
329
|
-
line = pdf.get_num_lines(txt, w)
|
330
|
-
assert_equal 3, line
|
181
|
+
data[:params].each_with_index {|param, i|
|
182
|
+
txt = param[:txt]
|
183
|
+
if param[:w].is_a? String
|
184
|
+
if data[:font]
|
185
|
+
margins = pdf.get_margins
|
186
|
+
w = pdf.get_string_width(param[:w]) + margins['cell'] * 2
|
187
|
+
else
|
188
|
+
w = pdf.get_string_width(param[:w])
|
189
|
+
end
|
190
|
+
else
|
191
|
+
w = param[:w]
|
192
|
+
end
|
193
|
+
|
194
|
+
lasth_0 = pdf.get_last_h
|
195
|
+
y1 = pdf.get_y
|
196
|
+
pdf.multi_cell(w, 0, txt)
|
197
|
+
lasth_1 = pdf.get_last_h
|
198
|
+
pno = pdf.get_page
|
199
|
+
assert_equal param[:pno], pno
|
200
|
+
|
201
|
+
if i == 0
|
202
|
+
assert_not_equal 0, lasth_1
|
203
|
+
else
|
204
|
+
assert_equal lasth_0, lasth_1
|
205
|
+
end
|
206
|
+
|
207
|
+
y2 = pdf.get_y
|
208
|
+
h1 = y2 - y1
|
209
|
+
|
210
|
+
h2 = pdf.getStringHeight(w, txt)
|
211
|
+
assert_in_delta h1, h2, 0.01
|
212
|
+
|
213
|
+
line = pdf.get_num_lines(txt, w)
|
214
|
+
assert_equal param[:line], line
|
215
|
+
}
|
331
216
|
end
|
332
217
|
|
333
218
|
test "removeSHY encoding test" do
|
data/test/rbpdf_dom_test.rb
CHANGED
@@ -6,343 +6,267 @@ require 'test_helper'
|
|
6
6
|
|
7
7
|
class RbpdfTest < Test::Unit::TestCase
|
8
8
|
class MYPDF < RBPDF
|
9
|
-
def getHtmlDomArray(html)
|
10
|
-
super
|
11
|
-
end
|
12
|
-
def openHTMLTagHandler(dom, key, cell)
|
13
|
-
super
|
14
|
-
end
|
15
9
|
def get_temp_rtl
|
16
10
|
@tmprtl
|
17
11
|
end
|
18
12
|
end
|
19
13
|
|
20
|
-
|
21
|
-
|
14
|
+
htmls = {
|
15
|
+
'Simple Text' => {:html => 'abc', :length => 2,
|
16
|
+
:params => [{:parent => 0, :tag => false}, # parent -> Root
|
17
|
+
{:parent => 0, :tag => false, :value => 'abc', :elkey => 0, :block => false}]},
|
18
|
+
'Back Slash Text' => {:html => 'a\\bc', :length => 2,
|
19
|
+
:params => [{:parent => 0, :tag => false}, # parent -> Root
|
20
|
+
{:parent => 0, :tag => false, :value => 'a\\bc', :elkey => 0, :block => false}]},
|
21
|
+
'Simple Tag' => {:html => '<b>abc</b>', :length => 4,
|
22
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
23
|
+
{:parent => 0, :tag => true, :value => 'b', :elkey => 0, :opening => true, :attribute => {}},
|
24
|
+
{:parent => 1, :tag => false, :value => 'abc', :elkey => 1, :block => false}, # parent -> open tag key
|
25
|
+
{:parent => 1, :tag => true, :value => 'b', :elkey => 2, :opening => false}]}, # parent -> open tag key
|
26
|
+
'pre Tag' => {:html => "<pre>abc</pre>", :length => 4, # See. 'Dom pre tag test'
|
27
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
28
|
+
{:parent => 0, :tag => true, :value => 'pre', :elkey => 0, :opening => true, :attribute => {}},
|
29
|
+
{:parent => 1, :tag => false, :value => 'abc', :elkey => 1, :block => false}, # parent -> open tag key
|
30
|
+
{:parent => 1, :tag => true, :value => 'pre', :elkey => 2, :opening => false}]}, # parent -> open tag key
|
31
|
+
'pre code Tag' => {:html => '<pre><code class="ruby">abc</code></pre>', :length => 4, # See. 'Dom pre tag test (code)'
|
32
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
33
|
+
{:parent => 0, :tag => true, :value => 'pre', :elkey => 0, :opening => true, :attribute => {}},
|
34
|
+
{:parent => 1, :tag => false, :value => 'abc', :elkey => 1, :block => false}, # parent -> open tag key
|
35
|
+
{:parent => 1, :tag => true, :value => 'pre', :elkey => 2, :opening => false}]}, # parent -> open tag key
|
36
|
+
'pre code span Tag' => {:html => '<pre><code class="ruby syntaxhl"><span class="CodeRay">abc</span></code></pre>', :length => 6, # See. 'Dom pre tag test (code span)'
|
37
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
38
|
+
{:parent => 0, :tag => true, :value => 'pre', :elkey => 0, :opening => true, :attribute => {}},
|
39
|
+
{:parent => 1, :tag => true, :value => 'span', :elkey => 1, :opening => true},
|
40
|
+
{:parent => 2, :tag => false, :value => 'abc', :elkey => 2, :block => false}, # parent -> open tag key
|
41
|
+
{:parent => 2, :tag => true, :value => 'span', :elkey => 3, :opening => false}, # parent -> open tag key
|
42
|
+
{:parent => 1, :tag => true, :value => 'pre', :elkey => 4, :opening => false}]}, # parent -> open tag key
|
43
|
+
'Error Tag (doble colse tag)' => {:html => '</ul></div>',
|
44
|
+
:validated_length => 1, # for Rails 4.2 later (no use Rails 3.x/4.0/4.1)
|
45
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
46
|
+
{:parent => 0, :tag => true, :value => 'ul', :elkey => 0, :opening => false}, # parent -> Root key
|
47
|
+
{:parent => 0, :tag => true, :value => 'div', :elkey => 1, :opening => false}]}, # parent -> Root key
|
48
|
+
'Attribute' => {:html => '<p style="text-align:justify">abc</p>', :length => 4,
|
49
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
50
|
+
{:parent => 0, :tag => true, :value => 'p', :elkey => 0, :opening => true, :align => 'J', :attribute => {:style => 'text-align:justify;'}}]},
|
51
|
+
'Table border' => {:html => '<table border="1"><tr><td>abc</td></tr></table>', :length => 9,
|
52
|
+
# -> '<table border="1"><tr><td>abc<marker style="font-size:0"/></td></tr></table>' ## added marker tag (by getHtmlDomArray()) ##
|
53
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
54
|
+
{:parent => 0, :tag => true, :value => 'table', :elkey => 0, :opening => true, :attribute => {:border => 1}},
|
55
|
+
{},
|
56
|
+
{},
|
57
|
+
{},
|
58
|
+
# marker tag (by getHtmlDomArray())
|
59
|
+
{:parent => 3, :tag => true, :value => 'marker', :elkey => 4, :opening => true, :attribute => {:style => 'font-size:0'}}]},
|
60
|
+
'Table td Width' => {:html => '<table><tr><td width="10">abc</td></tr></table>', :length => 9,
|
61
|
+
# -> '<table><tr><td width="10">abc<marker style="font-size:0"/></td></tr></table>' ## added marker tag (by getHtmlDomArray()) ##
|
62
|
+
:params => [{},
|
63
|
+
{},
|
64
|
+
{},
|
65
|
+
{:parent => 2, :tag => true, :value => 'td', :elkey => 2, :opening => true, :width => '10'}]},
|
66
|
+
'Dom open angled bracket "<"' => {:html => "<p>AAA '<'-BBB << <<< '</' '<//' '<///' CCC.</p>", :length => 4,
|
67
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
68
|
+
{:parent => 0, :tag => true, :value => 'p', :elkey => 0, :opening => true, :attribute => {}},
|
69
|
+
{:parent => 1, :tag => false, :value => "AAA '<'-BBB << <<< '</' '<//' '<///' CCC.", :elkey => 1},
|
70
|
+
{:parent => 1, :tag => true, :value => 'p', :elkey => 2, :opening => false}]},
|
71
|
+
'Dom self close tag' => {:html => '<b>ab<br>c</b>', :length => 6, # See. 'Dom self close tag test (Simple Tag)'
|
72
|
+
:params => [{:parent => 0, :tag => false, :attribute => {}}, # parent -> Root
|
73
|
+
{:parent => 0, :tag => true, :value => 'b', :elkey => 0, :opening => true, :attribute => {}}, # <b>
|
74
|
+
{:parent => 1, :tag => false, :value => 'ab', :elkey => 1, :block => false}, # ab
|
75
|
+
{:parent => 1, :tag => true, :value => 'br', :elkey => 2, :opening => true, :attribute => {}}, # <br>
|
76
|
+
{:parent => 1, :tag => false, :value => 'c', :elkey => 3, :block => false}, # c
|
77
|
+
{:parent => 1, :tag => true, :value => 'b', :elkey => 4, :opening => false}]}, # </b>
|
78
|
+
}
|
79
|
+
|
80
|
+
data(htmls)
|
81
|
+
test "Dom Basic test" do |data|
|
82
|
+
pdf = RBPDF.new
|
83
|
+
dom = pdf.send(:getHtmlDomArray, data[:html])
|
84
|
+
assert_equal data[:length], dom.length if data[:length]
|
85
|
+
data[:params].each_with_index {|param, i|
|
86
|
+
# validated length check (for Rails 4.2 later)
|
87
|
+
if dom[i].nil? and i >= data[:validated_length]
|
88
|
+
break
|
89
|
+
end
|
90
|
+
|
91
|
+
param.each {|key, val|
|
92
|
+
if (key == :attribute) and !val.empty?
|
93
|
+
val.each {|k, v|
|
94
|
+
if (k == :style) and !v.empty?
|
95
|
+
assert_equal("dom[#{i}][attribute]: #{k} => #{v}", "dom[#{i}][attribute]: #{k} => #{dom[i][key.to_s][k.to_s].gsub(' ', '')}")
|
96
|
+
else
|
97
|
+
assert_equal("dom[#{i}][attribute]: #{k} => #{v}", "dom[#{i}][attribute]: #{k} => #{dom[i][key.to_s][k.to_s]}")
|
98
|
+
end
|
99
|
+
}
|
100
|
+
else
|
101
|
+
assert_equal("dom[#{i}]: #{key} => #{val}", "dom[#{i}]: #{key} => #{dom[i][key.to_s]}")
|
102
|
+
end
|
103
|
+
}
|
104
|
+
}
|
105
|
+
end
|
22
106
|
|
23
|
-
|
24
|
-
|
25
|
-
assert_equal 0, dom[0]['parent'] # Root
|
26
|
-
assert_equal false, dom[0]['tag']
|
27
|
-
assert_equal({'tag'=>false, 'value'=>'abc', 'elkey'=>0, 'parent'=>0, 'block'=>false}, dom[1])
|
107
|
+
test "Dom pre tag test" do
|
108
|
+
pdf = RBPDF.new
|
28
109
|
|
29
|
-
#
|
30
|
-
dom = pdf.getHtmlDomArray
|
31
|
-
|
32
|
-
assert_equal
|
33
|
-
assert_equal({'tag'=>false, 'value'=>"a\\bc", 'elkey'=>0, 'parent'=>0, 'block'=>false}, dom[1])
|
110
|
+
# No Text
|
111
|
+
dom = pdf.send(:getHtmlDomArray, "<pre></pre>")
|
112
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>\n</pre>")
|
113
|
+
assert_equal dom, dom2
|
34
114
|
|
35
115
|
# Simple Tag
|
36
|
-
dom = pdf.getHtmlDomArray
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
assert_equal
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
assert_equal
|
45
|
-
assert_equal true, dom[1]['tag']
|
46
|
-
assert_equal true, dom[1]['opening']
|
47
|
-
assert_equal 'b', dom[1]['value']
|
48
|
-
assert_equal({}, dom[1]['attribute'])
|
49
|
-
|
50
|
-
assert_equal({'tag' => false, 'value'=>'abc', 'elkey'=>1, 'parent'=>1, 'block'=>false}, dom[2]) # parent -> open tag key
|
51
|
-
|
52
|
-
assert_equal 1, dom[3]['parent'] # parent -> open tag key
|
53
|
-
assert_equal 2, dom[3]['elkey']
|
54
|
-
assert_equal true, dom[3]['tag']
|
55
|
-
assert_equal false, dom[3]['opening']
|
56
|
-
assert_equal 'b', dom[3]['value']
|
57
|
-
|
58
|
-
# Error Tag (doble colse tag)
|
59
|
-
dom = pdf.getHtmlDomArray('</ul></div>')
|
60
|
-
|
61
|
-
assert_equal 0, dom[0]['parent'] # Root
|
62
|
-
assert_equal false, dom[0]['tag']
|
63
|
-
assert_equal({}, dom[0]['attribute'])
|
64
|
-
|
65
|
-
if dom.length == 3 # for Rails 3.x/4.0/4.1 (no use Rails 4.2 later)
|
66
|
-
assert_equal 0, dom[1]['parent'] # parent -> Root key
|
67
|
-
assert_equal 0, dom[1]['elkey']
|
68
|
-
assert_equal true, dom[1]['tag']
|
69
|
-
assert_equal false, dom[1]['opening']
|
70
|
-
assert_equal 'ul', dom[1]['value']
|
71
|
-
|
72
|
-
assert_equal 0, dom[2]['parent'] # parent -> Root key
|
73
|
-
assert_equal 1, dom[2]['elkey']
|
74
|
-
assert_equal true, dom[2]['tag']
|
75
|
-
assert_equal false, dom[2]['opening']
|
76
|
-
assert_equal 'div', dom[2]['value']
|
77
|
-
end
|
78
|
-
|
79
|
-
# Attribute
|
80
|
-
dom = pdf.getHtmlDomArray('<p style="text-align:justify">abc</p>')
|
81
|
-
assert_equal 4, dom.length
|
82
|
-
|
83
|
-
assert_equal 0, dom[0]['parent'] # Root
|
84
|
-
assert_equal false, dom[0]['tag']
|
85
|
-
assert_equal({}, dom[0]['attribute'])
|
86
|
-
|
87
|
-
assert_equal 0, dom[1]['parent'] # parent -> parent tag key
|
88
|
-
assert_equal 0, dom[1]['elkey']
|
89
|
-
assert_equal true, dom[1]['tag']
|
90
|
-
assert_equal true, dom[1]['opening']
|
91
|
-
assert_equal 'p', dom[1]['value']
|
92
|
-
assert_not_nil dom[1]['attribute']
|
93
|
-
assert_equal 'text-align:justify;', dom[1]['attribute']['style'].gsub(' ', '')
|
94
|
-
assert_equal 'J', dom[1]['align']
|
95
|
-
|
96
|
-
# Table border
|
97
|
-
dom = pdf.getHtmlDomArray('<table border="1"><tr><td>abc</td></tr></table>')
|
98
|
-
## added marker tag (by getHtmlDomArray()) ##
|
99
|
-
# '<table border="1"><tr><td>abc<marker style="font-size:0"/></td></tr></table>'
|
100
|
-
assert_equal 9, dom.length
|
101
|
-
|
102
|
-
assert_equal 0, dom[1]['parent'] # parent -> parent tag key
|
103
|
-
assert_equal 0, dom[1]['elkey']
|
104
|
-
assert_equal true, dom[1]['tag']
|
105
|
-
assert_equal true, dom[1]['opening']
|
106
|
-
assert_equal 'table', dom[1]['value']
|
107
|
-
assert_equal '1', dom[1]['attribute']['border']
|
116
|
+
dom = pdf.send(:getHtmlDomArray, "<pre>abc</pre>")
|
117
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>\nabc\n</pre>")
|
118
|
+
assert_equal dom, dom2
|
119
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>\nabc</pre>")
|
120
|
+
assert_equal dom, dom2
|
121
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>abc\n</pre>")
|
122
|
+
assert_equal dom, dom2
|
123
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>abc<br /></pre>")
|
124
|
+
assert_equal dom, dom2
|
108
125
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
assert_equal
|
113
|
-
|
114
|
-
assert_equal
|
115
|
-
|
126
|
+
# with line feed
|
127
|
+
dom = pdf.send(:getHtmlDomArray, "<pre>abc\ndef</pre>")
|
128
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>\nabc\ndef\n</pre>")
|
129
|
+
assert_equal dom, dom2
|
130
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>\nabc\ndef</pre>")
|
131
|
+
assert_equal dom, dom2
|
132
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre>abc\ndef\n</pre>")
|
133
|
+
assert_equal dom, dom2
|
116
134
|
|
117
|
-
#
|
118
|
-
dom = pdf.getHtmlDomArray
|
119
|
-
|
120
|
-
|
121
|
-
|
135
|
+
# code Tag
|
136
|
+
dom = pdf.send(:getHtmlDomArray, '<pre><code class="ruby">abc</code></pre>')
|
137
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby\">\nabc\n</code></pre>")
|
138
|
+
assert_equal dom, dom2
|
139
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby\">\nabc</code></pre>")
|
140
|
+
assert_equal dom, dom2
|
141
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby\">abc\n</code></pre>")
|
142
|
+
assert_equal dom, dom2
|
122
143
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
assert_equal
|
127
|
-
|
128
|
-
assert_equal
|
144
|
+
# code span Tag
|
145
|
+
dom = pdf.send(:getHtmlDomArray, '<pre><code class="ruby syntaxhl"><span class="CodeRay">abc</span></code></pre>')
|
146
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby syntaxhl\"><span class=\"CodeRay\">\nabc\n</span></code></pre>")
|
147
|
+
assert_equal dom, dom2
|
148
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby syntaxhl\"><span class=\"CodeRay\">\nabc</span></code></pre>")
|
149
|
+
assert_equal dom, dom2
|
150
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby syntaxhl\"><span class=\"CodeRay\">abc\n</span></code></pre>")
|
151
|
+
assert_equal dom, dom2
|
152
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby syntaxhl\"><span class=\"CodeRay\">abc</span>\n</code></pre>")
|
153
|
+
assert_equal dom, dom2
|
154
|
+
dom2 = pdf.send(:getHtmlDomArray, "<pre><code class=\"ruby syntaxhl\">\n<span class=\"CodeRay\">\nabc\n</span>\n</code></pre>")
|
155
|
+
assert_equal dom, dom2
|
129
156
|
end
|
130
157
|
|
131
158
|
test "Dom self close tag test" do
|
132
|
-
pdf =
|
159
|
+
pdf = RBPDF.new
|
133
160
|
|
134
161
|
# Simple Tag
|
135
|
-
dom = pdf.getHtmlDomArray
|
136
|
-
|
137
|
-
|
138
|
-
assert_equal 0, dom[0]['parent'] # Root
|
139
|
-
assert_equal false, dom[0]['tag']
|
140
|
-
assert_equal({}, dom[0]['attribute'])
|
141
|
-
|
142
|
-
# <b>
|
143
|
-
assert_equal 0, dom[1]['parent'] # parent -> parent tag key
|
144
|
-
assert_equal 0, dom[1]['elkey']
|
145
|
-
assert_equal true, dom[1]['tag']
|
146
|
-
assert_equal true, dom[1]['opening']
|
147
|
-
assert_equal 'b', dom[1]['value']
|
148
|
-
assert_equal({}, dom[1]['attribute'])
|
149
|
-
|
150
|
-
# ab
|
151
|
-
assert_equal({'tag' => false, 'value'=>'ab', 'elkey'=>1, 'parent'=>1, 'block'=>false}, dom[2]) # parent -> open tag key
|
152
|
-
|
153
|
-
# <br>
|
154
|
-
assert_equal 1, dom[3]['parent'] # parent -> open tag key
|
155
|
-
assert_equal 2, dom[3]['elkey']
|
156
|
-
assert_equal true, dom[3]['tag']
|
157
|
-
assert_equal true, dom[3]['opening']
|
158
|
-
assert_equal 'br', dom[3]['value']
|
159
|
-
assert_equal({}, dom[3]['attribute'])
|
160
|
-
|
161
|
-
# c
|
162
|
-
assert_equal({'tag' => false, 'value'=>'c', 'elkey'=>3, 'parent'=>1, 'block'=>false}, dom[4]) # parent -> open tag key
|
163
|
-
|
164
|
-
# </b>
|
165
|
-
assert_equal 1, dom[5]['parent'] # parent -> open tag key
|
166
|
-
assert_equal 4, dom[5]['elkey']
|
167
|
-
assert_equal true, dom[5]['tag']
|
168
|
-
assert_equal false, dom[5]['opening']
|
169
|
-
assert_equal 'b', dom[5]['value']
|
170
|
-
|
171
|
-
dom2 = pdf.getHtmlDomArray('<b>ab<br/>c</b>')
|
162
|
+
dom = pdf.send(:getHtmlDomArray, '<b>ab<br>c</b>')
|
163
|
+
dom2 = pdf.send(:getHtmlDomArray, '<b>ab<br/>c</b>')
|
172
164
|
assert_equal dom, dom2
|
173
165
|
|
174
166
|
htmlcontent = '<b><img src="/public/ng.png" alt="test alt attribute" width="30" height="30" border="0"/></b>'
|
175
|
-
dom1 = pdf.getHtmlDomArray
|
167
|
+
dom1 = pdf.send(:getHtmlDomArray, htmlcontent)
|
176
168
|
htmlcontent = '<b><img src="/public/ng.png" alt="test alt attribute" width="30" height="30" border="0"></b>'
|
177
|
-
dom2 = pdf.getHtmlDomArray
|
169
|
+
dom2 = pdf.send(:getHtmlDomArray, htmlcontent)
|
178
170
|
assert_equal dom1, dom2
|
179
171
|
|
180
|
-
dom1 = pdf.getHtmlDomArray
|
181
|
-
dom2 = pdf.getHtmlDomArray
|
172
|
+
dom1 = pdf.send(:getHtmlDomArray, '<b>ab<hr/>c</b>')
|
173
|
+
dom2 = pdf.send(:getHtmlDomArray, '<b>ab<hr>c</b>')
|
182
174
|
assert_equal dom1, dom2
|
183
175
|
end
|
184
176
|
|
185
177
|
test "Dom HTMLTagHandler Basic test" do
|
186
|
-
pdf =
|
178
|
+
pdf = RBPDF.new
|
187
179
|
pdf.add_page
|
188
180
|
|
189
181
|
# Simple HTML
|
190
182
|
htmlcontent = '<h1>HTML Example</h1>'
|
191
|
-
dom1 = pdf.getHtmlDomArray
|
192
|
-
dom2 = pdf.openHTMLTagHandler
|
183
|
+
dom1 = pdf.send(:getHtmlDomArray, htmlcontent)
|
184
|
+
dom2 = pdf.send(:openHTMLTagHandler, dom1, 1, false)
|
193
185
|
assert_equal dom1, dom2
|
194
186
|
end
|
195
187
|
|
196
|
-
|
188
|
+
htmls = {
|
189
|
+
'LTR' => {:lines => [{:html => '<p dir="ltr">HTML Example</p>', :length => 4,
|
190
|
+
:params => [{}, {:tag => true, :value => 'p', :opening => true, :attribute => {:dir => 'ltr'}, :temprtl => false}]},
|
191
|
+
{:html => '<p dir="rtl">HTML Example</p>', :length => 4,
|
192
|
+
:params => [{}, {:tag => true, :value => 'p', :opening => true, :attribute => {:dir => 'rtl'}, :temprtl => 'R'}]},
|
193
|
+
{:html => '<p dir="ltr">HTML Example</p>', :length => 4,
|
194
|
+
:params => [{}, {:tag => true, :value => 'p', :opening => true, :attribute => {:dir => 'ltr'}, :temprtl => false}]}
|
195
|
+
]},
|
196
|
+
'RTL' => {:rtl => true,
|
197
|
+
:lines => [{:html => '<p dir="ltr">HTML Example</p>', :length => 4,
|
198
|
+
:params => [{}, {:tag => true, :value => 'p', :opening => true, :attribute => {:dir => 'ltr'}, :temprtl => 'L'}]},
|
199
|
+
{:html => '<p dir="rtl">HTML Example</p>', :length => 4,
|
200
|
+
:params => [{}, {:tag => true, :value => 'p', :opening => true, :attribute => {:dir => 'rtl'}, :temprtl => false}]}
|
201
|
+
]},
|
202
|
+
}
|
203
|
+
|
204
|
+
data(htmls)
|
205
|
+
test "Dom HTMLTagHandler DIR test" do |data|
|
197
206
|
pdf = MYPDF.new
|
198
207
|
pdf.add_page
|
199
208
|
temprtl = pdf.get_temp_rtl
|
200
209
|
assert_equal false, temprtl
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
assert_equal 'p', dom[1]['value']
|
224
|
-
assert_equal 'rtl', dom[1]['attribute']['dir']
|
225
|
-
|
226
|
-
temprtl = pdf.get_temp_rtl
|
227
|
-
assert_equal 'R', temprtl
|
228
|
-
|
229
|
-
# LTR, ltr
|
230
|
-
htmlcontent = '<p dir="ltr">HTML Example</p>'
|
231
|
-
dom = pdf.getHtmlDomArray(htmlcontent)
|
232
|
-
dom = pdf.openHTMLTagHandler(dom, 1, false)
|
233
|
-
|
234
|
-
assert_equal true, dom[1]['tag']
|
235
|
-
assert_equal true, dom[1]['opening']
|
236
|
-
assert_equal 'p', dom[1]['value']
|
237
|
-
assert_equal 'ltr', dom[1]['attribute']['dir']
|
238
|
-
|
239
|
-
temprtl = pdf.get_temp_rtl
|
240
|
-
assert_equal false, temprtl
|
241
|
-
end
|
242
|
-
|
243
|
-
test "Dom HTMLTagHandler DIR LTR test" do
|
244
|
-
pdf = MYPDF.new
|
245
|
-
pdf.add_page
|
246
|
-
temprtl = pdf.get_temp_rtl
|
247
|
-
assert_equal false, temprtl
|
248
|
-
pdf.set_rtl(true)
|
249
|
-
|
250
|
-
# RTL, ltr
|
251
|
-
htmlcontent = '<p dir="ltr">HTML Example</p>'
|
252
|
-
dom = pdf.getHtmlDomArray(htmlcontent)
|
253
|
-
dom = pdf.openHTMLTagHandler(dom, 1, false)
|
254
|
-
assert_equal 4, dom.length
|
255
|
-
|
256
|
-
assert_equal true, dom[1]['tag']
|
257
|
-
assert_equal true, dom[1]['opening']
|
258
|
-
assert_equal 'p', dom[1]['value']
|
259
|
-
assert_equal 'ltr', dom[1]['attribute']['dir']
|
260
|
-
|
261
|
-
temprtl = pdf.get_temp_rtl
|
262
|
-
assert_equal 'L', temprtl
|
263
|
-
|
264
|
-
# RTL, rtl
|
265
|
-
htmlcontent = '<p dir="rtl">HTML Example</p>'
|
266
|
-
dom = pdf.getHtmlDomArray(htmlcontent)
|
267
|
-
dom = pdf.openHTMLTagHandler(dom, 1, false)
|
268
|
-
assert_equal 4, dom.length
|
269
|
-
|
270
|
-
assert_equal true, dom[1]['tag']
|
271
|
-
assert_equal true, dom[1]['opening']
|
272
|
-
assert_equal 'p', dom[1]['value']
|
273
|
-
assert_equal 'rtl', dom[1]['attribute']['dir']
|
274
|
-
|
275
|
-
temprtl = pdf.get_temp_rtl
|
276
|
-
assert_equal false, temprtl
|
210
|
+
pdf.set_rtl(true) if data[:rtl]
|
211
|
+
|
212
|
+
data[:lines].each_with_index {|line, l|
|
213
|
+
dom = pdf.send(:getHtmlDomArray, line[:html])
|
214
|
+
dom = pdf.send(:openHTMLTagHandler, dom, 1, false)
|
215
|
+
|
216
|
+
assert_equal line[:length], dom.length if line[:length]
|
217
|
+
line[:params].each_with_index {|param, i|
|
218
|
+
param.each {|key, val|
|
219
|
+
if (key == :attribute) and !val.empty?
|
220
|
+
val.each {|k, v|
|
221
|
+
assert_equal("#{l}: dom[#{i}][attribute]: #{k} => #{v}", "#{l}: dom[#{i}][attribute]: #{k} => #{dom[i][key.to_s][k.to_s]}")
|
222
|
+
}
|
223
|
+
elsif (key == :temprtl)
|
224
|
+
temprtl = pdf.get_temp_rtl
|
225
|
+
assert_equal("#{l}: dom[#{i}]: temprtl => #{val}", "#{l}: dom[#{i}]: temprtl => #{temprtl.to_s}")
|
226
|
+
else
|
227
|
+
assert_equal("#{l}: dom[#{i}]: #{key} => #{val}", "#{l}: dom[#{i}]: #{key} => #{dom[i][key.to_s]}")
|
228
|
+
end
|
229
|
+
}
|
230
|
+
}
|
231
|
+
}
|
277
232
|
end
|
278
233
|
|
279
234
|
test "Dom HTMLTagHandler img y position with height attribute test" do
|
280
|
-
pdf =
|
235
|
+
pdf = RBPDF.new
|
281
236
|
pdf.add_page
|
282
237
|
|
283
238
|
# Image Error HTML
|
284
239
|
htmlcontent = '<img src="/public/ng.png" alt="test alt attribute" width="30" height="30" border="0"/>'
|
285
|
-
dom1 = pdf.getHtmlDomArray
|
240
|
+
dom1 = pdf.send(:getHtmlDomArray, htmlcontent)
|
286
241
|
#y1 = pdf.get_y
|
287
242
|
|
288
|
-
dom2 = pdf.openHTMLTagHandler
|
243
|
+
dom2 = pdf.send(:openHTMLTagHandler, dom1, 1, false)
|
289
244
|
y2 = pdf.get_y
|
290
245
|
assert_equal dom1, dom2
|
291
246
|
assert_equal pdf.get_image_rby - (12 / pdf.get_scale_factor) , y2
|
292
247
|
end
|
293
248
|
|
294
249
|
test "Dom HTMLTagHandler img y position without height attribute test" do
|
295
|
-
pdf =
|
250
|
+
pdf = RBPDF.new
|
296
251
|
pdf.add_page
|
297
252
|
|
298
253
|
# Image Error HTML
|
299
254
|
htmlcontent = '<img src="/public/ng.png" alt="test alt attribute" border="0"/>'
|
300
|
-
dom1 = pdf.getHtmlDomArray
|
255
|
+
dom1 = pdf.send(:getHtmlDomArray, htmlcontent)
|
301
256
|
y1 = pdf.get_y
|
302
257
|
|
303
|
-
dom2 = pdf.openHTMLTagHandler
|
258
|
+
dom2 = pdf.send(:openHTMLTagHandler, dom1, 1, false)
|
304
259
|
y2 = pdf.get_y
|
305
260
|
assert_equal dom1, dom2
|
306
261
|
assert_equal y1, y2
|
307
262
|
end
|
308
263
|
|
309
|
-
test "Dom open angled bracket '<' test" do
|
310
|
-
pdf = MYPDF.new
|
311
|
-
pdf.add_page
|
312
|
-
|
313
|
-
htmlcontent = "<p>AAA '<'-BBB << <<< '</' '<//' '<///' CCC.</p>"
|
314
|
-
dom = pdf.getHtmlDomArray(htmlcontent)
|
315
|
-
assert_equal 4, dom.length
|
316
|
-
|
317
|
-
assert_equal 0, dom[0]['parent'] # Root
|
318
|
-
assert_equal false, dom[0]['tag']
|
319
|
-
assert_equal({}, dom[0]['attribute'])
|
320
|
-
|
321
|
-
assert_equal 0, dom[1]['parent'] # parent -> parent tag key
|
322
|
-
assert_equal 0, dom[1]['elkey']
|
323
|
-
assert_equal true, dom[1]['tag']
|
324
|
-
assert_equal true, dom[1]['opening']
|
325
|
-
assert_equal 'p', dom[1]['value']
|
326
|
-
assert_equal({}, dom[1]['attribute'])
|
327
|
-
|
328
|
-
assert_equal 1, dom[2]['parent'] # parent -> open tag key
|
329
|
-
assert_equal 1, dom[2]['elkey']
|
330
|
-
assert_equal false, dom[2]['tag']
|
331
|
-
assert_equal "AAA '<'-BBB << <<< '</' '<//' '<///' CCC.", dom[2]['value']
|
332
|
-
|
333
|
-
assert_equal 1, dom[3]['parent'] # parent -> open tag key
|
334
|
-
assert_equal 2, dom[3]['elkey']
|
335
|
-
assert_equal true, dom[3]['tag']
|
336
|
-
assert_equal false, dom[3]['opening']
|
337
|
-
assert_equal 'p', dom[3]['value']
|
338
|
-
end
|
339
|
-
|
340
264
|
test "getHtmlDomArray encoding test" do
|
341
265
|
return unless 'test'.respond_to?(:force_encoding)
|
342
266
|
|
343
|
-
pdf =
|
267
|
+
pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
|
344
268
|
htmlcontent = 'test'.force_encoding('ASCII-8BIT')
|
345
|
-
pdf.getHtmlDomArray
|
269
|
+
pdf.send(:getHtmlDomArray, htmlcontent)
|
346
270
|
assert_equal 'ASCII-8BIT', htmlcontent.encoding.to_s
|
347
271
|
end
|
348
272
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Copyright (c) 2011-2018 NAITOH Jun
|
2
|
+
# Released under the MIT license
|
3
|
+
# http://www.opensource.org/licenses/MIT
|
4
|
+
|
5
|
+
require 'test_helper'
|
6
|
+
|
7
|
+
def logger
|
8
|
+
require 'logger'
|
9
|
+
return Logger.new(STDOUT)
|
10
|
+
end
|
11
|
+
|
12
|
+
if !defined? ApplicationController
|
13
|
+
class ApplicationController
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class RbpdfTest < Test::Unit::TestCase
|
18
|
+
htmls = {
|
19
|
+
'001 : Default Header and Footer' => '001',
|
20
|
+
'002 : Removing Header and Footer' => '002',
|
21
|
+
'003 : Custom Header and Footer' => '003',
|
22
|
+
'004 : Cell stretching' => '004',
|
23
|
+
'005 : Multicell' => '005',
|
24
|
+
'006 : write_html and RTL support' => '006',
|
25
|
+
'007 : Two independent columns with write_htmlcell()' => '007',
|
26
|
+
'008 : Include external UTF-8 text file' => '008',
|
27
|
+
'009 : Test Image' => '009',
|
28
|
+
'011 : Colored Table' => '011',
|
29
|
+
'012 : Graphic Functions' => '012',
|
30
|
+
'015 : Bookmarks (Table of Content)' => '015',
|
31
|
+
'017 : Two independent columns with MultiCell' => '017',
|
32
|
+
'018 : RTL document with Persian language' => '018',
|
33
|
+
'020 : Two columns composed by MultiCell of different' => '020',
|
34
|
+
'021 : write_html text flow' => '021',
|
35
|
+
'022 : CMYK colors' => '022',
|
36
|
+
'023 : Page Groups' => '023',
|
37
|
+
'024 : Object Visibility' => '024',
|
38
|
+
'025 : Object Transparency' => '025',
|
39
|
+
'026 : Text Rendering Modes and Text Clipping' => '026',
|
40
|
+
'028 : Changing page formats' => '028',
|
41
|
+
'029 : Set PDF viewer display preferences.' => '029',
|
42
|
+
'031 : Pie Chart' => '031',
|
43
|
+
'033 : Mixed font types' => '033',
|
44
|
+
'034 : Clipping' => '034',
|
45
|
+
'035 : Line styles with cells and multicells' => '035',
|
46
|
+
'036 : Annotations' => '036',
|
47
|
+
'038 : CID-0 CJK unembedded font' => '038',
|
48
|
+
'039 : HTML justification' => '039',
|
49
|
+
'040 : Booklet mode (double-sided pages)' => '040',
|
50
|
+
'041 : Annotation - FileAttachment' => '041',
|
51
|
+
'042 : Test Image with alpha channel' => '042',
|
52
|
+
'043 : Disk caching' => '043',
|
53
|
+
'044 : Move, copy and delete pages' => '044',
|
54
|
+
'045 : Bookmarks and Table of Content' => '045',
|
55
|
+
'047 : Transactions' => '047',
|
56
|
+
'048 : HTML tables and table headers' => '048',
|
57
|
+
# '051 : Full page background' => '051',
|
58
|
+
'055 : Display all characters available on core fonts.' => '055',
|
59
|
+
'057 : Cell vertical alignments' => '057',
|
60
|
+
'059 : Table Of Content using HTML templates.' => '059',
|
61
|
+
'060 : Advanced page settings.' => '060',
|
62
|
+
'061 : XHTML + CSS' => '061',
|
63
|
+
}
|
64
|
+
|
65
|
+
data(htmls)
|
66
|
+
test "Examples test" do |data|
|
67
|
+
$LOAD_PATH << File.join(File.dirname(File.expand_path(__FILE__)), '../example/rails/app/controllers/')
|
68
|
+
|
69
|
+
require "example#{data}_controller"
|
70
|
+
|
71
|
+
content = []
|
72
|
+
test = Object.const_get("Example#{data}Controller").new
|
73
|
+
|
74
|
+
contents = test.index
|
75
|
+
# contents = assert_nothing_raised do
|
76
|
+
# test.index
|
77
|
+
# end
|
78
|
+
contents.each_line {|line| content.push line.chomp }
|
79
|
+
|
80
|
+
assert_not_equal 0, content.length
|
81
|
+
assert_equal '%PDF-1.7', content[0]
|
82
|
+
end
|
83
|
+
end
|
@@ -79,7 +79,7 @@ class RbpdfTest < Test::Unit::TestCase
|
|
79
79
|
pdf.write_html(htmlcontent, true, 0, true, 0)
|
80
80
|
|
81
81
|
pdf.send(:mapLinksToHtmlAnchors)
|
82
|
-
link_position = pdf.instance_variable_get(:@links)[
|
82
|
+
link_position = pdf.instance_variable_get(:@links)[1]
|
83
83
|
assert_equal [3, 73.50124999999998], link_position
|
84
84
|
end
|
85
85
|
|
@@ -98,7 +98,7 @@ class RbpdfTest < Test::Unit::TestCase
|
|
98
98
|
|
99
99
|
pdf.send(:mapLinksToHtmlAnchors)
|
100
100
|
|
101
|
-
link_position = pdf.instance_variable_get(:@links)[
|
101
|
+
link_position = pdf.instance_variable_get(:@links)[1]
|
102
102
|
assert_equal [1, 10.001249999999999], link_position
|
103
103
|
end
|
104
104
|
|
data/test/rbpdf_htmlcell_test.rb
CHANGED
@@ -1,68 +1,60 @@
|
|
1
|
-
# Copyright (c) 2011-
|
1
|
+
# Copyright (c) 2011-2018 NAITOH Jun
|
2
2
|
# Released under the MIT license
|
3
3
|
# http://www.opensource.org/licenses/MIT
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
7
7
|
class RbpdfTest < Test::Unit::TestCase
|
8
|
-
|
8
|
+
htmls = {
|
9
|
+
'Basic' => {:html => '<p>foo</p>', :line => 1,
|
10
|
+
:border => 0, :pno => 1, :no => 1},
|
11
|
+
'Page Break no border' => {:html => '<p>foo</p>', :margin => 30,
|
12
|
+
:border => 0, :pno => 2, :no => 2},
|
13
|
+
'Page Break border' => {:html => '<p>foo</p>', :margin => 30,
|
14
|
+
:border => 'LRBT', :pno => 2, :no => 2},
|
15
|
+
'pre tag y position' => {:html => "<p>test 0</p>\n <pre>test 1\ntest 2\ntest 3</pre>\n <p>test 10</p>", :line => 7,
|
16
|
+
:border => 0, :pno => 1, :no => 1},
|
17
|
+
}
|
18
|
+
|
19
|
+
data(htmls)
|
20
|
+
test "write_html_cell test" do |data|
|
9
21
|
pdf = RBPDF.new
|
10
22
|
pdf.add_page()
|
23
|
+
t_margin = pdf.instance_variable_get('@t_margin')
|
24
|
+
y0 = pdf.get_y
|
25
|
+
assert_equal t_margin, y0
|
11
26
|
|
12
|
-
|
13
|
-
|
27
|
+
if data[:margin]
|
28
|
+
pdf.set_top_margin(data[:margin])
|
29
|
+
y0 = pdf.get_y
|
30
|
+
assert_equal data[:margin], y0
|
14
31
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
assert_in_delta 17.3, y, 0.1
|
20
|
-
|
21
|
-
no = pdf.get_num_pages
|
22
|
-
assert_equal 1, no
|
23
|
-
end
|
24
|
-
|
25
|
-
test "write_html_cell Page Break test 1" do
|
26
|
-
pdf = RBPDF.new
|
27
|
-
pdf.add_page()
|
28
|
-
|
29
|
-
pdf.set_top_margin(30)
|
30
|
-
|
31
|
-
h = pdf.get_page_height
|
32
|
-
pdf.set_y(h - 15)
|
33
|
-
|
34
|
-
htmlcontent = '<p>foo</p>'
|
35
|
-
pdf.write_html_cell(0, 5, 10, '', htmlcontent, 0, 1)
|
36
|
-
|
37
|
-
pno = pdf.get_page
|
38
|
-
assert_equal 2, pno
|
39
|
-
|
40
|
-
y = pdf.get_y
|
41
|
-
assert_in_delta 40.0, y, 0.1
|
42
|
-
|
43
|
-
no = pdf.get_num_pages
|
44
|
-
assert_equal 2, no
|
45
|
-
end
|
46
|
-
|
47
|
-
test "write_html_cell Page Break test 2" do
|
48
|
-
pdf = RBPDF.new
|
49
|
-
pdf.add_page()
|
32
|
+
h = pdf.get_page_height
|
33
|
+
pdf.set_y(h - 15)
|
34
|
+
y0 = pdf.get_y
|
35
|
+
end
|
50
36
|
|
51
|
-
pdf.
|
37
|
+
font_size = pdf.get_font_size
|
38
|
+
cell_height_ratio = pdf.get_cell_height_ratio
|
39
|
+
min_cell_height = font_size * cell_height_ratio
|
40
|
+
h = 5
|
52
41
|
|
53
|
-
|
54
|
-
pdf.set_y(h - 15)
|
42
|
+
min_cell_height = h > min_cell_height ? h : min_cell_height
|
55
43
|
|
56
|
-
|
57
|
-
pdf.write_html_cell(0, 5, 10, '', htmlcontent, "LRBT", 1)
|
44
|
+
pdf.write_html_cell(0, h, 10, '', data[:html], data[:border], 1, 0, true, '', false)
|
58
45
|
|
59
46
|
pno = pdf.get_page
|
60
|
-
assert_equal
|
47
|
+
assert_equal data[:pno], pno
|
61
48
|
|
62
|
-
|
63
|
-
|
49
|
+
y1 = pdf.get_y
|
50
|
+
if pno == 1
|
51
|
+
assert_in_delta(y0 + min_cell_height * data[:line], y1, 0.1)
|
52
|
+
else # pno 2, 1 line case only
|
53
|
+
page_break_trigger = pdf.instance_variable_get('@page_break_trigger')
|
54
|
+
assert_in_delta(data[:margin] + y0 + h - page_break_trigger, y1, 0.1)
|
55
|
+
end
|
64
56
|
|
65
57
|
no = pdf.get_num_pages
|
66
|
-
assert_equal
|
58
|
+
assert_equal data[:no], no
|
67
59
|
end
|
68
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbpdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.19.
|
4
|
+
version: 1.19.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NAITOH Jun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: htmlentities
|
@@ -122,6 +122,7 @@ files:
|
|
122
122
|
- test/rbpdf_content_test.rb
|
123
123
|
- test/rbpdf_css_test.rb
|
124
124
|
- test/rbpdf_dom_test.rb
|
125
|
+
- test/rbpdf_examples_test.rb
|
125
126
|
- test/rbpdf_font_func_test.rb
|
126
127
|
- test/rbpdf_font_style_test.rb
|
127
128
|
- test/rbpdf_font_test.rb
|
@@ -194,6 +195,7 @@ test_files:
|
|
194
195
|
- test/rbpdf_content_test.rb
|
195
196
|
- test/rbpdf_css_test.rb
|
196
197
|
- test/rbpdf_dom_test.rb
|
198
|
+
- test/rbpdf_examples_test.rb
|
197
199
|
- test/rbpdf_font_func_test.rb
|
198
200
|
- test/rbpdf_font_style_test.rb
|
199
201
|
- test/rbpdf_font_test.rb
|