rbpdf 1.18.4 → 1.18.5
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.
- checksums.yaml +7 -7
- data/CHANGELOG +9 -0
- data/lib/rbpdf.rb +128 -91
- data/lib/rbpdf/version.rb +1 -1
- data/test/rbpdf_css_test.rb +276 -1
- data/test/rbpdf_dom_test.rb +31 -15
- data/test/rbpdf_html_func_test.rb +26 -0
- data/test/rbpdf_html_test.rb +428 -13
- metadata +173 -179
data/lib/rbpdf/version.rb
CHANGED
data/test/rbpdf_css_test.rb
CHANGED
@@ -227,7 +227,7 @@ class RbpdfCssTest < ActiveSupport::TestCase
|
|
227
227
|
assert_equal dom[4]['attribute'], {'border'=>'2px #ff0000 solid', 'style'=>';border:2px #ff0000 solid;'}
|
228
228
|
assert_equal dom[4]['style']['border'], '2px #ff0000 solid'
|
229
229
|
assert_equal dom[4]['attribute']['border'], '2px #ff0000 solid'
|
230
|
-
assert_equal dom[4]['thead'], '<style>table {;border:2px #ff0000 solid;}</style><table><tr><th>abc<marker style="font-size:0"/></th></tr></
|
230
|
+
assert_equal dom[4]['thead'], '<style>table {;border:2px #ff0000 solid;}</style><table tablehead="1"><tr><th>abc<marker style="font-size:0"/></th></tr></table>'
|
231
231
|
end
|
232
232
|
|
233
233
|
test "CSS Dom line-height test normal" do
|
@@ -323,7 +323,67 @@ class RbpdfCssTest < ActiveSupport::TestCase
|
|
323
323
|
assert_equal dom[3]['value'], 'span'
|
324
324
|
assert_equal dom[3]['style']['color'], '#006600'
|
325
325
|
assert_equal dom[3]['style']['font-style'], 'italic'
|
326
|
+
end
|
327
|
+
|
328
|
+
test "CSS Dom height width test" do
|
329
|
+
pdf = MYPDF.new
|
330
|
+
|
331
|
+
html = '<style> p.first { height: 60%; }
|
332
|
+
p.second { width: 70%; }</style>
|
333
|
+
<p class="first">ABC</p><p class="second">DEF</p>'
|
334
|
+
dom = pdf.getHtmlDomArray(html)
|
335
|
+
assert_equal dom.length, 7
|
336
|
+
|
337
|
+
# <p class="first">
|
338
|
+
assert_equal dom[1]['elkey'], 0
|
339
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
340
|
+
assert_equal dom[1]['tag'], true
|
341
|
+
assert_equal dom[1]['opening'], true
|
342
|
+
assert_equal dom[1]['value'], 'p'
|
343
|
+
assert_not_nil dom[1]['style']
|
344
|
+
assert_equal dom[1]['style']['height'], '60%'
|
345
|
+
assert_equal dom[1]['height'], '60%'
|
346
|
+
|
347
|
+
# ABC
|
348
|
+
assert_equal dom[2]['elkey'], 1
|
349
|
+
assert_equal dom[2]['parent'], 1
|
350
|
+
assert_equal dom[2]['tag'], false
|
351
|
+
assert_equal dom[2]['value'], 'ABC'
|
352
|
+
|
353
|
+
# <p class="second">
|
354
|
+
assert_equal dom[4]['elkey'], 3
|
355
|
+
assert_equal dom[4]['parent'], 0 # parent -> parent tag key
|
356
|
+
assert_equal dom[4]['tag'], true
|
357
|
+
assert_equal dom[4]['opening'], true
|
358
|
+
assert_equal dom[4]['value'], 'p'
|
359
|
+
assert_not_nil dom[4]['style']
|
360
|
+
assert_equal dom[4]['style']['width'], '70%'
|
361
|
+
assert_equal dom[4]['width'], '70%'
|
362
|
+
end
|
363
|
+
|
364
|
+
test "CSS Dom font-weight test" do
|
365
|
+
pdf = MYPDF.new
|
366
|
+
|
367
|
+
html = '<style> p.first { font-weight: bold; }</style>
|
368
|
+
<p class="first">ABC</p><p class="second">DEF</p>'
|
369
|
+
dom = pdf.getHtmlDomArray(html)
|
370
|
+
assert_equal dom.length, 7
|
371
|
+
|
372
|
+
# <p class="first">
|
373
|
+
assert_equal dom[1]['elkey'], 0
|
374
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
375
|
+
assert_equal dom[1]['tag'], true
|
376
|
+
assert_equal dom[1]['opening'], true
|
377
|
+
assert_equal dom[1]['value'], 'p'
|
378
|
+
assert_not_nil dom[1]['style']
|
379
|
+
assert_equal dom[1]['style']['font-weight'], 'bold'
|
380
|
+
assert_equal dom[1]['fontstyle'], 'B'
|
326
381
|
|
382
|
+
# ABC
|
383
|
+
assert_equal dom[2]['elkey'], 1
|
384
|
+
assert_equal dom[2]['parent'], 1
|
385
|
+
assert_equal dom[2]['tag'], false
|
386
|
+
assert_equal dom[2]['value'], 'ABC'
|
327
387
|
end
|
328
388
|
|
329
389
|
test "CSS Dom id test" do
|
@@ -358,4 +418,219 @@ class RbpdfCssTest < ActiveSupport::TestCase
|
|
358
418
|
assert_equal dom[3]['value'], 'span'
|
359
419
|
assert_equal dom[3]['style']['background-color'], '#FFFFAA'
|
360
420
|
end
|
421
|
+
|
422
|
+
test "CSS Dom text-decoration test" do
|
423
|
+
pdf = MYPDF.new
|
424
|
+
|
425
|
+
html = '<style> p.first { text-decoration: none;}
|
426
|
+
p.second {text-decoration: underline;}
|
427
|
+
p.third {text-decoration: overline;}
|
428
|
+
p.fourth {text-decoration: line-through;}
|
429
|
+
p.fifth {text-decoration: underline overline line-through;}</style>
|
430
|
+
<p class="first">ABC</p><p class="second">DEF</p><p class="third">GHI</p><p class="fourth">JKL</p><p class="fifth">MNO</p>'
|
431
|
+
dom = pdf.getHtmlDomArray(html)
|
432
|
+
assert_equal dom.length, 16
|
433
|
+
|
434
|
+
# <p class="first">
|
435
|
+
assert_equal dom[1]['elkey'], 0
|
436
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
437
|
+
assert_equal dom[1]['tag'], true
|
438
|
+
assert_equal dom[1]['opening'], true
|
439
|
+
assert_equal dom[1]['value'], 'p'
|
440
|
+
assert_not_nil dom[1]['style']
|
441
|
+
assert_equal dom[1]['style']['text-decoration'], 'none'
|
442
|
+
assert_equal dom[1]['fontstyle'], ''
|
443
|
+
|
444
|
+
# ABC
|
445
|
+
assert_equal dom[2]['elkey'], 1
|
446
|
+
assert_equal dom[2]['parent'], 1
|
447
|
+
assert_equal dom[2]['tag'], false
|
448
|
+
assert_equal dom[2]['value'], 'ABC'
|
449
|
+
|
450
|
+
# <p class="second">
|
451
|
+
assert_equal dom[4]['elkey'], 3
|
452
|
+
assert_equal dom[4]['parent'], 0 # parent -> parent tag key
|
453
|
+
assert_equal dom[4]['tag'], true
|
454
|
+
assert_equal dom[4]['opening'], true
|
455
|
+
assert_equal dom[4]['value'], 'p'
|
456
|
+
assert_not_nil dom[1]['style']
|
457
|
+
assert_equal dom[4]['style']['text-decoration'], 'underline'
|
458
|
+
assert_equal dom[4]['fontstyle'], 'U'
|
459
|
+
|
460
|
+
# <p class="third">
|
461
|
+
assert_equal dom[7]['elkey'], 6
|
462
|
+
assert_equal dom[7]['parent'], 0 # parent -> parent tag key
|
463
|
+
assert_equal dom[7]['tag'], true
|
464
|
+
assert_equal dom[7]['opening'], true
|
465
|
+
assert_equal dom[7]['value'], 'p'
|
466
|
+
assert_not_nil dom[7]['style']
|
467
|
+
assert_equal dom[7]['style']['text-decoration'], 'overline'
|
468
|
+
assert_equal dom[7]['fontstyle'], 'O'
|
469
|
+
|
470
|
+
# <p class="fourth">
|
471
|
+
assert_equal dom[10]['elkey'], 9
|
472
|
+
assert_equal dom[10]['parent'], 0 # parent -> parent tag key
|
473
|
+
assert_equal dom[10]['tag'], true
|
474
|
+
assert_equal dom[10]['opening'], true
|
475
|
+
assert_equal dom[10]['value'], 'p'
|
476
|
+
assert_not_nil dom[10]['style']
|
477
|
+
assert_equal dom[10]['style']['text-decoration'], 'line-through'
|
478
|
+
assert_equal dom[10]['fontstyle'], 'D'
|
479
|
+
|
480
|
+
# <p class="fifth">
|
481
|
+
assert_equal dom[13]['elkey'], 12
|
482
|
+
assert_equal dom[13]['parent'], 0 # parent -> parent tag key
|
483
|
+
assert_equal dom[13]['tag'], true
|
484
|
+
assert_equal dom[13]['opening'], true
|
485
|
+
assert_equal dom[13]['value'], 'p'
|
486
|
+
assert_not_nil dom[13]['style']
|
487
|
+
assert_equal dom[13]['style']['text-decoration'], 'underline overline line-through'
|
488
|
+
assert_equal dom[13]['fontstyle'], 'UOD'
|
489
|
+
end
|
490
|
+
|
491
|
+
test "CSS Dom text-indent test" do
|
492
|
+
pdf = MYPDF.new
|
493
|
+
|
494
|
+
html = '<style> p.first { text-indent: 10px; }
|
495
|
+
p.second { text-indent: 5em; }
|
496
|
+
p.third { text-indent: 5ex; }
|
497
|
+
p.fourth { text-indent: 50%; }</style>
|
498
|
+
<p class="first">ABC</p><p class="second">DEF</p><p class="third">GHI</p><p class="fourth">JKL</p>'
|
499
|
+
dom = pdf.getHtmlDomArray(html)
|
500
|
+
assert_equal dom.length, 13
|
501
|
+
|
502
|
+
# <p class="first">
|
503
|
+
assert_equal dom[1]['elkey'], 0
|
504
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
505
|
+
assert_equal dom[1]['tag'], true
|
506
|
+
assert_equal dom[1]['opening'], true
|
507
|
+
assert_equal dom[1]['value'], 'p'
|
508
|
+
assert_not_nil dom[1]['style']
|
509
|
+
assert_equal dom[1]['style']['text-indent'], '10px'
|
510
|
+
assert_in_delta dom[1]['text-indent'], 3.53, 0.01
|
511
|
+
|
512
|
+
# ABC
|
513
|
+
assert_equal dom[2]['elkey'], 1
|
514
|
+
assert_equal dom[2]['parent'], 1
|
515
|
+
assert_equal dom[2]['tag'], false
|
516
|
+
assert_equal dom[2]['value'], 'ABC'
|
517
|
+
|
518
|
+
# <p class="second">
|
519
|
+
assert_equal dom[4]['elkey'], 3
|
520
|
+
assert_equal dom[4]['parent'], 0 # parent -> parent tag key
|
521
|
+
assert_equal dom[4]['tag'], true
|
522
|
+
assert_equal dom[4]['opening'], true
|
523
|
+
assert_equal dom[4]['value'], 'p'
|
524
|
+
assert_not_nil dom[4]['style']
|
525
|
+
assert_equal dom[4]['style']['text-indent'], '5em'
|
526
|
+
assert_equal dom[4]['text-indent'], 5.0
|
527
|
+
|
528
|
+
# <p class="third">
|
529
|
+
assert_equal dom[7]['elkey'], 6
|
530
|
+
assert_equal dom[7]['parent'], 0 # parent -> parent tag key
|
531
|
+
assert_equal dom[7]['tag'], true
|
532
|
+
assert_equal dom[7]['opening'], true
|
533
|
+
assert_equal dom[7]['value'], 'p'
|
534
|
+
assert_not_nil dom[7]['style']
|
535
|
+
assert_equal dom[7]['style']['text-indent'], '5ex'
|
536
|
+
assert_equal dom[7]['text-indent'], 2.5
|
537
|
+
|
538
|
+
# <p class="fourth">
|
539
|
+
assert_equal dom[10]['elkey'], 9
|
540
|
+
assert_equal dom[10]['parent'], 0 # parent -> parent tag key
|
541
|
+
assert_equal dom[10]['tag'], true
|
542
|
+
assert_equal dom[10]['opening'], true
|
543
|
+
assert_equal dom[10]['value'], 'p'
|
544
|
+
assert_not_nil dom[10]['style']
|
545
|
+
assert_equal dom[10]['style']['text-indent'], '50%'
|
546
|
+
assert_equal dom[10]['text-indent'], 0.5
|
547
|
+
end
|
548
|
+
|
549
|
+
test "CSS Dom list-style-type test" do
|
550
|
+
pdf = MYPDF.new
|
551
|
+
|
552
|
+
html = '<style> p.first { list-style-type: none; }
|
553
|
+
p.second { list-style-type: disc; }
|
554
|
+
p.third { list-style-type: circle; }
|
555
|
+
p.fourth { list-style-type: square; }</style>
|
556
|
+
<p class="first">ABC</p><p class="second">DEF</p><p class="third">GHI</p><p class="fourth">JKL</p>'
|
557
|
+
dom = pdf.getHtmlDomArray(html)
|
558
|
+
assert_equal dom.length, 13
|
559
|
+
|
560
|
+
# <p class="first">
|
561
|
+
assert_equal dom[1]['elkey'], 0
|
562
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
563
|
+
assert_equal dom[1]['tag'], true
|
564
|
+
assert_equal dom[1]['opening'], true
|
565
|
+
assert_equal dom[1]['value'], 'p'
|
566
|
+
assert_not_nil dom[1]['style']
|
567
|
+
assert_equal dom[1]['style']['list-style-type'], 'none'
|
568
|
+
assert_equal dom[1]['listtype'], 'none'
|
569
|
+
|
570
|
+
# ABC
|
571
|
+
assert_equal dom[2]['elkey'], 1
|
572
|
+
assert_equal dom[2]['parent'], 1
|
573
|
+
assert_equal dom[2]['tag'], false
|
574
|
+
assert_equal dom[2]['value'], 'ABC'
|
575
|
+
|
576
|
+
# <p class="second">
|
577
|
+
assert_equal dom[4]['elkey'], 3
|
578
|
+
assert_equal dom[4]['parent'], 0 # parent -> parent tag key
|
579
|
+
assert_equal dom[4]['tag'], true
|
580
|
+
assert_equal dom[4]['opening'], true
|
581
|
+
assert_equal dom[4]['value'], 'p'
|
582
|
+
assert_not_nil dom[4]['style']
|
583
|
+
assert_equal dom[4]['style']['list-style-type'], 'disc'
|
584
|
+
assert_equal dom[4]['listtype'], 'disc'
|
585
|
+
|
586
|
+
# <p class="third">
|
587
|
+
assert_equal dom[7]['elkey'], 6
|
588
|
+
assert_equal dom[7]['parent'], 0 # parent -> parent tag key
|
589
|
+
assert_equal dom[7]['tag'], true
|
590
|
+
assert_equal dom[7]['opening'], true
|
591
|
+
assert_equal dom[7]['value'], 'p'
|
592
|
+
assert_not_nil dom[7]['style']
|
593
|
+
assert_equal dom[7]['style']['list-style-type'], 'circle'
|
594
|
+
assert_equal dom[7]['listtype'], 'circle'
|
595
|
+
end
|
596
|
+
|
597
|
+
test "CSS Dom page-break test" do
|
598
|
+
pdf = MYPDF.new
|
599
|
+
|
600
|
+
html = '<style> p.first { page-break-before: left; page-break-after: always; }
|
601
|
+
p.second { page-break-inside:avoid; }</style>
|
602
|
+
<p class="first">ABC</p><p class="second">DEF</p>'
|
603
|
+
dom = pdf.getHtmlDomArray(html)
|
604
|
+
assert_equal dom.length, 7
|
605
|
+
|
606
|
+
# <p class="first">
|
607
|
+
assert_equal dom[1]['elkey'], 0
|
608
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
609
|
+
assert_equal dom[1]['tag'], true
|
610
|
+
assert_equal dom[1]['opening'], true
|
611
|
+
assert_equal dom[1]['value'], 'p'
|
612
|
+
assert_not_nil dom[1]['style']
|
613
|
+
assert_equal dom[1]['style']['page-break-before'], 'left'
|
614
|
+
assert_equal dom[1]['style']['page-break-after'], 'always'
|
615
|
+
assert_not_nil dom[1]['attribute']
|
616
|
+
assert_equal dom[1]['attribute']['pagebreak'], 'left'
|
617
|
+
assert_equal dom[1]['attribute']['pagebreakafter'], 'true'
|
618
|
+
|
619
|
+
# ABC
|
620
|
+
assert_equal dom[2]['elkey'], 1
|
621
|
+
assert_equal dom[2]['parent'], 1
|
622
|
+
assert_equal dom[2]['tag'], false
|
623
|
+
assert_equal dom[2]['value'], 'ABC'
|
624
|
+
|
625
|
+
# <p class="second">
|
626
|
+
assert_equal dom[4]['elkey'], 3
|
627
|
+
assert_equal dom[4]['parent'], 0 # parent -> parent tag key
|
628
|
+
assert_equal dom[4]['tag'], true
|
629
|
+
assert_equal dom[4]['opening'], true
|
630
|
+
assert_equal dom[4]['value'], 'p'
|
631
|
+
assert_not_nil dom[1]['style']
|
632
|
+
assert_equal dom[4]['style']['page-break-inside'], 'avoid'
|
633
|
+
assert_not_nil dom[4]['attribute']
|
634
|
+
assert_equal dom[4]['attribute']['nobr'], 'true'
|
635
|
+
end
|
361
636
|
end
|
data/test/rbpdf_dom_test.rb
CHANGED
@@ -47,23 +47,24 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
47
47
|
|
48
48
|
# Error Tag (doble colse tag)
|
49
49
|
dom = pdf.getHtmlDomArray('</ul></div>')
|
50
|
-
assert_equal dom.length, 3
|
51
50
|
|
52
51
|
assert_equal 0, dom[0]['parent'] # Root
|
53
52
|
assert_equal false, dom[0]['tag']
|
54
53
|
assert_equal({}, dom[0]['attribute'])
|
55
54
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
55
|
+
if dom.length == 3 # for Rails 3.x/4.0/4.1 (no use Rails 4.2 later)
|
56
|
+
assert_equal dom[1]['parent'], 0 # parent -> Root key
|
57
|
+
assert_equal dom[1]['elkey'], 0
|
58
|
+
assert_equal dom[1]['tag'], true
|
59
|
+
assert_equal dom[1]['opening'], false
|
60
|
+
assert_equal dom[1]['value'], 'ul'
|
61
|
+
|
62
|
+
assert_equal dom[2]['parent'], 0 # parent -> Root key
|
63
|
+
assert_equal dom[2]['elkey'], 1
|
64
|
+
assert_equal dom[2]['tag'], true
|
65
|
+
assert_equal dom[2]['opening'], false
|
66
|
+
assert_equal dom[2]['value'], 'div'
|
67
|
+
end
|
67
68
|
|
68
69
|
# Attribute
|
69
70
|
dom = pdf.getHtmlDomArray('<p style="text-align:justify">abc</p>')
|
@@ -78,8 +79,8 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
78
79
|
assert_equal dom[1]['tag'], true
|
79
80
|
assert_equal dom[1]['opening'], true
|
80
81
|
assert_equal dom[1]['value'], 'p'
|
81
|
-
|
82
|
-
assert_equal dom[1]['attribute']['style'], 'text-align:
|
82
|
+
assert_not_nil dom[1]['attribute']
|
83
|
+
assert_equal dom[1]['attribute']['style'].gsub(' ', ''), 'text-align:justify;'
|
83
84
|
assert_equal dom[1]['align'], 'J'
|
84
85
|
|
85
86
|
# Table border
|
@@ -265,7 +266,7 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
265
266
|
assert_equal temprtl, false
|
266
267
|
end
|
267
268
|
|
268
|
-
test "Dom HTMLTagHandler img test" do
|
269
|
+
test "Dom HTMLTagHandler img y position with height attribute test" do
|
269
270
|
pdf = MYPDF.new
|
270
271
|
pdf.add_page
|
271
272
|
|
@@ -280,6 +281,21 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
280
281
|
assert_equal pdf.get_image_rby - (12 / pdf.get_scale_factor) , y2
|
281
282
|
end
|
282
283
|
|
284
|
+
test "Dom HTMLTagHandler img y position without height attribute test" do
|
285
|
+
pdf = MYPDF.new
|
286
|
+
pdf.add_page
|
287
|
+
|
288
|
+
# Image Error HTML
|
289
|
+
htmlcontent = '<img src="' + Rails.root.to_s + '/public/ng.png" alt="test alt attribute" border="0"/>'
|
290
|
+
dom1 = pdf.getHtmlDomArray(htmlcontent)
|
291
|
+
y1 = pdf.get_y
|
292
|
+
|
293
|
+
dom2 = pdf.openHTMLTagHandler(dom1, 1, false)
|
294
|
+
y2 = pdf.get_y
|
295
|
+
assert_equal dom1, dom2
|
296
|
+
assert_equal y1, y2
|
297
|
+
end
|
298
|
+
|
283
299
|
test "getHtmlDomArray encoding test" do
|
284
300
|
return unless 'test'.respond_to?(:force_encoding)
|
285
301
|
|
@@ -5,6 +5,9 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
5
5
|
def addHTMLVertSpace(hbz, hb, cell, firstorlast)
|
6
6
|
super
|
7
7
|
end
|
8
|
+
def sanitize_html(html)
|
9
|
+
super
|
10
|
+
end
|
8
11
|
end
|
9
12
|
|
10
13
|
test "html func addHTMLVertSpace empty lines test" do
|
@@ -133,4 +136,27 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
133
136
|
assert_equal x4, x3
|
134
137
|
assert_equal y4, y3 + 10 + 2
|
135
138
|
end
|
139
|
+
|
140
|
+
test "html func sanitize test 1" do
|
141
|
+
pdf = MYPDF.new
|
142
|
+
pdf.add_page()
|
143
|
+
html = '<table border="1"><thead><tr><td>ABCD</td><td>EFGH</td><td>IJKL</td></tr></thead>
|
144
|
+
<tr><td>abcd</td><td>efgh</td><td>ijkl</td></tr>
|
145
|
+
<tr><td>' + 'ABC' + '</td></tr></table>'
|
146
|
+
html = pdf.sanitize_html(html).gsub(/[\r\n]/,'')
|
147
|
+
|
148
|
+
assert_equal html, %{<table border="1"><thead><tr><td>ABCD</td><td>EFGH</td><td>IJKL</td></tr></thead> <tr><td>abcd</td><td>efgh</td><td>ijkl</td></tr> <tr><td>ABC</td></tr></table>}
|
149
|
+
end
|
150
|
+
|
151
|
+
test "html func sanitize test 2" do
|
152
|
+
pdf = MYPDF.new
|
153
|
+
pdf.add_page()
|
154
|
+
|
155
|
+
htmlcontent = '1<br><br><br><br><br><br><br><br><br><br> 2<br><br><br><br><br><br><br><br><br><br> 3<br><br><br><br><br><br><br><br><br><br> 4<br><br><br><br><br><br><br><br><br><br> 5<br><br><br><br><br><br><br><br><br><br> 6<br><br><br><br><br><br><br><br><br><br> 7<br><br><br><br><br><br><br><br><br><br> 8<br><br><br><br><br><br><br><br><br><br> 9<br><br><br><br><br><br><br><br><br><br> 10<br><br><br><br><br><br><br><br><br><br> 11<br><br><br><br><br><br><br><br><br><br>'
|
156
|
+
html = '<table cellpadding="1"><thead><tr><td>ABCD</td><td>EFGH</td><td>IJKL</td></tr></thead>
|
157
|
+
<tr><td>abcd</td><td>efgh</td><td>ijkl</td></tr>
|
158
|
+
<tr><td>' + htmlcontent + '</td></tr></table>'
|
159
|
+
html = pdf.sanitize_html(html).gsub(/[\r\n]/,'')
|
160
|
+
assert_equal html, %{<table cellpadding="1"><thead><tr><td>ABCD</td><td>EFGH</td><td>IJKL</td></tr></thead> <tr><td>abcd</td><td>efgh</td><td>ijkl</td></tr> <tr><td>1<br><br><br><br><br><br><br><br><br><br> 2<br><br><br><br><br><br><br><br><br><br> 3<br><br><br><br><br><br><br><br><br><br> 4<br><br><br><br><br><br><br><br><br><br> 5<br><br><br><br><br><br><br><br><br><br> 6<br><br><br><br><br><br><br><br><br><br> 7<br><br><br><br><br><br><br><br><br><br> 8<br><br><br><br><br><br><br><br><br><br> 9<br><br><br><br><br><br><br><br><br><br> 10<br><br><br><br><br><br><br><br><br><br> 11<br><br><br><br><br><br><br><br><br><br></td></tr></table>}
|
161
|
+
end
|
136
162
|
end
|
data/test/rbpdf_html_test.rb
CHANGED
@@ -11,7 +11,6 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
11
11
|
pdf = RBPDF.new
|
12
12
|
pdf.add_page()
|
13
13
|
|
14
|
-
|
15
14
|
htmlcontent = '<h1>HTML Example</h1>'
|
16
15
|
pdf.write_html(htmlcontent, true, 0, true, 0)
|
17
16
|
|
@@ -25,7 +24,7 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
25
24
|
assert_equal pno, 3
|
26
25
|
end
|
27
26
|
|
28
|
-
test "write_html Table test" do
|
27
|
+
test "write_html Table test 1" do
|
29
28
|
pdf = RBPDF.new
|
30
29
|
pdf.add_page()
|
31
30
|
|
@@ -41,6 +40,63 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
41
40
|
assert_equal pno, 3
|
42
41
|
end
|
43
42
|
|
43
|
+
test "write_html Table test 2" do
|
44
|
+
pdf = MYPDF.new
|
45
|
+
pdf.add_page()
|
46
|
+
|
47
|
+
htmlcontent = '1<br><br><br><br><br><br><br><br><br><br> 2<br><br><br><br><br><br><br><br><br><br> 3<br><br><br><br><br><br><br><br><br><br> 4<br><br><br><br><br><br><br><br><br><br> 5<br><br><br><br><br><br><br><br><br><br> 6<br><br><br><br><br><br><br><br><br><br> 7<br><br><br><br><br><br><br><br><br><br> 8<br><br><br><br><br><br><br><br><br><br> 9<br><br><br><br><br><br><br><br><br><br> 10<br><br><br><br><br><br><br><br><br><br> 11<br><br><br><br><br><br><br><br><br><br>'
|
48
|
+
|
49
|
+
tablehtml = '<table border="1"><tr><td>ABCD</td><td>EFGH</td><td>IJKL</td></tr>
|
50
|
+
<tr><td>abcd</td><td>efgh</td><td>ijkl</td></tr>
|
51
|
+
<tr><td>' + htmlcontent + '</td></tr></table>'
|
52
|
+
pdf.write_html(tablehtml, true, 0, true, 0)
|
53
|
+
|
54
|
+
pno = pdf.get_page
|
55
|
+
assert_equal pno, 3
|
56
|
+
|
57
|
+
content = []
|
58
|
+
contents = pdf.getPageBuffer(1)
|
59
|
+
contents.each_line {|line| content.push line.chomp }
|
60
|
+
count = 0
|
61
|
+
count_text = 0
|
62
|
+
pos1 = -1
|
63
|
+
pos2 = -2
|
64
|
+
content.each do |line|
|
65
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
66
|
+
if line =~ /ABCD/
|
67
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
68
|
+
pos1 = $1
|
69
|
+
assert_not_nil pos1
|
70
|
+
end
|
71
|
+
if line =~ /abcd/
|
72
|
+
count += 1
|
73
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
74
|
+
pos2 = $1
|
75
|
+
assert_not_nil pos2
|
76
|
+
end
|
77
|
+
end
|
78
|
+
assert_equal count_text, 13
|
79
|
+
assert_equal count, 1
|
80
|
+
assert_equal pos1, pos2
|
81
|
+
|
82
|
+
content = []
|
83
|
+
contents = pdf.getPageBuffer(2)
|
84
|
+
contents.each_line {|line| content.push line.chomp }
|
85
|
+
count_head = 0
|
86
|
+
count = 0
|
87
|
+
count_text = 0
|
88
|
+
content.each do |line|
|
89
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
90
|
+
if line =~ /\([6-9]\)/
|
91
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
92
|
+
pos2 = $1
|
93
|
+
assert_not_nil pos2
|
94
|
+
assert_equal pos1, pos2
|
95
|
+
end
|
96
|
+
end
|
97
|
+
assert_equal count_text, 7
|
98
|
+
end
|
99
|
+
|
44
100
|
test "write_html Table thead tag test 1" do
|
45
101
|
pdf = MYPDF.new
|
46
102
|
pdf.add_page()
|
@@ -71,7 +127,7 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
71
127
|
|
72
128
|
htmlcontent = '1<br><br><br><br><br><br><br><br><br><br> 2<br><br><br><br><br><br><br><br><br><br> 3<br><br><br><br><br><br><br><br><br><br> 4<br><br><br><br><br><br><br><br><br><br> 5<br><br><br><br><br><br><br><br><br><br> 6<br><br><br><br><br><br><br><br><br><br> 7<br><br><br><br><br><br><br><br><br><br> 8<br><br><br><br><br><br><br><br><br><br> 9<br><br><br><br><br><br><br><br><br><br> 10<br><br><br><br><br><br><br><br><br><br> 11<br><br><br><br><br><br><br><br><br><br>'
|
73
129
|
|
74
|
-
tablehtml = '<table
|
130
|
+
tablehtml = '<table><thead><tr><td>ABCD</td><td>EFGH</td><td>IJKL</td></tr></thead>
|
75
131
|
<tr><td>abcd</td><td>efgh</td><td>ijkl</td></tr>
|
76
132
|
<tr><td>' + htmlcontent + '</td></tr></table>'
|
77
133
|
|
@@ -79,43 +135,402 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
79
135
|
page = pdf.get_page
|
80
136
|
assert_equal 3, page
|
81
137
|
|
138
|
+
# Page 1
|
82
139
|
content = []
|
83
140
|
contents = pdf.getPageBuffer(1)
|
84
141
|
contents.each_line {|line| content.push line.chomp }
|
85
|
-
count_head = 0
|
86
|
-
|
142
|
+
count_text = count_head = count = 0
|
143
|
+
pos1 = -1
|
144
|
+
pos2 = -2
|
87
145
|
content.each do |line|
|
88
|
-
|
89
|
-
|
146
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
147
|
+
if line =~ /ABCD/
|
148
|
+
count_head += 1
|
149
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
150
|
+
pos1 = $1
|
151
|
+
assert_not_nil pos1
|
152
|
+
end
|
153
|
+
if line =~ /abcd/
|
154
|
+
count += 1
|
155
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
156
|
+
pos2 = $1
|
157
|
+
assert_not_nil pos2
|
158
|
+
end
|
90
159
|
end
|
160
|
+
assert_equal count_text, 13
|
91
161
|
assert_equal count_head, 1
|
92
162
|
assert_equal count, 1
|
163
|
+
assert_equal pos1, pos2
|
93
164
|
|
165
|
+
# Page 2
|
94
166
|
content = []
|
95
167
|
contents = pdf.getPageBuffer(2)
|
96
168
|
contents.each_line {|line| content.push line.chomp }
|
97
|
-
count_head = 0
|
98
|
-
count = 0
|
169
|
+
count_text = count_head = count = 0
|
99
170
|
content.each do |line|
|
100
|
-
|
171
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
172
|
+
if line =~ /ABCD/
|
173
|
+
count_head += 1
|
174
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
175
|
+
pos2 = $1
|
176
|
+
assert_not_nil pos2
|
177
|
+
assert_equal pos1, pos2
|
178
|
+
end
|
101
179
|
count += 1 if line =~ /abcd/
|
180
|
+
if line =~ /\([6-9]\)/
|
181
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
182
|
+
pos2 = $1
|
183
|
+
assert_not_nil pos2
|
184
|
+
assert_equal pos1, pos2
|
185
|
+
end
|
102
186
|
end
|
187
|
+
assert_equal count_text, 10
|
103
188
|
assert_equal count_head, 1
|
104
189
|
assert_equal count, 0
|
105
190
|
|
191
|
+
# Page 3
|
106
192
|
content = []
|
107
193
|
contents = pdf.getPageBuffer(3)
|
108
194
|
contents.each_line {|line| content.push line.chomp }
|
109
|
-
count_head = 0
|
110
|
-
count = 0
|
195
|
+
count_text = count_head = count = 0
|
111
196
|
content.each do |line|
|
112
|
-
|
197
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
198
|
+
if line =~ /ABCD/
|
199
|
+
count_head += 1
|
200
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
201
|
+
pos2 = $1
|
202
|
+
assert_not_nil pos2
|
203
|
+
assert_equal pos1, pos2
|
204
|
+
end
|
113
205
|
count += 1 if line =~ /abcd/
|
206
|
+
if line =~ /\(11\)/
|
207
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
208
|
+
pos2 = $1
|
209
|
+
assert_not_nil pos2
|
210
|
+
assert_equal pos1, pos2
|
211
|
+
end
|
114
212
|
end
|
213
|
+
assert_equal count_text, 5
|
115
214
|
assert_equal count_head, 1
|
116
215
|
assert_equal count, 0
|
117
216
|
end
|
118
217
|
|
218
|
+
test "write_html_cell Table thead tag test" do
|
219
|
+
pdf = MYPDF.new
|
220
|
+
pdf.add_page()
|
221
|
+
|
222
|
+
htmlcontent = '<br>1<br><br><br><br><br><br><br><br><br><br> 2<br><br><br><br><br><br><br><br><br><br> 3<br><br><br><br><br><br><br><br><br><br> 4<br>
|
223
|
+
<br><br><br><br><br><br><br><br><br> 5<br><br><br><br><br><br><br><br><br><br> 6<br><br><br><br><br><br><br><br><br><br> 7<br><br><br><br><br><br><br>
|
224
|
+
<br><br><br> 8<br><br><br><br><br><br><br><br><br><br> 9<br><br><br><br><br><br><br><br><br><br> 10<br><br><br><br><br><br><br><br><br><br> 11<br><br>
|
225
|
+
<br><br><br><br><br><br><br><br>'
|
226
|
+
|
227
|
+
tablehtml ='<table><thead><tr>
|
228
|
+
<th style="text-align: left">Left align</th>
|
229
|
+
<th style="text-align: right">Right align</th>
|
230
|
+
<th style="text-align: center">Center align</th>
|
231
|
+
</tr> </thead><tbody> <tr>
|
232
|
+
<td style="text-align: left">left' + htmlcontent + '</td>
|
233
|
+
<td style="text-align: right">right</td>
|
234
|
+
<td style="text-align: center">center</td>
|
235
|
+
</tr> </tbody></table>'
|
236
|
+
|
237
|
+
pdf.write_html_cell(0, 0, '', '',tablehtml)
|
238
|
+
|
239
|
+
page = pdf.get_page
|
240
|
+
assert_equal 1, page
|
241
|
+
|
242
|
+
# Page 1
|
243
|
+
content = []
|
244
|
+
contents = pdf.getPageBuffer(1)
|
245
|
+
contents.each_line {|line| content.push line.chomp }
|
246
|
+
count_text = count_head = count = 0
|
247
|
+
pos1 = -1
|
248
|
+
pos2 = -2
|
249
|
+
content.each do |line|
|
250
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
251
|
+
if line =~ /Left align/
|
252
|
+
count_head += 1
|
253
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
254
|
+
pos1 = $1
|
255
|
+
assert_not_nil pos1
|
256
|
+
end
|
257
|
+
if line =~ /left/
|
258
|
+
count += 1
|
259
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
260
|
+
pos2 = $1
|
261
|
+
assert_not_nil pos2
|
262
|
+
end
|
263
|
+
end
|
264
|
+
assert_equal count_text, 13
|
265
|
+
assert_equal count_head, 1
|
266
|
+
assert_equal count, 1
|
267
|
+
assert_equal pos1, pos2
|
268
|
+
|
269
|
+
# Page 2
|
270
|
+
content = []
|
271
|
+
contents = pdf.getPageBuffer(2)
|
272
|
+
contents.each_line {|line| content.push line.chomp }
|
273
|
+
count_text = count_head = count = 0
|
274
|
+
content.each do |line|
|
275
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
276
|
+
if line =~ /Left align/
|
277
|
+
count_head += 1
|
278
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
279
|
+
pos2 = $1
|
280
|
+
assert_not_nil pos2
|
281
|
+
assert_equal pos1, pos2
|
282
|
+
end
|
283
|
+
if line =~ /\(6\)/
|
284
|
+
count += 1
|
285
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
286
|
+
pos2 = $1
|
287
|
+
assert_not_nil pos2
|
288
|
+
assert_equal pos1, pos2
|
289
|
+
end
|
290
|
+
end
|
291
|
+
assert_equal count_text, 10
|
292
|
+
assert_equal count_head, 1
|
293
|
+
assert_equal count, 1
|
294
|
+
|
295
|
+
# Page 3
|
296
|
+
content = []
|
297
|
+
contents = pdf.getPageBuffer(3)
|
298
|
+
contents.each_line {|line| content.push line.chomp }
|
299
|
+
count_text = count_head = count = 0
|
300
|
+
content.each do |line|
|
301
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
302
|
+
if line =~ /Left align/
|
303
|
+
count_head += 1
|
304
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
305
|
+
pos2 = $1
|
306
|
+
assert_not_nil pos2
|
307
|
+
assert_equal pos1, pos2
|
308
|
+
end
|
309
|
+
if line =~ /\(11\)/
|
310
|
+
count += 1
|
311
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
312
|
+
pos2 = $1
|
313
|
+
assert_not_nil pos2
|
314
|
+
assert_equal pos1, pos2
|
315
|
+
end
|
316
|
+
end
|
317
|
+
assert_equal count_text, 5
|
318
|
+
assert_equal count_head, 1
|
319
|
+
assert_equal count, 1
|
320
|
+
end
|
321
|
+
|
322
|
+
test "write_html_cell Table thead tag cellpadding x position test" do
|
323
|
+
pdf = MYPDF.new
|
324
|
+
pdf.add_page()
|
325
|
+
|
326
|
+
htmlcontent = '<br>1<br><br><br><br><br><br><br><br><br><br> 2<br><br><br><br><br><br><br><br><br><br> 3<br><br><br><br><br><br><br><br><br><br> 4<br>
|
327
|
+
<br><br><br><br><br><br><br><br><br> 5<br><br><br><br><br><br><br><br><br><br> 6<br><br><br><br><br><br><br><br><br><br> 7<br><br><br><br><br><br><br>
|
328
|
+
<br><br><br> 8<br><br><br><br><br><br><br><br><br><br> 9<br><br><br><br><br><br><br><br><br><br> 10<br><br><br><br><br><br><br><br><br><br> 11<br><br>
|
329
|
+
<br><br><br><br><br><br><br><br>'
|
330
|
+
|
331
|
+
tablehtml ='<table cellpadding="10"><thead><tr>
|
332
|
+
<th style="text-align: left">Left align</th>
|
333
|
+
<th style="text-align: right">Center align</th>
|
334
|
+
<th style="text-align: left">Right align</th>
|
335
|
+
</tr> </thead><tbody> <tr>
|
336
|
+
<td style="text-align: left">left</td>
|
337
|
+
<td style="text-align: right">center</td>
|
338
|
+
<td style="text-align: left">right' + htmlcontent + '</td>
|
339
|
+
</tr> </tbody></table>'
|
340
|
+
|
341
|
+
pdf.write_html_cell(0, 0, '', '',tablehtml)
|
342
|
+
|
343
|
+
page = pdf.get_page
|
344
|
+
assert_equal 1, page
|
345
|
+
|
346
|
+
# Page 1
|
347
|
+
content = []
|
348
|
+
contents = pdf.getPageBuffer(1)
|
349
|
+
contents.each_line {|line| content.push line.chomp }
|
350
|
+
count_text = count_head = count = 0
|
351
|
+
pos1 = -1
|
352
|
+
pos2 = -2
|
353
|
+
content.each do |line|
|
354
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
355
|
+
if line =~ /Right align/
|
356
|
+
count_head += 1
|
357
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
358
|
+
pos1 = $1
|
359
|
+
assert_not_nil pos1
|
360
|
+
end
|
361
|
+
if line =~ /right/
|
362
|
+
count += 1
|
363
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
364
|
+
pos2 = $1
|
365
|
+
assert_not_nil pos2
|
366
|
+
end
|
367
|
+
end
|
368
|
+
assert_equal count_text, 13
|
369
|
+
assert_equal count_head, 1
|
370
|
+
assert_equal count, 1
|
371
|
+
assert_equal pos1, pos2
|
372
|
+
|
373
|
+
# Page 2
|
374
|
+
content = []
|
375
|
+
contents = pdf.getPageBuffer(2)
|
376
|
+
contents.each_line {|line| content.push line.chomp }
|
377
|
+
count_text = count_head = count = 0
|
378
|
+
content.each do |line|
|
379
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
380
|
+
if line =~ /Right align/
|
381
|
+
count_head += 1
|
382
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
383
|
+
pos2 = $1
|
384
|
+
assert_not_nil pos2
|
385
|
+
assert_equal pos1, pos2
|
386
|
+
end
|
387
|
+
if line =~ /\(6\)/
|
388
|
+
count += 1
|
389
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
390
|
+
pos2 = $1
|
391
|
+
assert_not_nil pos2
|
392
|
+
assert_equal pos1, pos2
|
393
|
+
end
|
394
|
+
end
|
395
|
+
assert_equal count_text, 10
|
396
|
+
assert_equal count_head, 1
|
397
|
+
assert_equal count, 1
|
398
|
+
end
|
399
|
+
|
400
|
+
test "write_html_cell Table thead tag cellpadding y position test 1" do
|
401
|
+
pdf = MYPDF.new
|
402
|
+
pdf.add_page()
|
403
|
+
|
404
|
+
table_start='<table cellpadding="10"><thead><tr>
|
405
|
+
<th style="text-align: left">Left align</th><th style="text-align: center">Center align</th><th style="text-align: right">Right align</th>
|
406
|
+
</tr></thead><tbody>'
|
407
|
+
table_col='<tr><td style="text-align: left">AAA</td><td style="text-align: center">BBB</td><td style="text-align: right">CCC</td></tr>'
|
408
|
+
table_end='</tbody></table>'
|
409
|
+
tablehtml= table_start + table_col * 30 + table_end
|
410
|
+
|
411
|
+
pdf.write_html_cell(0, 0, '', '',tablehtml)
|
412
|
+
|
413
|
+
# Page 1
|
414
|
+
content = []
|
415
|
+
contents = pdf.getPageBuffer(1)
|
416
|
+
contents.each_line {|line| content.push line.chomp }
|
417
|
+
count_text = count_head = count = 0
|
418
|
+
pos1 = pos2 = -1
|
419
|
+
content.each do |line|
|
420
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
421
|
+
if line =~ /Left align/
|
422
|
+
count_head += 1
|
423
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
424
|
+
pos1 = $2
|
425
|
+
assert_not_nil pos1
|
426
|
+
end
|
427
|
+
if line =~ /AAA/
|
428
|
+
count += 1
|
429
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
430
|
+
pos2 = $2 if pos2 == -1
|
431
|
+
assert_not_nil pos2
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
assert_equal count_text, 65
|
436
|
+
assert_equal count_head, 1
|
437
|
+
assert_equal count, 20
|
438
|
+
base_pos = pos1.to_i - pos2.to_i
|
439
|
+
|
440
|
+
# Page 2
|
441
|
+
content = []
|
442
|
+
contents = pdf.getPageBuffer(2)
|
443
|
+
contents.each_line {|line| content.push line.chomp }
|
444
|
+
count_text = count_head = count = 0
|
445
|
+
pos1 = pos2 = -1
|
446
|
+
content.each do |line|
|
447
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
448
|
+
if line =~ /Left align/
|
449
|
+
count_head += 1
|
450
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
451
|
+
pos1 = $2
|
452
|
+
assert_not_nil pos1
|
453
|
+
end
|
454
|
+
if line =~ /AAA/
|
455
|
+
count += 1
|
456
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
457
|
+
pos2 = $2 if pos2 == -1
|
458
|
+
assert_not_nil pos2
|
459
|
+
end
|
460
|
+
end
|
461
|
+
assert_equal count_text, 34
|
462
|
+
assert_equal count_head, 1
|
463
|
+
assert_equal count, 10
|
464
|
+
assert_equal base_pos, pos1.to_i - pos2.to_i
|
465
|
+
end
|
466
|
+
|
467
|
+
test "write_html_cell Table thead tag cellpadding y position test 2" do
|
468
|
+
pdf = MYPDF.new
|
469
|
+
pdf.add_page()
|
470
|
+
|
471
|
+
table_start='abc<br><table cellpadding="10"><thead><tr>
|
472
|
+
<th style="text-align: left">Left align</th><th style="text-align: center">Center align</th><th style="text-align: right">Right align</th>
|
473
|
+
</tr></thead><tbody>'
|
474
|
+
table_col='<tr><td style="text-align: left">AAA</td><td style="text-align: center">BBB</td><td style="text-align: right">CCC</td></tr>'
|
475
|
+
table_end='</tbody></table>'
|
476
|
+
tablehtml= table_start + table_col * 30 + table_end
|
477
|
+
|
478
|
+
pdf.write_html_cell(0, 0, '', '',tablehtml)
|
479
|
+
|
480
|
+
# Page 1
|
481
|
+
content = []
|
482
|
+
contents = pdf.getPageBuffer(1)
|
483
|
+
contents.each_line {|line| content.push line.chomp }
|
484
|
+
count_text = count_head = count = 0
|
485
|
+
pos1 = pos2 = -1
|
486
|
+
content.each do |line|
|
487
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
488
|
+
if line =~ /Left align/
|
489
|
+
count_head += 1
|
490
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
491
|
+
pos1 = $2
|
492
|
+
assert_not_nil pos1
|
493
|
+
end
|
494
|
+
if line =~ /AAA/
|
495
|
+
count += 1
|
496
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
497
|
+
pos2 = $2 if pos2 == -1
|
498
|
+
assert_not_nil pos2
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
assert_equal count_text, 66
|
503
|
+
assert_equal count_head, 1
|
504
|
+
assert_equal count, 20
|
505
|
+
base_pos = pos1.to_i - pos2.to_i
|
506
|
+
|
507
|
+
# Page 2
|
508
|
+
content = []
|
509
|
+
contents = pdf.getPageBuffer(2)
|
510
|
+
contents.each_line {|line| content.push line.chomp }
|
511
|
+
count_text = count_head = count = 0
|
512
|
+
pos1 = pos2 = -1
|
513
|
+
content.each do |line|
|
514
|
+
count_text += 1 if line =~ /TJ ET Q$/
|
515
|
+
if line =~ /Left align/
|
516
|
+
count_head += 1
|
517
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
518
|
+
pos1 = $2
|
519
|
+
assert_not_nil pos1
|
520
|
+
end
|
521
|
+
if line =~ /AAA/
|
522
|
+
count += 1
|
523
|
+
line =~ /BT ([0-9.]+) ([0-9.]+) Td/
|
524
|
+
pos2 = $2 if pos2 == -1
|
525
|
+
assert_not_nil pos2
|
526
|
+
end
|
527
|
+
end
|
528
|
+
assert_equal count_text, 34
|
529
|
+
assert_equal count_head, 1
|
530
|
+
assert_equal count, 10
|
531
|
+
assert_equal base_pos, pos1.to_i - pos2.to_i
|
532
|
+
end
|
533
|
+
|
119
534
|
test "write_html ASCII text test" do
|
120
535
|
pdf = MYPDF.new
|
121
536
|
pdf.add_page()
|