rbpdf 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG +35 -0
- data/Gemfile +4 -0
- data/README.md +68 -0
- data/Rakefile +2 -0
- data/lib/core/rmagick.rb +85 -0
- data/lib/fonts/README.z +2 -0
- data/lib/fonts/arialunicid0_cw.rb +1738 -0
- data/lib/fonts/cid0cs.rb +21 -0
- data/lib/fonts/cid0ct.rb +21 -0
- data/lib/fonts/cid0jp.rb +21 -0
- data/lib/fonts/cid0kr.rb +21 -0
- data/lib/fonts/courier.rb +37 -0
- data/lib/fonts/dejavu-fonts-ttf-2.33/AUTHORS +53 -0
- data/lib/fonts/dejavu-fonts-ttf-2.33/BUGS +3 -0
- data/lib/fonts/dejavu-fonts-ttf-2.33/LICENSE +99 -0
- data/lib/fonts/dejavu-fonts-ttf-2.33/NEWS +1315 -0
- data/lib/fonts/dejavu-fonts-ttf-2.33/README +59 -0
- data/lib/fonts/dejavusans.ctg.z +0 -0
- data/lib/fonts/dejavusans.rb +338 -0
- data/lib/fonts/dejavusans.z +0 -0
- data/lib/fonts/dejavusansb.ctg.z +0 -0
- data/lib/fonts/dejavusansb.rb +330 -0
- data/lib/fonts/dejavusansb.z +0 -0
- data/lib/fonts/dejavusansbi.ctg.z +0 -0
- data/lib/fonts/dejavusansbi.rb +297 -0
- data/lib/fonts/dejavusansbi.z +0 -0
- data/lib/fonts/dejavusansi.ctg.z +0 -0
- data/lib/fonts/dejavusansi.rb +305 -0
- data/lib/fonts/dejavusansi.z +0 -0
- data/lib/fonts/freefont-20080912/AUTHORS +191 -0
- data/lib/fonts/freefont-20080912/COPYING +341 -0
- data/lib/fonts/freefont-20080912/CREDITS +506 -0
- data/lib/fonts/freefont-20080912/ChangeLog +3320 -0
- data/lib/fonts/freefont-20080912/INSTALL +81 -0
- data/lib/fonts/freefont-20080912/README +108 -0
- data/lib/fonts/freemono.ctg.z +0 -0
- data/lib/fonts/freemono.rb +203 -0
- data/lib/fonts/freemono.z +0 -0
- data/lib/fonts/freemonob.ctg.z +0 -0
- data/lib/fonts/freemonob.rb +120 -0
- data/lib/fonts/freemonob.z +0 -0
- data/lib/fonts/freemonobi.ctg.z +0 -0
- data/lib/fonts/freemonobi.rb +84 -0
- data/lib/fonts/freemonobi.z +0 -0
- data/lib/fonts/freemonoi.ctg.z +0 -0
- data/lib/fonts/freemonoi.rb +136 -0
- data/lib/fonts/freemonoi.z +0 -0
- data/lib/fonts/freesans.ctg.z +0 -0
- data/lib/fonts/freesans.rb +196 -0
- data/lib/fonts/freesans.z +0 -0
- data/lib/fonts/freesansb.ctg.z +0 -0
- data/lib/fonts/freesansb.rb +136 -0
- data/lib/fonts/freesansb.z +0 -0
- data/lib/fonts/freesansbi.ctg.z +0 -0
- data/lib/fonts/freesansbi.rb +108 -0
- data/lib/fonts/freesansbi.z +0 -0
- data/lib/fonts/freesansi.ctg.z +0 -0
- data/lib/fonts/freesansi.rb +136 -0
- data/lib/fonts/freesansi.z +0 -0
- data/lib/fonts/freeserif.ctg.z +0 -0
- data/lib/fonts/freeserif.rb +285 -0
- data/lib/fonts/freeserif.z +0 -0
- data/lib/fonts/freeserifb.ctg.z +0 -0
- data/lib/fonts/freeserifb.rb +164 -0
- data/lib/fonts/freeserifb.z +0 -0
- data/lib/fonts/freeserifbi.ctg.z +0 -0
- data/lib/fonts/freeserifbi.rb +130 -0
- data/lib/fonts/freeserifbi.z +0 -0
- data/lib/fonts/freeserifi.ctg.z +0 -0
- data/lib/fonts/freeserifi.rb +151 -0
- data/lib/fonts/freeserifi.z +0 -0
- data/lib/fonts/helvetica.rb +34 -0
- data/lib/fonts/helveticab.rb +34 -0
- data/lib/fonts/helveticabi.rb +34 -0
- data/lib/fonts/helveticai.rb +34 -0
- data/lib/fonts/hysmyeongjostdmedium.rb +31 -0
- data/lib/fonts/kozgopromedium.rb +47 -0
- data/lib/fonts/kozminproregular.rb +46 -0
- data/lib/fonts/msungstdlight.rb +23 -0
- data/lib/fonts/sjis.rb +834 -0
- data/lib/fonts/stsongstdlight.rb +23 -0
- data/lib/fonts/symbol.rb +33 -0
- data/lib/fonts/times.rb +34 -0
- data/lib/fonts/timesb.rb +34 -0
- data/lib/fonts/timesbi.rb +34 -0
- data/lib/fonts/timesi.rb +34 -0
- data/lib/fonts/uni2cid_ac15.rb +23613 -0
- data/lib/fonts/uni2cid_ag15.rb +30222 -0
- data/lib/fonts/uni2cid_aj16.rb +15705 -0
- data/lib/fonts/uni2cid_ak12.rb +17530 -0
- data/lib/fonts/zapfdingbats.rb +33 -0
- data/lib/htmlcolors.rb +207 -0
- data/lib/rbpdf.rb +14472 -0
- data/lib/rbpdf/version.rb +3 -0
- data/lib/unicode_data.rb +18315 -0
- data/logo_example.png +0 -0
- data/rbpdf.gemspec +35 -0
- data/test/rbpdf_bidi_test.rb +65 -0
- data/test/rbpdf_bookmark_test.rb +57 -0
- data/test/rbpdf_cell_test.rb +232 -0
- data/test/rbpdf_content_test.rb +117 -0
- data/test/rbpdf_css_test.rb +318 -0
- data/test/rbpdf_dom_test.rb +113 -0
- data/test/rbpdf_font_func_test.rb +27 -0
- data/test/rbpdf_font_style_test.rb +34 -0
- data/test/rbpdf_font_test.rb +181 -0
- data/test/rbpdf_format_test.rb +27 -0
- data/test/rbpdf_func_test.rb +126 -0
- data/test/rbpdf_html_test.rb +164 -0
- data/test/rbpdf_htmlcell_test.rb +64 -0
- data/test/rbpdf_image_test.rb +108 -0
- data/test/rbpdf_test.rb +245 -0
- data/test/rbpdf_transaction_test.rb +199 -0
- data/test/rbpdf_viewerpreferences_test.rb +37 -0
- data/test/rbpdf_write_test.rb +173 -0
- data/test/test_helper.rb +1 -0
- data/test_unicode.rbpdf +115 -0
- data/utf8test.txt +120 -0
- metadata +216 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RbpdfCssTest < ActiveSupport::TestCase
|
|
4
|
+
class MYPDF < RBPDF
|
|
5
|
+
def extractCSSproperties(cssdata)
|
|
6
|
+
super
|
|
7
|
+
end
|
|
8
|
+
def isValidCSSSelectorForTag(dom, key, selector)
|
|
9
|
+
super
|
|
10
|
+
end
|
|
11
|
+
def getTagStyleFromCSS(dom, key, css)
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
def getHtmlDomArray(html)
|
|
15
|
+
super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
test "CSS Basic" do
|
|
20
|
+
pdf = MYPDF.new
|
|
21
|
+
|
|
22
|
+
# empty
|
|
23
|
+
css = pdf.extractCSSproperties('')
|
|
24
|
+
assert_equal css, {}
|
|
25
|
+
# empty blocks
|
|
26
|
+
css = pdf.extractCSSproperties('h1 {}')
|
|
27
|
+
assert_equal css, {}
|
|
28
|
+
# comment
|
|
29
|
+
css = pdf.extractCSSproperties('/* comment */')
|
|
30
|
+
assert_equal css, {}
|
|
31
|
+
|
|
32
|
+
css = pdf.extractCSSproperties('h1 { color: navy; font-family: times; }')
|
|
33
|
+
assert_equal css, {"0001 h1"=>"color:navy;font-family:times;"}
|
|
34
|
+
|
|
35
|
+
css = pdf.extractCSSproperties('h1 { color: navy; font-family: times; } p.first { color: #003300; font-family: helvetica; font-size: 12pt; }')
|
|
36
|
+
assert_equal css, {"0001 h1"=>"color:navy;font-family:times;", "0021 p.first"=>"color:#003300;font-family:helvetica;font-size:12pt;"}
|
|
37
|
+
|
|
38
|
+
css = pdf.extractCSSproperties('h1,h2,h3{background-color:#e0e0e0}')
|
|
39
|
+
assert_equal css, {"0001 h1"=>"background-color:#e0e0e0", "0001 h2"=>"background-color:#e0e0e0", "0001 h3"=>"background-color:#e0e0e0"}
|
|
40
|
+
|
|
41
|
+
css = pdf.extractCSSproperties('p.second { color: rgb(00,63,127); font-family: times; font-size: 12pt; text-align: justify; }')
|
|
42
|
+
assert_equal css, {"0011 p.second"=>"color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;"}
|
|
43
|
+
|
|
44
|
+
css = pdf.extractCSSproperties('p#second { color: rgb(00,63,127); font-family: times; font-size: 12pt; text-align: justify; }')
|
|
45
|
+
assert_equal css, {"0101 p#second"=>"color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;"}
|
|
46
|
+
|
|
47
|
+
css = pdf.extractCSSproperties('p.first { color: rgb(00,63,127); } p.second { font-family: times; }')
|
|
48
|
+
assert_equal css, {"0021 p.first"=>"color:rgb(00,63,127);", "0011 p.second"=>"font-family:times;"}
|
|
49
|
+
|
|
50
|
+
css = pdf.extractCSSproperties('p#first { color: rgb(00,63,127); } p#second { color: rgb(00,63,127); }')
|
|
51
|
+
assert_equal css, {"0111 p#first"=>"color:rgb(00,63,127);", "0101 p#second"=>"color:rgb(00,63,127);"}
|
|
52
|
+
|
|
53
|
+
# media
|
|
54
|
+
css = pdf.extractCSSproperties('@media print { body { font: 10pt serif } }')
|
|
55
|
+
assert_equal css, {"0001 body"=>"font:10pt serif"}
|
|
56
|
+
css = pdf.extractCSSproperties('@media screen { body { font: 12pt sans-serif } }')
|
|
57
|
+
assert_equal css, {}
|
|
58
|
+
css = pdf.extractCSSproperties('@media all { body { line-height: 1.2 } }')
|
|
59
|
+
assert_equal css, {"0001 body"=>"line-height:1.2"}
|
|
60
|
+
|
|
61
|
+
css = pdf.extractCSSproperties('@media print {
|
|
62
|
+
#top-menu, #header, #main-menu, #sidebar, #footer, .contextual, .other-formats { display:none; }
|
|
63
|
+
#main { background: #fff; }
|
|
64
|
+
#content { width: 99%; margin: 0; padding: 0; border: 0; background: #fff; overflow: visible !important;}
|
|
65
|
+
#wiki_add_attachment { display:none; }
|
|
66
|
+
.hide-when-print { display: none; }
|
|
67
|
+
.autoscroll {overflow-x: visible;}
|
|
68
|
+
table.list {margin-top:0.5em;}
|
|
69
|
+
table.list th, table.list td {border: 1px solid #aaa;}
|
|
70
|
+
} @media all { body { line-height: 1.2 } }')
|
|
71
|
+
assert_equal css, {"0100 #top-menu"=>"display:none;",
|
|
72
|
+
"0100 #header"=>"display:none;",
|
|
73
|
+
"0100 #main-menu"=>"display:none;",
|
|
74
|
+
"0100 #sidebar"=>"display:none;",
|
|
75
|
+
"0100 #footer"=>"display:none;",
|
|
76
|
+
"0010 .contextual"=>"display:none;",
|
|
77
|
+
"0010 .other-formats"=>"display:none;",
|
|
78
|
+
"0100 #main"=>"background:#fff;",
|
|
79
|
+
"0100 #content"=>"width:99%;margin:0;padding:0;border:0;background:#fff;overflow:visible !important;",
|
|
80
|
+
"0100 #wiki_add_attachment"=>"display:none;",
|
|
81
|
+
"0010 .hide-when-print"=>"display:none;",
|
|
82
|
+
"0010 .autoscroll"=>"overflow-x:visible;",
|
|
83
|
+
"0011 table.list"=>"margin-top:0.5em;",
|
|
84
|
+
"0012 table.list th"=>"border:1px solid #aaa;",
|
|
85
|
+
"0012 table.list td"=>"border:1px solid #aaa;",
|
|
86
|
+
"0001 body"=>"line-height:1.2"}
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
test "CSS Selector Valid test" do
|
|
90
|
+
pdf = MYPDF.new
|
|
91
|
+
|
|
92
|
+
# Simple CSS
|
|
93
|
+
dom = pdf.getHtmlDomArray('<p>abc</p>')
|
|
94
|
+
assert_equal dom.length, 4
|
|
95
|
+
valid = pdf.isValidCSSSelectorForTag(dom, 1, ' p') # dom, key, css selector
|
|
96
|
+
assert_equal valid, true
|
|
97
|
+
|
|
98
|
+
dom = pdf.getHtmlDomArray('<h1>abc</h1>')
|
|
99
|
+
assert_equal dom.length, 4
|
|
100
|
+
valid = pdf.isValidCSSSelectorForTag(dom, 1, ' h1') # dom, key, css selector
|
|
101
|
+
assert_equal valid, true
|
|
102
|
+
|
|
103
|
+
dom = pdf.getHtmlDomArray('<p class="first">abc</p>')
|
|
104
|
+
assert_equal dom.length, 4
|
|
105
|
+
valid = pdf.isValidCSSSelectorForTag(dom, 1, ' p.first') # dom, key, css selector
|
|
106
|
+
assert_equal valid, true
|
|
107
|
+
|
|
108
|
+
dom = pdf.getHtmlDomArray('<p class="first">abc<span>def</span></p>')
|
|
109
|
+
assert_equal dom.length, 7
|
|
110
|
+
valid = pdf.isValidCSSSelectorForTag(dom, 3, ' p.first span') # dom, key, css selector
|
|
111
|
+
assert_equal valid, true
|
|
112
|
+
|
|
113
|
+
dom = pdf.getHtmlDomArray('<p id="second">abc</p>')
|
|
114
|
+
assert_equal dom.length, 4
|
|
115
|
+
valid = pdf.isValidCSSSelectorForTag(dom, 1, ' p#second') # dom, key, css selector
|
|
116
|
+
assert_equal valid, true
|
|
117
|
+
|
|
118
|
+
dom = pdf.getHtmlDomArray('<p id="second">abc<span>def</span></p>')
|
|
119
|
+
assert_equal dom.length, 7
|
|
120
|
+
valid = pdf.isValidCSSSelectorForTag(dom, 3, ' p#second > span') # dom, key, css selector
|
|
121
|
+
assert_equal valid, true
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
test "CSS Tag Sytle test 1" do
|
|
125
|
+
pdf = MYPDF.new
|
|
126
|
+
|
|
127
|
+
# Simple CSS
|
|
128
|
+
dom = pdf.getHtmlDomArray('<h1>abc</h1>')
|
|
129
|
+
assert_equal dom.length, 4
|
|
130
|
+
|
|
131
|
+
tag = pdf.getTagStyleFromCSS(dom, 1, {'0001 h1'=>'color:navy;font-family:times;'}) # dom, key, css selector
|
|
132
|
+
assert_equal tag, ';color:navy;font-family:times;'
|
|
133
|
+
|
|
134
|
+
tag = pdf.getTagStyleFromCSS(dom, 1, {'0001h1'=>'color:navy;font-family:times;'}) # dom, key, css selector
|
|
135
|
+
assert_equal tag, ''
|
|
136
|
+
|
|
137
|
+
tag = pdf.getTagStyleFromCSS(dom, 1, {'0001 h2'=>'color:navy;font-family:times;'}) # dom, key, css selector
|
|
138
|
+
assert_equal tag, ''
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
test "CSS Tag Sytle test 2" do
|
|
142
|
+
pdf = MYPDF.new
|
|
143
|
+
|
|
144
|
+
dom = pdf.getHtmlDomArray('<p class="first">abc</p>')
|
|
145
|
+
assert_equal dom.length, 4
|
|
146
|
+
|
|
147
|
+
tag = pdf.getTagStyleFromCSS(dom, 1, {'0021 p.first'=>'color:rgb(00,63,127);'})
|
|
148
|
+
assert_equal tag, ';color:rgb(00,63,127);'
|
|
149
|
+
|
|
150
|
+
dom = pdf.getHtmlDomArray('<p id="second">abc</p>')
|
|
151
|
+
assert_equal dom.length, 4
|
|
152
|
+
|
|
153
|
+
tag = pdf.getTagStyleFromCSS(dom, 1, {'0101 p#second'=>'color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;'})
|
|
154
|
+
assert_equal tag, ';color:rgb(00,63,127);font-family:times;font-size:12pt;text-align:justify;'
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
test "CSS Dom test" do
|
|
158
|
+
pdf = MYPDF.new
|
|
159
|
+
|
|
160
|
+
html = '<style> table, td { border: 2px #ff0000 solid; } </style>
|
|
161
|
+
<h2>HTML TABLE:</h2>
|
|
162
|
+
<table> <tr> <th>abc</th> </tr>
|
|
163
|
+
<tr> <td>def</td> </tr> </table>'
|
|
164
|
+
dom = pdf.getHtmlDomArray(html)
|
|
165
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
|
166
|
+
## added marker tag (by getHtmlDomArray()) ##
|
|
167
|
+
# '<h2>HTML TABLE:</h2>
|
|
168
|
+
# <table><tr><th>abc<marker style="font-size:0"/></th></tr>
|
|
169
|
+
# <tr><td>def<marker style="font-size:0"/></td></tr></table>'
|
|
170
|
+
assert_equal dom.length, 18
|
|
171
|
+
|
|
172
|
+
assert_equal dom[0]['parent'], 0 # Root
|
|
173
|
+
assert_equal dom[0]['tag'], false
|
|
174
|
+
assert_equal dom[0]['attribute'], {}
|
|
175
|
+
|
|
176
|
+
# <h2>
|
|
177
|
+
assert_equal dom[1]['elkey'], 0
|
|
178
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
179
|
+
assert_equal dom[1]['tag'], true
|
|
180
|
+
assert_equal dom[1]['opening'], true
|
|
181
|
+
assert_equal dom[1]['value'], 'h2'
|
|
182
|
+
|
|
183
|
+
# <table>
|
|
184
|
+
assert_equal dom[4]['value'], 'table'
|
|
185
|
+
assert_equal dom[4]['attribute'], {'border'=>'2px #ff0000 solid', 'style'=>';border:2px #ff0000 solid;'}
|
|
186
|
+
assert_equal dom[4]['style']['border'], '2px #ff0000 solid'
|
|
187
|
+
assert_equal dom[4]['attribute']['border'], '2px #ff0000 solid'
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
test "CSS Dom line-height test normal" do
|
|
191
|
+
pdf = MYPDF.new
|
|
192
|
+
|
|
193
|
+
html = '<style> h2 { line-height: normal; } </style>
|
|
194
|
+
<h2>HTML TEST</h2>'
|
|
195
|
+
dom = pdf.getHtmlDomArray(html)
|
|
196
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
|
197
|
+
# '<h2>HTML TEST</h2>'
|
|
198
|
+
assert_equal dom.length, 4
|
|
199
|
+
|
|
200
|
+
# <h2>
|
|
201
|
+
assert_equal dom[1]['elkey'], 0
|
|
202
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
203
|
+
assert_equal dom[1]['tag'], true
|
|
204
|
+
assert_equal dom[1]['opening'], true
|
|
205
|
+
assert_equal dom[1]['value'], 'h2'
|
|
206
|
+
assert_equal dom[1]['line-height'], 1.25
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
test "CSS Dom line-height test numeric" do
|
|
210
|
+
pdf = MYPDF.new
|
|
211
|
+
|
|
212
|
+
html = '<style> h2 { line-height: 1.4; } </style>
|
|
213
|
+
<h2>HTML TEST</h2>'
|
|
214
|
+
dom = pdf.getHtmlDomArray(html)
|
|
215
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
|
216
|
+
# '<h2>HTML TEST</h2>'
|
|
217
|
+
assert_equal dom.length, 4
|
|
218
|
+
|
|
219
|
+
# <h2>
|
|
220
|
+
assert_equal dom[1]['elkey'], 0
|
|
221
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
222
|
+
assert_equal dom[1]['tag'], true
|
|
223
|
+
assert_equal dom[1]['opening'], true
|
|
224
|
+
assert_equal dom[1]['value'], 'h2'
|
|
225
|
+
assert_equal dom[1]['line-height'], 1.4
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
test "CSS Dom line-height test percentage" do
|
|
229
|
+
pdf = MYPDF.new
|
|
230
|
+
|
|
231
|
+
html = '<style> h2 { line-height: 10%; } </style>
|
|
232
|
+
<h2>HTML TEST</h2>'
|
|
233
|
+
dom = pdf.getHtmlDomArray(html)
|
|
234
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
|
235
|
+
# '<h2>HTML TEST</h2>'
|
|
236
|
+
assert_equal dom.length, 4
|
|
237
|
+
|
|
238
|
+
# <h2>
|
|
239
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
240
|
+
assert_equal dom[1]['elkey'], 0
|
|
241
|
+
assert_equal dom[1]['tag'], true
|
|
242
|
+
assert_equal dom[1]['opening'], true
|
|
243
|
+
assert_equal dom[1]['value'], 'h2'
|
|
244
|
+
assert_equal dom[1]['line-height'], 0.1
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
test "CSS Dom class test" do
|
|
248
|
+
pdf = MYPDF.new
|
|
249
|
+
|
|
250
|
+
html = '<style>p.first { color: #003300; font-family: helvetica; font-size: 12pt; }
|
|
251
|
+
p.first span { color: #006600; font-style: italic; }</style>
|
|
252
|
+
<p class="first">Example <span>Fusce</span></p>'
|
|
253
|
+
dom = pdf.getHtmlDomArray(html)
|
|
254
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
|
255
|
+
# '<p class="first">Example <span>Fusce</span></p>'
|
|
256
|
+
assert_equal dom.length, 7
|
|
257
|
+
|
|
258
|
+
# <p class="first">
|
|
259
|
+
assert_equal dom[1]['elkey'], 0
|
|
260
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
261
|
+
assert_equal dom[1]['tag'], true
|
|
262
|
+
assert_equal dom[1]['opening'], true
|
|
263
|
+
assert_equal dom[1]['value'], 'p'
|
|
264
|
+
assert_equal dom[1]['attribute']['class'], 'first'
|
|
265
|
+
assert_equal dom[1]['style']['color'], '#003300'
|
|
266
|
+
assert_equal dom[1]['style']['font-family'], 'helvetica'
|
|
267
|
+
assert_equal dom[1]['style']['font-size'], '12pt'
|
|
268
|
+
|
|
269
|
+
# Example
|
|
270
|
+
assert_equal dom[2]['elkey'], 1
|
|
271
|
+
assert_equal dom[2]['parent'], 1
|
|
272
|
+
assert_equal dom[2]['tag'], false
|
|
273
|
+
assert_equal dom[2]['value'], 'Example '
|
|
274
|
+
|
|
275
|
+
# <span>
|
|
276
|
+
assert_equal dom[3]['elkey'], 2
|
|
277
|
+
assert_equal dom[3]['parent'], 1
|
|
278
|
+
assert_equal dom[3]['tag'], true
|
|
279
|
+
assert_equal dom[3]['opening'], true
|
|
280
|
+
assert_equal dom[3]['value'], 'span'
|
|
281
|
+
assert_equal dom[3]['style']['color'], '#006600'
|
|
282
|
+
assert_equal dom[3]['style']['font-style'], 'italic'
|
|
283
|
+
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
test "CSS Dom id test" do
|
|
287
|
+
pdf = MYPDF.new
|
|
288
|
+
|
|
289
|
+
html = '<style> p#second > span { background-color: #FFFFAA; }</style>
|
|
290
|
+
<p id="second">Example <span>Fusce</span></p>'
|
|
291
|
+
dom = pdf.getHtmlDomArray(html)
|
|
292
|
+
## remove style tag block (by getHtmlDomArray()) ##
|
|
293
|
+
# '<p id="second">Example <span>Fusce</span></p>'
|
|
294
|
+
assert_equal dom.length, 7
|
|
295
|
+
|
|
296
|
+
# <p id="second">
|
|
297
|
+
assert_equal dom[1]['elkey'], 0
|
|
298
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
299
|
+
assert_equal dom[1]['tag'], true
|
|
300
|
+
assert_equal dom[1]['opening'], true
|
|
301
|
+
assert_equal dom[1]['value'], 'p'
|
|
302
|
+
assert_equal dom[1]['attribute']['id'], 'second'
|
|
303
|
+
|
|
304
|
+
# Example
|
|
305
|
+
assert_equal dom[2]['elkey'], 1
|
|
306
|
+
assert_equal dom[2]['parent'], 1
|
|
307
|
+
assert_equal dom[2]['tag'], false
|
|
308
|
+
assert_equal dom[2]['value'], 'Example '
|
|
309
|
+
|
|
310
|
+
# <span>
|
|
311
|
+
assert_equal dom[3]['elkey'], 2
|
|
312
|
+
assert_equal dom[3]['parent'], 1
|
|
313
|
+
assert_equal dom[3]['tag'], true
|
|
314
|
+
assert_equal dom[3]['opening'], true
|
|
315
|
+
assert_equal dom[3]['value'], 'span'
|
|
316
|
+
assert_equal dom[3]['style']['background-color'], '#FFFFAA'
|
|
317
|
+
end
|
|
318
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RbpdfTest < ActiveSupport::TestCase
|
|
4
|
+
class MYPDF < RBPDF
|
|
5
|
+
def getHtmlDomArray(html)
|
|
6
|
+
super
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test "Dom Basic" do
|
|
11
|
+
pdf = MYPDF.new
|
|
12
|
+
|
|
13
|
+
# Simple Text
|
|
14
|
+
dom = pdf.getHtmlDomArray('abc')
|
|
15
|
+
assert_equal 0, dom[0]['parent'] # Root
|
|
16
|
+
assert_equal false, dom[0]['tag']
|
|
17
|
+
assert_equal({'tag'=>false, 'value'=>'abc', 'elkey'=>0, 'parent'=>0, 'block'=>false}, dom[1])
|
|
18
|
+
|
|
19
|
+
# Simple Tag
|
|
20
|
+
dom = pdf.getHtmlDomArray('<b>abc</b>')
|
|
21
|
+
assert_equal dom.length, 4
|
|
22
|
+
|
|
23
|
+
assert_equal 0, dom[0]['parent'] # Root
|
|
24
|
+
assert_equal false, dom[0]['tag']
|
|
25
|
+
assert_equal({}, dom[0]['attribute'])
|
|
26
|
+
|
|
27
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
28
|
+
assert_equal dom[1]['elkey'], 0
|
|
29
|
+
assert_equal dom[1]['tag'], true
|
|
30
|
+
assert_equal dom[1]['opening'], true
|
|
31
|
+
assert_equal dom[1]['value'], 'b'
|
|
32
|
+
assert_equal dom[1]['attribute'], {}
|
|
33
|
+
|
|
34
|
+
assert_equal({'tag' => false, 'value'=>'abc', 'elkey'=>1, 'parent'=>1, 'block'=>false}, dom[2]) # parent -> open tag key
|
|
35
|
+
|
|
36
|
+
assert_equal dom[3]['parent'], 1 # parent -> open tag key
|
|
37
|
+
assert_equal dom[3]['elkey'], 2
|
|
38
|
+
assert_equal dom[3]['tag'], true
|
|
39
|
+
assert_equal dom[3]['opening'], false
|
|
40
|
+
assert_equal dom[3]['value'], 'b'
|
|
41
|
+
|
|
42
|
+
# Error Tag (doble colse tag)
|
|
43
|
+
dom = pdf.getHtmlDomArray('</ul></div>')
|
|
44
|
+
assert_equal dom.length, 3
|
|
45
|
+
|
|
46
|
+
assert_equal 0, dom[0]['parent'] # Root
|
|
47
|
+
assert_equal false, dom[0]['tag']
|
|
48
|
+
assert_equal({}, dom[0]['attribute'])
|
|
49
|
+
|
|
50
|
+
assert_equal dom[1]['parent'], 0 # parent -> Root key
|
|
51
|
+
assert_equal dom[1]['elkey'], 0
|
|
52
|
+
assert_equal dom[1]['tag'], true
|
|
53
|
+
assert_equal dom[1]['opening'], false
|
|
54
|
+
assert_equal dom[1]['value'], 'ul'
|
|
55
|
+
|
|
56
|
+
assert_equal dom[2]['parent'], 0 # parent -> Root key
|
|
57
|
+
assert_equal dom[2]['elkey'], 1
|
|
58
|
+
assert_equal dom[2]['tag'], true
|
|
59
|
+
assert_equal dom[2]['opening'], false
|
|
60
|
+
assert_equal dom[2]['value'], 'div'
|
|
61
|
+
|
|
62
|
+
# Attribute
|
|
63
|
+
dom = pdf.getHtmlDomArray('<p style="text-align:justify">abc</p>')
|
|
64
|
+
assert_equal dom.length, 4
|
|
65
|
+
|
|
66
|
+
assert_equal 0, dom[0]['parent'] # Root
|
|
67
|
+
assert_equal false, dom[0]['tag']
|
|
68
|
+
assert_equal({}, dom[0]['attribute'])
|
|
69
|
+
|
|
70
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
71
|
+
assert_equal dom[1]['elkey'], 0
|
|
72
|
+
assert_equal dom[1]['tag'], true
|
|
73
|
+
assert_equal dom[1]['opening'], true
|
|
74
|
+
assert_equal dom[1]['value'], 'p'
|
|
75
|
+
assert_equal dom[1]['attribute'], {'style'=>'text-align: justify;'}
|
|
76
|
+
assert_equal dom[1]['attribute']['style'], 'text-align: justify;'
|
|
77
|
+
assert_equal dom[1]['align'], 'J'
|
|
78
|
+
|
|
79
|
+
# Table border
|
|
80
|
+
dom = pdf.getHtmlDomArray('<table border="1"><tr><td>abc</td></tr></table>')
|
|
81
|
+
## added marker tag (by getHtmlDomArray()) ##
|
|
82
|
+
# '<table border="1"><tr><td>abc<marker style="font-size:0"/></td></tr></table>'
|
|
83
|
+
assert_equal dom.length, 9
|
|
84
|
+
|
|
85
|
+
assert_equal dom[1]['parent'], 0 # parent -> parent tag key
|
|
86
|
+
assert_equal dom[1]['elkey'], 0
|
|
87
|
+
assert_equal dom[1]['tag'], true
|
|
88
|
+
assert_equal dom[1]['opening'], true
|
|
89
|
+
assert_equal dom[1]['value'], 'table'
|
|
90
|
+
assert_equal dom[1]['attribute']['border'], '1'
|
|
91
|
+
|
|
92
|
+
## marker tag (by getHtmlDomArray())
|
|
93
|
+
assert_equal dom[5]['parent'], 3 # parent -> parent tag key
|
|
94
|
+
assert_equal dom[5]['elkey'], 4
|
|
95
|
+
assert_equal dom[5]['tag'], true
|
|
96
|
+
assert_equal dom[5]['opening'], true
|
|
97
|
+
assert_equal dom[5]['value'], 'marker'
|
|
98
|
+
assert_equal dom[5]['attribute']['style'], 'font-size:0'
|
|
99
|
+
|
|
100
|
+
# Table td Width
|
|
101
|
+
dom = pdf.getHtmlDomArray('<table><tr><td width="10">abc</td></tr></table>')
|
|
102
|
+
## added marker tag (by getHtmlDomArray()) ##
|
|
103
|
+
# '<table><tr><td width="10">abc<marker style="font-size:0"/></td></tr></table>'
|
|
104
|
+
assert_equal dom.length, 9
|
|
105
|
+
|
|
106
|
+
assert_equal dom[3]['parent'], 2 # parent -> parent tag key
|
|
107
|
+
assert_equal dom[3]['elkey'], 2
|
|
108
|
+
assert_equal dom[3]['tag'], true
|
|
109
|
+
assert_equal dom[3]['opening'], true
|
|
110
|
+
assert_equal dom[3]['value'], 'td'
|
|
111
|
+
assert_equal dom[3]['width'], '10'
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class RbpdfFontFuncTest < ActiveSupport::TestCase
|
|
4
|
+
test "Font get_font_descent function test 1" do
|
|
5
|
+
pdf = RBPDF.new
|
|
6
|
+
fontdescent = pdf.get_font_descent('times', '', 18)
|
|
7
|
+
assert_in_delta 0.95, fontdescent, 0.01
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
test "Font get_font_descent function test 2" do
|
|
11
|
+
pdf = RBPDF.new
|
|
12
|
+
fontdescent = pdf.get_font_descent('freesans', '', 18)
|
|
13
|
+
assert_in_delta 1.91, fontdescent, 0.01
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "Font get_font_ascent function test 1" do
|
|
17
|
+
pdf = RBPDF.new
|
|
18
|
+
fontascent = pdf.get_font_ascent('times', '', 18)
|
|
19
|
+
assert_in_delta 5.39, fontascent, 0.01
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test "Font get_font_ascent function test 2" do
|
|
23
|
+
pdf = RBPDF.new
|
|
24
|
+
fontascent = pdf.get_font_ascent('freesans', '', 18)
|
|
25
|
+
assert_in_delta 6.35, fontascent, 0.01
|
|
26
|
+
end
|
|
27
|
+
end
|