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.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +35 -0
  3. data/Gemfile +4 -0
  4. data/README.md +68 -0
  5. data/Rakefile +2 -0
  6. data/lib/core/rmagick.rb +85 -0
  7. data/lib/fonts/README.z +2 -0
  8. data/lib/fonts/arialunicid0_cw.rb +1738 -0
  9. data/lib/fonts/cid0cs.rb +21 -0
  10. data/lib/fonts/cid0ct.rb +21 -0
  11. data/lib/fonts/cid0jp.rb +21 -0
  12. data/lib/fonts/cid0kr.rb +21 -0
  13. data/lib/fonts/courier.rb +37 -0
  14. data/lib/fonts/dejavu-fonts-ttf-2.33/AUTHORS +53 -0
  15. data/lib/fonts/dejavu-fonts-ttf-2.33/BUGS +3 -0
  16. data/lib/fonts/dejavu-fonts-ttf-2.33/LICENSE +99 -0
  17. data/lib/fonts/dejavu-fonts-ttf-2.33/NEWS +1315 -0
  18. data/lib/fonts/dejavu-fonts-ttf-2.33/README +59 -0
  19. data/lib/fonts/dejavusans.ctg.z +0 -0
  20. data/lib/fonts/dejavusans.rb +338 -0
  21. data/lib/fonts/dejavusans.z +0 -0
  22. data/lib/fonts/dejavusansb.ctg.z +0 -0
  23. data/lib/fonts/dejavusansb.rb +330 -0
  24. data/lib/fonts/dejavusansb.z +0 -0
  25. data/lib/fonts/dejavusansbi.ctg.z +0 -0
  26. data/lib/fonts/dejavusansbi.rb +297 -0
  27. data/lib/fonts/dejavusansbi.z +0 -0
  28. data/lib/fonts/dejavusansi.ctg.z +0 -0
  29. data/lib/fonts/dejavusansi.rb +305 -0
  30. data/lib/fonts/dejavusansi.z +0 -0
  31. data/lib/fonts/freefont-20080912/AUTHORS +191 -0
  32. data/lib/fonts/freefont-20080912/COPYING +341 -0
  33. data/lib/fonts/freefont-20080912/CREDITS +506 -0
  34. data/lib/fonts/freefont-20080912/ChangeLog +3320 -0
  35. data/lib/fonts/freefont-20080912/INSTALL +81 -0
  36. data/lib/fonts/freefont-20080912/README +108 -0
  37. data/lib/fonts/freemono.ctg.z +0 -0
  38. data/lib/fonts/freemono.rb +203 -0
  39. data/lib/fonts/freemono.z +0 -0
  40. data/lib/fonts/freemonob.ctg.z +0 -0
  41. data/lib/fonts/freemonob.rb +120 -0
  42. data/lib/fonts/freemonob.z +0 -0
  43. data/lib/fonts/freemonobi.ctg.z +0 -0
  44. data/lib/fonts/freemonobi.rb +84 -0
  45. data/lib/fonts/freemonobi.z +0 -0
  46. data/lib/fonts/freemonoi.ctg.z +0 -0
  47. data/lib/fonts/freemonoi.rb +136 -0
  48. data/lib/fonts/freemonoi.z +0 -0
  49. data/lib/fonts/freesans.ctg.z +0 -0
  50. data/lib/fonts/freesans.rb +196 -0
  51. data/lib/fonts/freesans.z +0 -0
  52. data/lib/fonts/freesansb.ctg.z +0 -0
  53. data/lib/fonts/freesansb.rb +136 -0
  54. data/lib/fonts/freesansb.z +0 -0
  55. data/lib/fonts/freesansbi.ctg.z +0 -0
  56. data/lib/fonts/freesansbi.rb +108 -0
  57. data/lib/fonts/freesansbi.z +0 -0
  58. data/lib/fonts/freesansi.ctg.z +0 -0
  59. data/lib/fonts/freesansi.rb +136 -0
  60. data/lib/fonts/freesansi.z +0 -0
  61. data/lib/fonts/freeserif.ctg.z +0 -0
  62. data/lib/fonts/freeserif.rb +285 -0
  63. data/lib/fonts/freeserif.z +0 -0
  64. data/lib/fonts/freeserifb.ctg.z +0 -0
  65. data/lib/fonts/freeserifb.rb +164 -0
  66. data/lib/fonts/freeserifb.z +0 -0
  67. data/lib/fonts/freeserifbi.ctg.z +0 -0
  68. data/lib/fonts/freeserifbi.rb +130 -0
  69. data/lib/fonts/freeserifbi.z +0 -0
  70. data/lib/fonts/freeserifi.ctg.z +0 -0
  71. data/lib/fonts/freeserifi.rb +151 -0
  72. data/lib/fonts/freeserifi.z +0 -0
  73. data/lib/fonts/helvetica.rb +34 -0
  74. data/lib/fonts/helveticab.rb +34 -0
  75. data/lib/fonts/helveticabi.rb +34 -0
  76. data/lib/fonts/helveticai.rb +34 -0
  77. data/lib/fonts/hysmyeongjostdmedium.rb +31 -0
  78. data/lib/fonts/kozgopromedium.rb +47 -0
  79. data/lib/fonts/kozminproregular.rb +46 -0
  80. data/lib/fonts/msungstdlight.rb +23 -0
  81. data/lib/fonts/sjis.rb +834 -0
  82. data/lib/fonts/stsongstdlight.rb +23 -0
  83. data/lib/fonts/symbol.rb +33 -0
  84. data/lib/fonts/times.rb +34 -0
  85. data/lib/fonts/timesb.rb +34 -0
  86. data/lib/fonts/timesbi.rb +34 -0
  87. data/lib/fonts/timesi.rb +34 -0
  88. data/lib/fonts/uni2cid_ac15.rb +23613 -0
  89. data/lib/fonts/uni2cid_ag15.rb +30222 -0
  90. data/lib/fonts/uni2cid_aj16.rb +15705 -0
  91. data/lib/fonts/uni2cid_ak12.rb +17530 -0
  92. data/lib/fonts/zapfdingbats.rb +33 -0
  93. data/lib/htmlcolors.rb +207 -0
  94. data/lib/rbpdf.rb +14472 -0
  95. data/lib/rbpdf/version.rb +3 -0
  96. data/lib/unicode_data.rb +18315 -0
  97. data/logo_example.png +0 -0
  98. data/rbpdf.gemspec +35 -0
  99. data/test/rbpdf_bidi_test.rb +65 -0
  100. data/test/rbpdf_bookmark_test.rb +57 -0
  101. data/test/rbpdf_cell_test.rb +232 -0
  102. data/test/rbpdf_content_test.rb +117 -0
  103. data/test/rbpdf_css_test.rb +318 -0
  104. data/test/rbpdf_dom_test.rb +113 -0
  105. data/test/rbpdf_font_func_test.rb +27 -0
  106. data/test/rbpdf_font_style_test.rb +34 -0
  107. data/test/rbpdf_font_test.rb +181 -0
  108. data/test/rbpdf_format_test.rb +27 -0
  109. data/test/rbpdf_func_test.rb +126 -0
  110. data/test/rbpdf_html_test.rb +164 -0
  111. data/test/rbpdf_htmlcell_test.rb +64 -0
  112. data/test/rbpdf_image_test.rb +108 -0
  113. data/test/rbpdf_test.rb +245 -0
  114. data/test/rbpdf_transaction_test.rb +199 -0
  115. data/test/rbpdf_viewerpreferences_test.rb +37 -0
  116. data/test/rbpdf_write_test.rb +173 -0
  117. data/test/test_helper.rb +1 -0
  118. data/test_unicode.rbpdf +115 -0
  119. data/utf8test.txt +120 -0
  120. metadata +216 -0
data/logo_example.png ADDED
Binary file
data/rbpdf.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rbpdf/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rbpdf"
8
+ spec.version = Rbpdf::VERSION
9
+ spec.authors = ["NAITOH Jun"]
10
+ spec.email = ["naitoh@gmail.com"]
11
+ spec.summary = %q{RBPDF via TCPDF.}
12
+ spec.description = %q{A template plugin allowing the inclusion of ERB-enabled RBPDF template files.}
13
+ spec.homepage = ""
14
+ spec.license = "LGPL 2.1 or later"
15
+ spec.files = Dir.glob("lib/rbpdf/version.rb") +
16
+ Dir.glob("lib/*.rb") +
17
+ Dir.glob("lib/core/rmagick.rb") +
18
+ Dir.glob("lib/fonts/*.{rb,z}") +
19
+ Dir.glob("lib/fonts/freefont-*/*") +
20
+ Dir.glob("lib/fonts/dejavu-fonts-ttf-*/{AUTHORS,BUGS,LICENSE,NEWS,README}") +
21
+ Dir.glob("test/*") +
22
+ ["Rakefile", "rbpdf.gemspec", "Gemfile",
23
+ "CHANGELOG", "test_unicode.rbpdf", "README.md",
24
+ "utf8test.txt", "logo_example.png" ]
25
+ spec.rdoc_options += [ '--exclude', 'lib/fonts/',
26
+ '--exclude', 'lib/htmlcolors.rb',
27
+ '--exclude', 'lib/unicode_data.rb' ]
28
+
29
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
30
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_development_dependency "bundler", "~> 1.6"
34
+ spec.add_development_dependency "rake"
35
+ end
@@ -0,0 +1,65 @@
1
+ # coding: ASCII-8BIT
2
+ require 'test_helper'
3
+
4
+ class RbpdfTest < ActiveSupport::TestCase
5
+ class MYPDF < RBPDF
6
+ def UTF8StringToArray(str)
7
+ super
8
+ end
9
+ def utf8Bidi(ta, str='', forcertl=false)
10
+ super
11
+ end
12
+ end
13
+
14
+ test "Bidi" do
15
+ pdf = MYPDF.new
16
+
17
+ # UCS4 charactor -> UTF-8 charactor
18
+ utf8_chr = pdf.unichr(0x61)
19
+ assert_equal "a", utf8_chr
20
+ utf8_chr = pdf.unichr(0x5e2)
21
+ assert_equal "\xd7\xa2", utf8_chr
22
+
23
+ # UTF-8 string -> array of UCS4 charactor
24
+ ary_ucs4 = pdf.UTF8StringToArray("abc")
25
+ assert_equal [0x61, 0x62, 0x63], ary_ucs4
26
+ ary_ucs4 = pdf.UTF8StringToArray("\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa")
27
+ assert_equal [0x5e2, 0x5d1, 0x5e8, 0x5d9, 0x5ea], ary_ucs4
28
+
29
+ # Bidirectional Algorithm
30
+ ascii_str = "abc"
31
+ utf8_str_1 = "\xd7\xa2"
32
+ utf8_str_2 = "\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa"
33
+
34
+ ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str))
35
+ assert_equal [0x61, 0x62, 0x63], ary_ucs4
36
+ ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str), ascii_str, 'R')
37
+ assert_equal [0x61, 0x62, 0x63], ary_ucs4
38
+
39
+ ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_1))
40
+ assert_equal [0x5e2], ary_ucs4
41
+ ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_1), utf8_str_1, 'R')
42
+ assert_equal [0x5e2], ary_ucs4
43
+
44
+ ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_2))
45
+ assert_equal [0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_ucs4
46
+ ary_ucs4 = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_2), utf8_str_2, 'R')
47
+ assert_equal [0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_ucs4 ##
48
+
49
+ ary_str = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str + utf8_str_2), ascii_str + utf8_str_2, 'L')
50
+ assert_equal [0x61, 0x62, 0x63, 0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_str
51
+ ary_str = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str + utf8_str_2)) # LTR
52
+ assert_equal [0x61, 0x62, 0x63, 0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_str
53
+ ary_str = pdf.utf8Bidi(pdf.UTF8StringToArray(ascii_str + utf8_str_2), ascii_str + utf8_str_2, 'R')
54
+
55
+ assert_equal [0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2, 0x61, 0x62, 0x63], ary_str
56
+
57
+ ary_str = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_2 + ascii_str), utf8_str_2 + ascii_str, 'L')
58
+ assert_equal [0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2, 0x61, 0x62, 0x63], ary_str
59
+ ary_str = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_2 + ascii_str)) # RTL
60
+ assert_equal [0x61, 0x62, 0x63, 0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_str
61
+ ary_str = pdf.utf8Bidi(pdf.UTF8StringToArray(utf8_str_2 + ascii_str), utf8_str_2 + ascii_str, 'R')
62
+ assert_equal [0x61, 0x62, 0x63, 0x5ea, 0x5d9, 0x5e8, 0x5d1, 0x5e2], ary_str
63
+ end
64
+
65
+ end
@@ -0,0 +1,57 @@
1
+ require 'test_helper'
2
+
3
+ class RbpdfTest < ActiveSupport::TestCase
4
+
5
+ test "bookmark test" do
6
+ pdf = RBPDF.new
7
+ pdf.add_page()
8
+
9
+ book = pdf.bookmark('Chapter 1', 0, 0)
10
+ assert_equal book, [{:l=>0, :y=>0, :t=>"Chapter 1", :p=>1}]
11
+
12
+ book = pdf.bookmark('Paragraph 1.1', 1, 0)
13
+ assert_equal book, [{:y=>0, :l=>0, :t=>"Chapter 1", :p=>1},
14
+ {:y=>0, :l=>1, :t=>"Paragraph 1.1", :p=>1}]
15
+
16
+ pdf.add_page()
17
+
18
+ book = pdf.bookmark('Paragraph 1.2', 1, 0)
19
+ assert_equal book, [{:y=>0, :l=>0, :t=>"Chapter 1", :p=>1},
20
+ {:y=>0, :l=>1, :t=>"Paragraph 1.1", :p=>1},
21
+ {:y=>0, :l=>1, :t=>"Paragraph 1.2", :p=>2}]
22
+
23
+ book = pdf.bookmark('Sub-Paragraph 1.2.1', 2, 10)
24
+ assert_equal book, [{:y=>0, :l=>0, :t=>"Chapter 1", :p=>1},
25
+ {:y=>0, :l=>1, :t=>"Paragraph 1.1", :p=>1},
26
+ {:y=>0, :l=>1, :t=>"Paragraph 1.2", :p=>2},
27
+ {:y=>10, :l=>2, :t=>"Sub-Paragraph 1.2.1", :p=>2}]
28
+
29
+ pdf.add_page()
30
+
31
+ book = pdf.bookmark('Paragraph 1.3', 1, 0)
32
+ assert_equal book, [{:y=>0, :l=>0, :t=>"Chapter 1", :p=>1},
33
+ {:y=>0, :l=>1, :t=>"Paragraph 1.1", :p=>1},
34
+ {:y=>0, :l=>1, :t=>"Paragraph 1.2", :p=>2},
35
+ {:y=>10, :l=>2, :t=>"Sub-Paragraph 1.2.1", :p=>2},
36
+ {:y=>0, :l=>1, :t=>"Paragraph 1.3", :p=>3}]
37
+
38
+ book = pdf.bookmark('Sub-Paragraph 1.1.1', 2, 0, 2)
39
+ assert_equal book, [{:y=>0, :l=>0, :t=>"Chapter 1", :p=>1},
40
+ {:y=>0, :l=>1, :t=>"Paragraph 1.1", :p=>1},
41
+ {:y=>0, :l=>1, :t=>"Paragraph 1.2", :p=>2},
42
+ {:y=>10, :l=>2, :t=>"Sub-Paragraph 1.2.1", :p=>2},
43
+ {:y=>0, :l=>1, :t=>"Paragraph 1.3", :p=>3},
44
+ {:y=>0, :l=>2, :t=>"Sub-Paragraph 1.1.1", :p=>2}]
45
+
46
+ pdf.add_page()
47
+
48
+ book = pdf.bookmark('Paragraph 1.4', 1, 20)
49
+ assert_equal book, [{:y=>0, :l=>0, :t=>"Chapter 1", :p=>1},
50
+ {:y=>0, :l=>1, :t=>"Paragraph 1.1", :p=>1},
51
+ {:y=>0, :l=>1, :t=>"Paragraph 1.2", :p=>2},
52
+ {:y=>10, :l=>2, :t=>"Sub-Paragraph 1.2.1", :p=>2},
53
+ {:y=>0, :l=>1, :t=>"Paragraph 1.3", :p=>3},
54
+ {:y=>0, :l=>2, :t=>"Sub-Paragraph 1.1.1", :p=>2},
55
+ {:y=>20, :l=>1, :t=>"Paragraph 1.4", :p=>4}]
56
+ end
57
+ end
@@ -0,0 +1,232 @@
1
+ require 'test_helper'
2
+
3
+ class RbpdfTest < ActiveSupport::TestCase
4
+
5
+ class MYPDF < RBPDF
6
+ def getCellCode(w, h=0, txt='', border=0, ln=0, align='', fill=0, link=nil, stretch=0, ignore_min_height=false, calign='T', valign='M')
7
+ super
8
+ end
9
+ end
10
+
11
+ test "getCellCode" do
12
+ pdf = MYPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
13
+ pdf.add_page()
14
+ code = pdf.getCellCode(10)
15
+ assert_equal code, "0.57 w 0 J 0 j [] 0 d 0 G 0 g\n"
16
+ # 0.57 w 0 J 0 j [] 0 d 0 G 0 rg # getCellCode
17
+ end
18
+
19
+ test "getCellCode link url align test" do
20
+ pdf = MYPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
21
+ pdf.add_page()
22
+ content = []
23
+ contents = pdf.getCellCode(10, 10, 'abc', 'LTRB', 0, '', 0, 'http://example.com')
24
+ contents.each_line {|line| content.push line.chomp }
25
+
26
+ assert_equal content.length, 2
27
+ assert_equal content[1], "28.35 813.83 m 28.35 784.91 l S 28.07 813.54 m 56.98 813.54 l S 56.70 813.83 m 56.70 784.91 l S 28.07 785.19 m 56.98 785.19 l S BT 31.19 795.17 Td 0 Tr 0.00 w [(abc)] TJ ET"
28
+ # 28.35 813.82 m 28.35 784.91 l S
29
+ # 28.07 813.54 m 56.98 813.54 l S
30
+ # 56.70 813.82 m 56.70 784.91 l S
31
+ # 28.07 785.19 m 56.98 785.19 l S
32
+ # BT
33
+ # 31.19 795.17 Td
34
+ # 0 Tr 0.00 w
35
+ # [(abc)] TJ
36
+ # ET
37
+ end
38
+
39
+ test "getCellCode link page test" do
40
+ pdf = MYPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
41
+ pdf.add_page()
42
+ content = []
43
+ contents = pdf.getCellCode(10, 10, 'abc', 0, 0, '', 0, 1)
44
+ contents.each_line {|line| content.push line.chomp }
45
+
46
+ assert_equal content.length, 2
47
+ assert_equal content[1], "BT 31.19 795.17 Td 0 Tr 0.00 w [(abc)] TJ ET"
48
+ # BT
49
+ # 31.19 795.17 Td
50
+ # 0 Tr 0.00 w
51
+ # [(abc)] TJ
52
+ # ET
53
+ end
54
+
55
+ test "getStringHeight Basic test" do
56
+ pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
57
+ pdf.add_page
58
+
59
+ txt = 'abcdefg'
60
+
61
+ w = 50
62
+ y1 = pdf.get_y
63
+ pdf.multi_cell(w, 0, txt)
64
+ pno = pdf.get_page
65
+ assert_equal pno, 1
66
+ y2 = pdf.get_y
67
+ h1 = y2 - y1
68
+
69
+ h2 = pdf.getStringHeight(w, txt)
70
+ assert_in_delta h1, h2, 0.01
71
+
72
+ line = pdf.get_num_lines(txt, w)
73
+ assert_equal line, 1
74
+
75
+ w = 20
76
+ y1 = pdf.get_y
77
+ pdf.multi_cell(w, 0, txt)
78
+ pno = pdf.get_page
79
+ assert_equal pno, 1
80
+ y2 = pdf.get_y
81
+ h1 = y2 - y1
82
+
83
+ h2 = pdf.getStringHeight(w, txt)
84
+ assert_in_delta h1, h2, 0.01
85
+
86
+ line = pdf.get_num_lines(txt, w)
87
+ assert_equal line, 1
88
+ end
89
+
90
+ test "getStringHeight Line Break test" do
91
+ pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
92
+ pdf.add_page
93
+
94
+ txt = 'abcdefg'
95
+
96
+ w = 10
97
+ y1 = pdf.get_y
98
+ pdf.multi_cell(w, 0, txt)
99
+ pno = pdf.get_page
100
+ assert_equal pno, 1
101
+ y2 = pdf.get_y
102
+ h1 = y2 - y1
103
+
104
+ h2 = pdf.getStringHeight(w, txt)
105
+ assert_in_delta h1, h2, 0.01
106
+
107
+ line = pdf.get_num_lines(txt, w)
108
+ assert_equal line, 3
109
+
110
+
111
+ w = 5
112
+ y1 = pdf.get_y
113
+ pdf.multi_cell(w, 0, txt)
114
+ pno = pdf.get_page
115
+ assert_equal pno, 1
116
+ y2 = pdf.get_y
117
+ h1 = y2 - y1
118
+
119
+ h2 = pdf.getStringHeight(w, txt)
120
+ assert_in_delta h1, h2, 0.01
121
+
122
+ line = pdf.get_num_lines(txt, w)
123
+ assert_equal line, 7
124
+ end
125
+
126
+ test "getStringHeight Minimum Width test 1" do
127
+ pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
128
+ pdf.add_page
129
+
130
+ w = pdf.get_string_width('OO')
131
+
132
+ txt = "Export to PDF: align is Good."
133
+
134
+ y1 = pdf.get_y
135
+ pdf.multi_cell(w, 0, txt)
136
+ pno = pdf.get_page
137
+ assert_equal pno, 1
138
+ y2 = pdf.get_y
139
+ h1 = y2 - y1
140
+
141
+ h2 = pdf.getStringHeight(w, txt)
142
+ assert_in_delta h1, h2, 0.01
143
+
144
+ line = pdf.get_num_lines(txt, w)
145
+ assert_equal line, 16
146
+ end
147
+
148
+ test "getStringHeight Minimum Width test 2" do
149
+ pdf = RBPDF.new('L', 'mm', 'A4', true, "UTF-8", true)
150
+ pdf.set_font('kozminproregular', '', 8)
151
+ pdf.add_page
152
+
153
+ margins = pdf.get_margins
154
+ w = pdf.get_string_width('20') + margins['cell'] * 2
155
+
156
+ txt = "20"
157
+
158
+ y1 = pdf.get_y
159
+ pdf.multi_cell(w, 0, txt)
160
+ pno = pdf.get_page
161
+ assert_equal pno, 1
162
+ y2 = pdf.get_y
163
+ h1 = y2 - y1
164
+
165
+ h2 = pdf.getStringHeight(w, txt)
166
+ assert_in_delta h1, h2, 0.01
167
+
168
+ line = pdf.get_num_lines(txt, w)
169
+ assert_equal line, 2
170
+ end
171
+
172
+ test "getStringHeight Minimum Bidi test 1" do
173
+ pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
174
+ pdf.add_page
175
+
176
+ w = pdf.get_string_width('OO')
177
+
178
+ txt = "\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa"
179
+ y1 = pdf.get_y
180
+ pdf.multi_cell(w, 0, txt)
181
+ pno = pdf.get_page
182
+ assert_equal pno, 1
183
+ y2 = pdf.get_y
184
+ h1 = y2 - y1
185
+ h2 = pdf.getStringHeight(w, txt)
186
+ assert_in_delta h1, h2, 0.01
187
+
188
+ line = pdf.get_num_lines(txt, w)
189
+ assert_equal line, 5
190
+
191
+ 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"
192
+
193
+ y1 = pdf.get_y
194
+ pdf.multi_cell(w, 0, txt)
195
+ pno = pdf.get_page
196
+ assert_equal pno, 1
197
+ y2 = pdf.get_y
198
+ h1 = y2 - y1
199
+
200
+ h2 = pdf.getStringHeight(w, txt)
201
+ assert_in_delta h1, h2, 0.01
202
+
203
+ line = pdf.get_num_lines(txt, w)
204
+ assert_equal line, 41
205
+ end
206
+
207
+ test "getStringHeight Minimum Bidi test 2" do
208
+ pdf = RBPDF.new('P', 'mm', 'A4', true, "UTF-8", true)
209
+ pdf.set_font('freesans', '')
210
+ pdf.set_rtl(true)
211
+ pdf.set_temp_rtl('R')
212
+ pdf.add_page
213
+
214
+ margins = pdf.get_margins
215
+ w = pdf.get_string_width('OO') + margins['cell'] * 2
216
+
217
+ txt = "\xd7\x9c 000"
218
+
219
+ y1 = pdf.get_y
220
+ pdf.multi_cell(w, 0, txt)
221
+ pno = pdf.get_page
222
+ assert_equal pno, 1
223
+ y2 = pdf.get_y
224
+ h1 = y2 - y1
225
+
226
+ h2 = pdf.getStringHeight(w, txt)
227
+ assert_in_delta h1, h2, 0.01
228
+
229
+ line = pdf.get_num_lines(txt, w)
230
+ assert_equal line, 3
231
+ end
232
+ end
@@ -0,0 +1,117 @@
1
+ require 'test_helper'
2
+
3
+ class RbpdfPageTest < ActiveSupport::TestCase
4
+ class MYPDF < RBPDF
5
+ def getPageBuffer(page)
6
+ super
7
+ end
8
+ end
9
+
10
+ test "Basic Page content test" do
11
+ pdf = MYPDF.new
12
+
13
+ page = pdf.get_page
14
+ assert_equal 0, page
15
+
16
+ width = pdf.get_page_width
17
+
18
+ pdf.set_print_header(false)
19
+ pdf.add_page
20
+ page = pdf.get_page
21
+ assert_equal 1, page
22
+
23
+ content = []
24
+ contents = pdf.getPageBuffer(page)
25
+ contents.each_line {|line| content.push line.chomp }
26
+
27
+ assert_equal content.length, 4
28
+ assert_equal content[0], "0.57 w 0 J 0 j [] 0 d 0 G 0 g"
29
+ assert_equal content[1], "BT /F1 12.00 Tf ET "
30
+ assert_equal content[2], "0.57 w 0 J 0 j [] 0 d 0 G 0 g"
31
+ assert_equal content[3], "BT /F1 12.00 Tf ET "
32
+
33
+ ##################################
34
+ # 0.57 w 0 J 0 j [] 0 d 0 G 0 g # add_page,start_page,setGraphicVars(set_fill_color)
35
+ # BT /F1 12.00 Tf ET #
36
+ # 0.57 w 0 J 0 j [] 0 d 0 G 0 g #
37
+ # BT /F1 12.00 Tf ET #
38
+ ##################################
39
+ # 0.57 w # @linestyle_width : Line width.
40
+ # 0 J # @linestyle_cap : Type of cap to put on the line. [butt:0, round:1, square:2]
41
+ # 0 j # @linestyle_join : Type of join. [miter:0, round:1, bevel:2]
42
+ # [] 0 d # @linestyle_dash : Line dash pattern. (see set_line_style)
43
+ # 0 G # @draw_color : Drawing color. (see set_draw_color)
44
+ # 0 g # Set colors
45
+ ########################
46
+ # BT # Begin Text.
47
+ # /F1 12.00 Tf # 12.00 point size font.
48
+ # ET # End Text.
49
+ ########################
50
+
51
+ pdf.set_font('freesans', 'BI', 18)
52
+ content = []
53
+ contents = pdf.getPageBuffer(page)
54
+ contents.each_line {|line| content.push line.chomp }
55
+
56
+ assert_equal content.length, 5
57
+ assert_equal content[4], "BT /F2 18.00 Tf ET "
58
+
59
+ ########################
60
+ # BT # Begin Text.
61
+ # /F2 18.00 Tf # 18.00 point size font.
62
+ # ET # End Text.
63
+ ########################
64
+ pdf.set_font('freesans', 'B', 20)
65
+ content = []
66
+ contents = pdf.getPageBuffer(page)
67
+ contents.each_line {|line| content.push line.chomp }
68
+
69
+ assert_equal content.length, 6
70
+ assert_equal content[5], "BT /F3 20.00 Tf ET "
71
+
72
+ pdf.cell(0, 10, 'Chapter', 0, 1, 'L')
73
+ content = []
74
+ contents = pdf.getPageBuffer(page)
75
+ contents.each_line {|line| content.push line.chomp }
76
+
77
+ assert_equal content.length, 8
78
+ assert_equal content[6], "0.57 w 0 J 0 j [] 0 d 0 G 0 g"
79
+
80
+ assert_equal content[7], "BT 31.19 792.37 Td 0 Tr 0.00 w [(\x00C\x00h\x00a\x00p\x00t\x00e\x00r)] TJ ET"
81
+
82
+ #################################################
83
+ # 0.57 w 0 J 0 j [] 0 d 0 G 0 g # getCellCode
84
+ # BT
85
+ # 31.19 792.37 Td # Set text offset.
86
+ # 0 Tr 0.00 w # Set stroke outline and clipping mode
87
+ # [(\x00C\x00h\x00a\x00p\x00t\x00e\x00r)] TJ # Write array of characters.
88
+ # ET
89
+ #################################################
90
+ end
91
+
92
+ test "circle content" do
93
+ pdf = MYPDF.new
94
+
95
+ pdf.set_print_header(false)
96
+ pdf.add_page
97
+ pdf.circle(100, 200, 50)
98
+ content = []
99
+ contents = pdf.getPageBuffer(1)
100
+ contents.each_line {|line| content.push line.chomp }
101
+
102
+ assert_equal content.length, 15
103
+ assert_equal content[4], "425.20 274.96 m" # start point : x0, y0
104
+
105
+ assert_equal content[5], '425.20 308.27 413.45 340.54 392.04 366.06 c' # 1/9 circle : x1, y1(control point 1), x2, y2(control point 2), x3, y3(end point and next start point)
106
+ assert_equal content[6], '370.62 391.58 340.88 408.76 308.08 414.54 c' # 2/9 circle
107
+ assert_equal content[7], '275.27 420.32 241.45 414.36 212.60 397.70 c' # 3/9 circle
108
+ assert_equal content[8], '183.75 381.05 161.67 354.74 150.28 323.44 c' # 4/9 circle
109
+ assert_equal content[9], '138.89 292.13 138.89 257.79 150.28 226.49 c' # 5/9 circle
110
+ assert_equal content[10], '161.67 195.18 183.75 168.87 212.60 152.22 c' # 6/9 circle
111
+ assert_equal content[11], '241.45 135.56 275.27 129.60 308.08 135.38 c' # 7/9 circle
112
+ assert_equal content[12], '340.88 141.17 370.62 158.34 392.04 183.86 c' # 8/9 circle
113
+ assert_equal content[13], '413.45 209.38 425.20 241.65 425.20 274.96 c' # 9/9 circle
114
+ assert_equal content[14], 'S'
115
+
116
+ end
117
+ end