rbpdf 1.18.2 → 1.18.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +11 -0
- data/LICENSE.TXT +504 -0
- data/README.md +3 -3
- data/lib/rbpdf.rb +56 -25
- data/lib/rbpdf/version.rb +1 -1
- data/rbpdf.gemspec +1 -1
- data/test/rbpdf_bidi_test.rb +66 -0
- data/test/rbpdf_cell_test.rb +14 -0
- data/test/rbpdf_css_test.rb +43 -0
- data/test/rbpdf_dom_test.rb +63 -0
- data/test/rbpdf_font_func_test.rb +14 -0
- data/test/rbpdf_func_test.rb +9 -0
- data/test/rbpdf_html_func_test.rb +136 -0
- data/test/rbpdf_test.rb +37 -0
- data/test/rbpdf_write_test.rb +53 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -14,15 +14,15 @@ A template plugin allowing the inclusion of ERB-enabled RBPDF template files.
|
|
14
14
|
* HTML tag support.
|
15
15
|
* CSS minimum support.
|
16
16
|
* Image
|
17
|
-
- 8bit PNG image support without RMagick
|
18
|
-
- PNG(with alpha channel)/JPEG/GIF image support. (use RMagick
|
17
|
+
- 8bit PNG image support without RMagick library.
|
18
|
+
- PNG(with alpha channel)/JPEG/GIF image support. (use RMagick library)
|
19
19
|
|
20
20
|
|
21
21
|
##
|
22
22
|
## Installing RBPDF
|
23
23
|
##
|
24
24
|
|
25
|
-
RBPDF is
|
25
|
+
RBPDF is distributed via RubyGems, and can be installed the usual way that you install gems: by simply typing `gem install rbpdf` on the command line.
|
26
26
|
|
27
27
|
==
|
28
28
|
|
data/lib/rbpdf.rb
CHANGED
@@ -363,6 +363,7 @@ class RBPDF
|
|
363
363
|
@radiobutton_groups ||= []
|
364
364
|
@radio_groups ||= []
|
365
365
|
@textindent ||= 0
|
366
|
+
@nested_table = false
|
366
367
|
|
367
368
|
@start_transaction_y ||= 0
|
368
369
|
@in_thead ||= false
|
@@ -1110,8 +1111,8 @@ class RBPDF
|
|
1110
1111
|
# [@access public]
|
1111
1112
|
# [@since 4.5.027 (2009-03-16)]
|
1112
1113
|
#
|
1113
|
-
def getPageDimensions(pagenum=
|
1114
|
-
if pagenum.
|
1114
|
+
def getPageDimensions(pagenum=0)
|
1115
|
+
if !pagenum.is_a? Integer or pagenum.zero?
|
1115
1116
|
pagenum = @page
|
1116
1117
|
end
|
1117
1118
|
return @pagedim[pagenum]
|
@@ -1161,15 +1162,15 @@ class RBPDF
|
|
1161
1162
|
# [@since 1.5.2]
|
1162
1163
|
# [@see] getPageDimensions()
|
1163
1164
|
#
|
1164
|
-
def getBreakMargin(pagenum=
|
1165
|
-
if pagenum.
|
1165
|
+
def getBreakMargin(pagenum=0)
|
1166
|
+
if !pagenum.is_a? Integer or pagenum.zero?
|
1166
1167
|
return @b_margin
|
1167
1168
|
end
|
1168
1169
|
return @pagedim[pagenum]['bm']
|
1169
1170
|
end
|
1170
1171
|
alias_method :get_break_margin, :getBreakMargin
|
1171
1172
|
|
1172
|
-
def GetBreakMargin(pagenum=
|
1173
|
+
def GetBreakMargin(pagenum=0)
|
1173
1174
|
warn "[DEPRECATION] 'GetBreakMargin' is deprecated. Please use 'get_break_margin' instead."
|
1174
1175
|
getBreakMargin(pagenum)
|
1175
1176
|
end
|
@@ -3287,6 +3288,7 @@ class RBPDF
|
|
3287
3288
|
# [@since (4.5.019) 2009-02-28]
|
3288
3289
|
#
|
3289
3290
|
def removeSHY(txt='')
|
3291
|
+
txt = txt.dup
|
3290
3292
|
# Unicode Data
|
3291
3293
|
# Name : SOFT HYPHEN, commonly abbreviated as SHY
|
3292
3294
|
# HTML Entity (decimal): ­
|
@@ -4209,6 +4211,7 @@ class RBPDF
|
|
4209
4211
|
# [@since 1.5]
|
4210
4212
|
#
|
4211
4213
|
def Write(h, txt, link=nil, fill=0, align='', ln=false, stretch=0, firstline=false, firstblock=false, maxh=0)
|
4214
|
+
txt = txt.dup
|
4212
4215
|
txt.force_encoding('ASCII-8BIT') if txt.respond_to?(:force_encoding)
|
4213
4216
|
if txt.length == 0
|
4214
4217
|
txt = ' '
|
@@ -4359,7 +4362,7 @@ class RBPDF
|
|
4359
4362
|
if ((@current_font['type'] == 'TrueTypeUnicode') or (@current_font['type'] == 'cidfont0')) and arabic
|
4360
4363
|
# with bidirectional algorithm some chars may be changed affecting the line length
|
4361
4364
|
# *** very slow ***
|
4362
|
-
l = GetArrStringWidth(utf8Bidi(chars[j
|
4365
|
+
l = GetArrStringWidth(utf8Bidi(chars[j,i-j], '', @tmprtl))
|
4363
4366
|
else
|
4364
4367
|
l += GetCharWidth(c)
|
4365
4368
|
end
|
@@ -4846,7 +4849,7 @@ class RBPDF
|
|
4846
4849
|
if (type == '')
|
4847
4850
|
type = getImageFileType(file, imsize)
|
4848
4851
|
else
|
4849
|
-
type.downcase
|
4852
|
+
type = type.downcase
|
4850
4853
|
type = 'jpeg' if type == 'jpg'
|
4851
4854
|
end
|
4852
4855
|
|
@@ -6366,7 +6369,7 @@ protected
|
|
6366
6369
|
stream = stream.strip
|
6367
6370
|
@apxo_obj_id += 1
|
6368
6371
|
@offsets[@apxo_obj_id] = @bufferlen
|
6369
|
-
out = @apxo_obj_id + ' 0 obj'
|
6372
|
+
out = @apxo_obj_id.to_s + ' 0 obj'
|
6370
6373
|
out << ' <<'
|
6371
6374
|
out << ' /Type /XObject'
|
6372
6375
|
out << ' /Subtype /Form'
|
@@ -7586,7 +7589,7 @@ protected
|
|
7586
7589
|
def UTF8StringToArray(str)
|
7587
7590
|
if @cache_utf8_string_to_array[str]
|
7588
7591
|
# return cached value
|
7589
|
-
return @cache_utf8_string_to_array[str]
|
7592
|
+
return @cache_utf8_string_to_array[str].dup
|
7590
7593
|
end
|
7591
7594
|
# check cache size
|
7592
7595
|
if @cache_size_utf8_string_to_array >= @cache_maxsize_utf8_string_to_array
|
@@ -7602,7 +7605,7 @@ protected
|
|
7602
7605
|
strarr[pos] = char.unpack('C')[0]
|
7603
7606
|
end
|
7604
7607
|
# insert new value on cache
|
7605
|
-
@cache_utf8_string_to_array[str] = strarr
|
7608
|
+
@cache_utf8_string_to_array[str] = strarr.dup
|
7606
7609
|
return strarr
|
7607
7610
|
end
|
7608
7611
|
|
@@ -7661,7 +7664,7 @@ protected
|
|
7661
7664
|
end
|
7662
7665
|
end
|
7663
7666
|
# insert new value on cache
|
7664
|
-
@cache_utf8_string_to_array[str] = unicode
|
7667
|
+
@cache_utf8_string_to_array[str] = unicode.dup
|
7665
7668
|
return unicode;
|
7666
7669
|
end
|
7667
7670
|
|
@@ -9011,6 +9014,7 @@ public
|
|
9011
9014
|
# [@since 2.4.000 (2008-03-06)]
|
9012
9015
|
#
|
9013
9016
|
def utf8Bidi(ta, str='', forcertl=false)
|
9017
|
+
str = str.dup
|
9014
9018
|
# paragraph embedding level
|
9015
9019
|
pel = 0
|
9016
9020
|
# max level
|
@@ -9567,7 +9571,6 @@ public
|
|
9567
9571
|
|
9568
9572
|
ordarray = []
|
9569
9573
|
0.upto(numchars-1) do |i|
|
9570
|
-
chardata[i][:char]
|
9571
9574
|
ordarray.push chardata[i][:char]
|
9572
9575
|
end
|
9573
9576
|
|
@@ -9685,8 +9688,8 @@ public
|
|
9685
9688
|
# [@access public]
|
9686
9689
|
# [@since 3.0.000 (2008-03-27)]
|
9687
9690
|
#
|
9688
|
-
def startPageGroup(page=
|
9689
|
-
if page.
|
9691
|
+
def startPageGroup(page=0)
|
9692
|
+
if !page.is_a? Integer or page.zero?
|
9690
9693
|
page = @page + 1
|
9691
9694
|
end
|
9692
9695
|
@newpagegroup[page] = true
|
@@ -10324,7 +10327,7 @@ protected
|
|
10324
10327
|
return {}
|
10325
10328
|
end
|
10326
10329
|
# remove comments
|
10327
|
-
cssdata.gsub
|
10330
|
+
cssdata = cssdata.gsub(/\/\*[^\*]*\*\//, '')
|
10328
10331
|
# remove newlines and multiple spaces
|
10329
10332
|
cssdata.gsub!(/[\s]+/, ' ')
|
10330
10333
|
# remove some spaces
|
@@ -10573,6 +10576,7 @@ protected
|
|
10573
10576
|
# [@since 3.2.000 (2008-06-20)]
|
10574
10577
|
#
|
10575
10578
|
def getHtmlDomArray(html)
|
10579
|
+
html = html.dup
|
10576
10580
|
html.force_encoding('UTF-8') if @is_unicode and html.respond_to?(:force_encoding)
|
10577
10581
|
# array of CSS styles ( selector => properties).
|
10578
10582
|
css = {}
|
@@ -10642,7 +10646,6 @@ protected
|
|
10642
10646
|
html = "%s" % sanitize(html, :tags=> %w(a b blockquote body br dd del div dl dt em font h1 h2 h3 h4 h5 h6 hr i img li ol p pre small span strong sub sup table tablehead td th thead tr tt u ins ul), :attributes => %w(cellspacing cellpadding bgcolor color value width height src size colspan rowspan style align border face href dir class id nobr stroke strokecolor fill nested))
|
10643
10647
|
|
10644
10648
|
# replace some blank characters
|
10645
|
-
html.gsub!(/<br>/, '<br/>')
|
10646
10649
|
html.gsub!(/<pre/, '<xre') # preserve pre tag
|
10647
10650
|
html.gsub!(/<(table|tr|td|th|blockquote|dd|div|dt|h1|h2|h3|h4|h5|h6|br|hr|li|ol|ul|p)([^\>]*)>[\n\r\t]+/, '<\\1\\2>')
|
10648
10651
|
html.gsub!(/@(\r\n|\r)@/, "\n")
|
@@ -10777,7 +10780,11 @@ protected
|
|
10777
10780
|
# store header rows on a new table
|
10778
10781
|
if (dom[key]['value'] == 'tr') and (dom[(dom[key]['parent'])]['thead'] == true)
|
10779
10782
|
if empty_string(dom[grandparent]['thead'])
|
10780
|
-
dom[grandparent]['
|
10783
|
+
if dom[grandparent]['attribute'].nil? or dom[grandparent]['attribute']['style'].nil?
|
10784
|
+
dom[grandparent]['thead'] = a[dom[grandparent]['elkey']].dup
|
10785
|
+
else
|
10786
|
+
dom[grandparent]['thead'] = '<style>' + dom[grandparent]['value'] + ' {' + dom[grandparent]['attribute']['style'] + '}</style>' + a[dom[grandparent]['elkey']].dup
|
10787
|
+
end
|
10781
10788
|
end
|
10782
10789
|
dom[key]['parent'].upto(key) do |i|
|
10783
10790
|
dom[grandparent]['thead'] << a[dom[i]['elkey']]
|
@@ -10797,12 +10804,12 @@ protected
|
|
10797
10804
|
# *** opening html tag
|
10798
10805
|
dom[key]['opening'] = true
|
10799
10806
|
dom[key]['parent'] = level[-1]
|
10800
|
-
if element[-1, 1]
|
10801
|
-
#
|
10807
|
+
if element[-1, 1] == '/' or (dom[key]['value'] =~ /(br|img|hr)/)
|
10808
|
+
# self-closing tag
|
10809
|
+
dom[key]['self'] = true
|
10810
|
+
else
|
10802
10811
|
level.push(key)
|
10803
10812
|
dom[key]['self'] = false
|
10804
|
-
else
|
10805
|
-
dom[key]['self'] = true
|
10806
10813
|
end
|
10807
10814
|
# copy some values from parent
|
10808
10815
|
parentkey = 0
|
@@ -11228,7 +11235,10 @@ public
|
|
11228
11235
|
# [@see] Multicell(), writeHTML(), Cell()
|
11229
11236
|
#
|
11230
11237
|
def writeHTMLCell(w, h, x, y, html='', border=0, ln=0, fill=0, reseth=true, align='', autopadding=true)
|
11231
|
-
|
11238
|
+
@nested_table = true
|
11239
|
+
rtn = MultiCell(w, h, html, border, align, fill, ln, x, y, reseth, 0, true, autopadding, 0)
|
11240
|
+
@nested_table = false
|
11241
|
+
return rtn
|
11232
11242
|
end
|
11233
11243
|
alias_method :write_html_cell, :writeHTMLCell
|
11234
11244
|
|
@@ -11957,7 +11967,7 @@ public
|
|
11957
11967
|
else
|
11958
11968
|
wtmp = @w - @r_margin - @x
|
11959
11969
|
end
|
11960
|
-
if dom[key]['attribute']['nested'] and (dom[key]['attribute']['nested'] == 'true')
|
11970
|
+
if (@nested_table == true) or (dom[key]['attribute']['nested'] and (dom[key]['attribute']['nested'] == 'true'))
|
11961
11971
|
# add margin for nested tables
|
11962
11972
|
wtmp -= @c_margin
|
11963
11973
|
end
|
@@ -12541,6 +12551,12 @@ public
|
|
12541
12551
|
xpos += 2 * GetStringWidth(32.chr)
|
12542
12552
|
end
|
12543
12553
|
end
|
12554
|
+
if @rtl
|
12555
|
+
xpos -= @line_width * 1.5
|
12556
|
+
else
|
12557
|
+
xpos += @line_width * 1.5
|
12558
|
+
end
|
12559
|
+
|
12544
12560
|
imglink = ''
|
12545
12561
|
if !@href['url'].nil? and !empty_string(@href['url'])
|
12546
12562
|
imglink = @href['url']
|
@@ -12573,13 +12589,20 @@ public
|
|
12573
12589
|
ih = getHTMLUnitToUnits(tag['attribute']['height'], 1, 'px', false)
|
12574
12590
|
end
|
12575
12591
|
|
12592
|
+
# store original margin values
|
12593
|
+
l_margin = @l_margin
|
12594
|
+
r_margin = @r_margin
|
12595
|
+
|
12596
|
+
SetLeftMargin(@l_margin + @line_width * 1.5)
|
12597
|
+
SetRightMargin(@r_margin + @line_width * 1.5)
|
12598
|
+
|
12576
12599
|
begin
|
12577
12600
|
# if (type == 'eps') or (type == 'ai')
|
12578
12601
|
# ImageEps(tag['attribute']['src'], xpos, @y, iw, ih, imglink, true, align, '', border, true)
|
12579
12602
|
# elsif type == 'svg'
|
12580
12603
|
# ImageSVG(tag['attribute']['src'], xpos, @y, iw, ih, imglink, align, '', border, true)
|
12581
12604
|
# else
|
12582
|
-
result_img = Image(tag['attribute']['src'], xpos, @y, iw, ih, '', imglink, align, false, 300, '', false, false, border, false, false, true)
|
12605
|
+
result_img = Image(tag['attribute']['src'], xpos, @y + @line_width * 1.5, iw, ih, '', imglink, align, false, 300, '', false, false, border, false, false, true)
|
12583
12606
|
# end
|
12584
12607
|
rescue => err
|
12585
12608
|
logger.error "pdf: Image: error: #{err.message}"
|
@@ -12593,6 +12616,11 @@ public
|
|
12593
12616
|
when 'B'
|
12594
12617
|
@y = @img_rb_y - (tag['fontsize'] / @k)
|
12595
12618
|
end
|
12619
|
+
|
12620
|
+
# restore original margin values
|
12621
|
+
SetLeftMargin(l_margin)
|
12622
|
+
SetRightMargin(r_margin)
|
12623
|
+
|
12596
12624
|
if result_img == false
|
12597
12625
|
Write(@lasth, File::basename(img_name) + ' ', '', false, '', false, 0, false) unless img_name.nil?
|
12598
12626
|
end
|
@@ -12961,7 +12989,7 @@ public
|
|
12961
12989
|
}
|
12962
12990
|
if !in_table_head
|
12963
12991
|
# we are not inside a thead section
|
12964
|
-
if
|
12992
|
+
if dom[(parent['parent'])]['attribute']['cellpadding'] ### fix ###
|
12965
12993
|
@c_margin = @old_c_margin
|
12966
12994
|
end
|
12967
12995
|
@lasth = @font_size * @cell_height_ratio
|
@@ -12980,6 +13008,9 @@ public
|
|
12980
13008
|
@thead_margins = {}
|
12981
13009
|
end
|
12982
13010
|
end
|
13011
|
+
if tag['block'] ### fix ###
|
13012
|
+
addHTMLVertSpace(hbz / 2, 0, cell, (dom[key+1].nil? or (dom[key+1]['value'] != 'table')))
|
13013
|
+
end
|
12983
13014
|
when 'a'
|
12984
13015
|
@href = {}
|
12985
13016
|
when 'sup'
|
data/lib/rbpdf/version.rb
CHANGED
data/rbpdf.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
Dir.glob("lib/fonts/dejavu-fonts-ttf-*/{AUTHORS,BUGS,LICENSE,NEWS,README}") +
|
21
21
|
Dir.glob("test/*") +
|
22
22
|
["Rakefile", "rbpdf.gemspec", "Gemfile",
|
23
|
-
"CHANGELOG", "test_unicode.rbpdf", "README.md",
|
23
|
+
"CHANGELOG", "test_unicode.rbpdf", "README.md", "LICENSE.TXT",
|
24
24
|
"utf8test.txt", "logo_example.png" ]
|
25
25
|
spec.rdoc_options += [ '--exclude', 'lib/fonts/',
|
26
26
|
'--exclude', 'lib/htmlcolors.rb',
|
data/test/rbpdf_bidi_test.rb
CHANGED
@@ -9,6 +9,9 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
9
9
|
def utf8Bidi(ta, str='', forcertl=false)
|
10
10
|
super
|
11
11
|
end
|
12
|
+
def cache_utf8_string_to_array(str)
|
13
|
+
@cache_utf8_string_to_array[str]
|
14
|
+
end
|
12
15
|
end
|
13
16
|
|
14
17
|
test "Bidi" do
|
@@ -62,4 +65,67 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
62
65
|
assert_equal [0x61, 0x62, 0x63, 0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_str
|
63
66
|
end
|
64
67
|
|
68
|
+
test "Bidi arabic test" do
|
69
|
+
pdf = MYPDF.new
|
70
|
+
|
71
|
+
# Bidirectional Algorithm
|
72
|
+
ascii_str = "role"
|
73
|
+
utf8_arabic_str_1 = "\xd8\xaf\xd9\x88\xd8\xb1"
|
74
|
+
utf8_arabic_char_1 = "\xd8\xaf"
|
75
|
+
|
76
|
+
# UCS4 charactor -> UTF-8 charactor
|
77
|
+
utf8_chr = pdf.unichr(0x62f)
|
78
|
+
assert_equal "\xd8\xaf", utf8_chr
|
79
|
+
|
80
|
+
# UTF-8 string -> array of UCS4 charactor
|
81
|
+
ary_ucs4 = pdf.UTF8StringToArray(ascii_str)
|
82
|
+
assert_equal [0x72, 0x6f, 0x6c, 0x65], ary_ucs4
|
83
|
+
ary_ucs4 = pdf.UTF8StringToArray(utf8_arabic_str_1)
|
84
|
+
assert_equal [0x62f, 0x648, 0x631], ary_ucs4
|
85
|
+
ary_ucs4 = pdf.UTF8StringToArray(utf8_arabic_char_1)
|
86
|
+
assert_equal [0x62f], ary_ucs4
|
87
|
+
|
88
|
+
|
89
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str))
|
90
|
+
assert_equal [0x72, 0x6f, 0x6c, 0x65], ary_ucs4
|
91
|
+
|
92
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str), ascii_str, 'R')
|
93
|
+
assert_equal [0x72, 0x6f, 0x6c, 0x65], ary_ucs4
|
94
|
+
|
95
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_arabic_char_1))
|
96
|
+
assert_equal [0xfea9], ary_ucs4
|
97
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_arabic_char_1), utf8_arabic_char_1, 'R')
|
98
|
+
assert_equal [0xfea9], ary_ucs4
|
99
|
+
|
100
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_arabic_str_1))
|
101
|
+
assert_equal [0xfeae, 0xfeee, 0xfea9], ary_ucs4
|
102
|
+
end
|
103
|
+
|
104
|
+
test "Bidi date test" do
|
105
|
+
pdf = MYPDF.new
|
106
|
+
|
107
|
+
utf8_date_str_1 = '12/01/2014'
|
108
|
+
|
109
|
+
pdf.set_rtl(true)
|
110
|
+
pdf.set_temp_rtl('rtl')
|
111
|
+
# UTF-8 string -> array of UCS4 charactor
|
112
|
+
ary_ucs4 = pdf.UTF8StringToArray(utf8_date_str_1)
|
113
|
+
assert_equal [0x31, 0x32, 0x2f, 0x30, 0x31, 0x2f, 0x32, 0x30, 0x31, 0x34], ary_ucs4 # 12/01/2014
|
114
|
+
|
115
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_date_str_1))
|
116
|
+
assert_equal [0x31, 0x32, 0x2f, 0x30, 0x31, 0x2f, 0x32, 0x30, 0x31, 0x34], ary_ucs4 # 12/01/2014
|
117
|
+
|
118
|
+
ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_date_str_1), utf8_date_str_1, 'R')
|
119
|
+
assert_equal [0x31, 0x32, 0x2f, 0x30, 0x31, 0x2f, 0x32, 0x30, 0x31, 0x34], ary_ucs4 # 12/01/2014
|
120
|
+
end
|
121
|
+
|
122
|
+
test "UTF8StringToArray cache_utf8_string_to_array test" do
|
123
|
+
pdf = MYPDF.new
|
124
|
+
|
125
|
+
chars = pdf.UTF8StringToArray('1234')
|
126
|
+
chars.reverse!
|
127
|
+
|
128
|
+
rtn = pdf.cache_utf8_string_to_array('1234')
|
129
|
+
assert_equal rtn, [0x31, 0x32, 0x33, 0x34]
|
130
|
+
end
|
65
131
|
end
|
data/test/rbpdf_cell_test.rb
CHANGED
@@ -250,4 +250,18 @@ class RbpdfTest < ActiveSupport::TestCase
|
|
250
250
|
line = pdf.get_num_lines(txt, w)
|
251
251
|
assert_equal line, 3
|
252
252
|
end
|
253
|
+
|
254
|
+
test "removeSHY encoding test" do
|
255
|
+
return unless 'test'.respond_to?(:force_encoding)
|
256
|
+
|
257
|
+
pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
|
258
|
+
|
259
|
+
str = 'test'.force_encoding('UTF-8')
|
260
|
+
txt = pdf.removeSHY(str)
|
261
|
+
assert_equal str.encoding.to_s, 'UTF-8'
|
262
|
+
|
263
|
+
str = 'test'.force_encoding('ASCII-8BIT')
|
264
|
+
txt = pdf.removeSHY(str)
|
265
|
+
assert_equal str.encoding.to_s, 'ASCII-8BIT'
|
266
|
+
end
|
253
267
|
end
|
data/test/rbpdf_css_test.rb
CHANGED
@@ -181,12 +181,55 @@ class RbpdfCssTest < ActiveSupport::TestCase
|
|
181
181
|
assert_equal dom[1]['value'], 'h2'
|
182
182
|
|
183
183
|
# <table>
|
184
|
+
assert_equal dom[4]['elkey'], 3
|
184
185
|
assert_equal dom[4]['value'], 'table'
|
185
186
|
assert_equal dom[4]['attribute'], {'border'=>'2px #ff0000 solid', 'style'=>';border:2px #ff0000 solid;'}
|
186
187
|
assert_equal dom[4]['style']['border'], '2px #ff0000 solid'
|
187
188
|
assert_equal dom[4]['attribute']['border'], '2px #ff0000 solid'
|
188
189
|
end
|
189
190
|
|
191
|
+
test "CSS Dom table thead test" do
|
192
|
+
pdf = MYPDF.new
|
193
|
+
|
194
|
+
html = '<style> table, td { border: 2px #ff0000 solid; } </style>
|
195
|
+
<h2>HTML TABLE THEAD:</h2>
|
196
|
+
<table><thead>
|
197
|
+
<tr> <th>abc</th> </tr>
|
198
|
+
</thead>
|
199
|
+
<tbody>
|
200
|
+
<tr> <td>def</td> </tr>
|
201
|
+
<tr> <td>ghi</td> </tr>
|
202
|
+
</tbody></table>'
|
203
|
+
|
204
|
+
dom = pdf.getHtmlDomArray(html)
|
205
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
206
|
+
## remove thead/tbody tag block (by getHtmlDomArray()) ##
|
207
|
+
## added marker tag (by getHtmlDomArray()) ##
|
208
|
+
# '<h2>HTML TABLE:</h2>
|
209
|
+
# <table><tr><th>abc<marker style="font-size:0"/></th></tr>
|
210
|
+
# <tr><td>def<marker style="font-size:0"/></td></tr></table>'
|
211
|
+
assert_equal dom.length, 24
|
212
|
+
|
213
|
+
assert_equal dom[0]['parent'], 0 # Root
|
214
|
+
assert_equal dom[0]['tag'], false
|
215
|
+
assert_equal dom[0]['attribute'], {}
|
216
|
+
|
217
|
+
# <h2>
|
218
|
+
assert_equal dom[1]['elkey'], 0
|
219
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
220
|
+
assert_equal dom[1]['tag'], true
|
221
|
+
assert_equal dom[1]['opening'], true
|
222
|
+
assert_equal dom[1]['value'], 'h2'
|
223
|
+
|
224
|
+
# <table>
|
225
|
+
assert_equal dom[4]['elkey'], 3
|
226
|
+
assert_equal dom[4]['value'], 'table'
|
227
|
+
assert_equal dom[4]['attribute'], {'border'=>'2px #ff0000 solid', 'style'=>';border:2px #ff0000 solid;'}
|
228
|
+
assert_equal dom[4]['style']['border'], '2px #ff0000 solid'
|
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></tablehead>'
|
231
|
+
end
|
232
|
+
|
190
233
|
test "CSS Dom line-height test normal" do
|
191
234
|
pdf = MYPDF.new
|
192
235
|
|