thinreports 0.7.6 → 0.7.7

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 (88) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +11 -1
  4. data/Gemfile +2 -9
  5. data/MIT-LICENSE +1 -1
  6. data/README.rdoc +25 -26
  7. data/lib/thinreports/core/format/base.rb +0 -5
  8. data/lib/thinreports/core/format/builder.rb +5 -5
  9. data/lib/thinreports/core/page.rb +5 -3
  10. data/lib/thinreports/core/shape.rb +2 -0
  11. data/lib/thinreports/core/shape/basic/internal.rb +5 -1
  12. data/lib/thinreports/core/shape/list/configuration.rb +9 -3
  13. data/lib/thinreports/core/shape/list/manager.rb +11 -4
  14. data/lib/thinreports/core/shape/list/page.rb +3 -1
  15. data/lib/thinreports/core/shape/list/page_state.rb +4 -1
  16. data/lib/thinreports/core/shape/manager/internal.rb +1 -1
  17. data/lib/thinreports/core/shape/page_number.rb +15 -0
  18. data/lib/thinreports/core/shape/page_number/format.rb +25 -0
  19. data/lib/thinreports/core/shape/page_number/interface.rb +27 -0
  20. data/lib/thinreports/core/shape/page_number/internal.rb +57 -0
  21. data/lib/thinreports/core/shape/style/text.rb +6 -2
  22. data/lib/thinreports/core/shape/text_block/format.rb +1 -0
  23. data/lib/thinreports/generator/pdf.rb +1 -1
  24. data/lib/thinreports/generator/pdf/document/draw_shape.rb +14 -4
  25. data/lib/thinreports/generator/pdf/document/graphics/attributes.rb +9 -0
  26. data/lib/thinreports/generator/pdf/document/graphics/text.rb +4 -1
  27. data/lib/thinreports/generator/pdf/document/page.rb +18 -3
  28. data/lib/thinreports/generator/pdf/drawer/base.rb +3 -8
  29. data/lib/thinreports/generator/pdf/drawer/list.rb +31 -12
  30. data/lib/thinreports/generator/pdf/drawer/list_section.rb +5 -5
  31. data/lib/thinreports/generator/pdf/drawer/page.rb +22 -10
  32. data/lib/thinreports/generator/pdf/prawn_ext.rb +18 -1
  33. data/lib/thinreports/layout/base.rb +4 -2
  34. data/lib/thinreports/layout/format.rb +1 -5
  35. data/lib/thinreports/report/base.rb +36 -6
  36. data/lib/thinreports/report/internal.rb +7 -5
  37. data/lib/thinreports/version.rb +1 -1
  38. data/tasks/doc.rake +0 -1
  39. data/test/case/character_spacing/character_spacing.rb +4 -3
  40. data/test/case/dynamic_image/dynamic_image.rb +34 -34
  41. data/test/case/dynamic_style/dynamic_style.rb +141 -141
  42. data/test/case/eudc/eudc.rb +16 -16
  43. data/test/case/helper.rb +39 -20
  44. data/test/case/hidden_shapes/hidden_shapes.rb +4 -8
  45. data/test/case/list_events/list_events.rb +26 -26
  46. data/test/case/list_manual_generation/list_manual_generation.rb +16 -16
  47. data/test/case/list_page_number/list_page_number.rb +17 -0
  48. data/test/case/list_page_number/list_page_number.tlf +1 -0
  49. data/test/case/page_number/page_number.rb +33 -0
  50. data/test/case/page_number/page_number.tlf +1 -0
  51. data/test/case/password_setting/password_setting.rb +10 -0
  52. data/test/case/password_setting/password_setting.tlf +1 -0
  53. data/test/case/single_line_tblock/single_line_tblock.rb +10 -12
  54. data/test/case/tblock_overflow/tblock_overflow.rb +16 -16
  55. data/test/case/tblock_styles/tblock_styles.rb +24 -24
  56. data/test/case/text_align/text_align.rb +5 -6
  57. data/test/case/typeB_page_size/B4_ISO.tlf +1 -0
  58. data/test/case/typeB_page_size/B4_JIS.tlf +1 -0
  59. data/test/case/typeB_page_size/typeB_page_size.rb +17 -0
  60. data/test/case/word_wrap/word_wrap.rb +26 -0
  61. data/test/case/word_wrap/word_wrap.tlf +1 -0
  62. data/test/unit/core/format/test_builder.rb +1 -2
  63. data/test/unit/core/shape/basic/test_internal.rb +9 -1
  64. data/test/unit/core/shape/list/test_configuration.rb +6 -1
  65. data/test/unit/core/shape/list/test_manager.rb +10 -0
  66. data/test/unit/core/shape/list/test_page_state.rb +1 -1
  67. data/test/unit/core/shape/page_number/test_format.rb +73 -0
  68. data/test/unit/core/shape/page_number/test_interface.rb +30 -0
  69. data/test/unit/core/shape/page_number/test_internal.rb +81 -0
  70. data/test/unit/core/shape/styles/test_text.rb +12 -1
  71. data/test/unit/core/shape/text_block/formatter/test_datetime.rb +19 -17
  72. data/test/unit/core/shape/text_block/test_format.rb +5 -0
  73. data/test/unit/core/test_events.rb +5 -3
  74. data/test/unit/core/test_shape.rb +5 -1
  75. data/test/unit/generator/pdf/document/graphics/test_attributes.rb +6 -0
  76. data/test/unit/generator/pdf/document/test_draw_shape.rb +6 -0
  77. data/test/unit/generator/pdf/document/test_page.rb +29 -3
  78. data/test/unit/generator/test_pdf.rb +1 -10
  79. data/test/unit/helper.rb +33 -11
  80. data/test/unit/layout/test_base.rb +1 -1
  81. data/test/unit/report/test_base.rb +47 -0
  82. data/test/unit/report/test_internal.rb +22 -0
  83. data/test/unit/tmp/.gitkeep +0 -0
  84. data/thinreports.gemspec +14 -13
  85. metadata +89 -53
  86. data/.yardopts +0 -1
  87. data/test/case/list_header_inheriting/list_header_inheriting.rb +0 -17
  88. data/test/case/list_header_inheriting/list_header_inheriting.tlf +0 -1
@@ -68,17 +68,19 @@ module ThinReports
68
68
  @finalized
69
69
  end
70
70
 
71
- def load_layout(layout)
72
- return @default_layout if layout.nil?
71
+ def load_layout(id_or_filename)
72
+ return @default_layout if id_or_filename.nil?
73
73
 
74
- case layout
74
+ layout = case id_or_filename
75
75
  when Symbol
76
- layout_registry[layout]
76
+ layout_registry[id_or_filename]
77
77
  when String
78
- prepare_layout(layout)
78
+ prepare_layout(id_or_filename)
79
79
  else
80
80
  raise ArgumentError, 'Invalid argument for layout.'
81
81
  end
82
+ @default_layout = layout unless @default_layout
83
+ layout
82
84
  end
83
85
 
84
86
  private
@@ -2,5 +2,5 @@
2
2
 
3
3
  module ThinReports
4
4
  # The current version.
5
- VERSION = '0.7.6'
5
+ VERSION = '0.7.7'
6
6
  end
@@ -5,7 +5,6 @@ require 'yard'
5
5
  YARD::Rake::YardocTask.new(:doc) do |yard|
6
6
  yard.files = Dir['lib/**/*.rb']
7
7
  yard.options = [
8
- '--no-private',
9
8
  '--readme', 'README.rdoc',
10
9
  '--output-dir', 'doc/yardoc',
11
10
  '--template-path', 'doc/yardoc_templates'
@@ -1,7 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- CaseRunner.current :character_spacing
3
+ testcase :character_spacing, 'Sets the character spacing in the Editor' do
4
+ report = ThinReports::Report.new :layout => layout_filename
5
+ report.start_new_page
4
6
 
5
- ThinReports::Report.generate_file(CaseRunner.output_file, :layout => CaseRunner.layout_file) do
6
- start_new_page
7
+ report.generate :filename => output_filename
7
8
  end
@@ -2,40 +2,40 @@
2
2
 
3
3
  require 'open-uri'
4
4
 
5
- CaseRunner.current :dynamic_image
6
-
7
- image50x50 = CaseRunner.case_resource('img50x50.png')
8
- image200x100 = CaseRunner.case_resource('img200x100.png')
9
- matsukei_logo = open('http://www.matsukei.co.jp/common/image/logo.jpg')
10
-
11
- ThinReports::Report.generate_file(:pdf, CaseRunner.output_file) do |r|
12
- r.use_layout(CaseRunner.layout_file)
13
-
14
- r.start_new_page
15
-
16
- r.page.values(:pos_top_left => image50x50,
17
- :pos_top_center => image50x50,
18
- :pos_top_right => image50x50,
19
- :pos_center_left => image50x50,
20
- :pos_center_center => image50x50,
21
- :pos_center_right => image50x50,
22
- :pos_bottom_left => image50x50,
23
- :pos_bottom_center => image50x50,
24
- :pos_bottom_right => image50x50)
25
-
26
- r.page.item(:overflow).src(image200x100)
27
-
28
- # It cannot do as follows:
29
- #
30
- # r.page.item(:logo1).src(matsukei_logo)
31
- # r.page.item(:logo2).value(matsukei_logo)
32
- #
33
- r.page.item(:logo1).src(matsukei_logo.path)
34
- r.page.item(:logo2).value(matsukei_logo.path)
35
-
36
- r.page.item(:thinreports_logo).src(open('http://www.thinreports.org/media/i/logo.png'))
5
+ testcase :dynamic_image, 'Show images dynamically' do
6
+ image50x50 = resource('img50x50.png')
7
+ image200x100 = resource('img200x100.png')
8
+ matsukei_logo = open('http://www.matsukei.co.jp/common/image/logo.jpg')
37
9
 
38
- r.page.list(:list) do |list|
39
- 3.times { list.add_row :in_list => image50x50 }
10
+ ThinReports::Report.generate :filename => output_filename do |r|
11
+ r.use_layout(layout_filename)
12
+
13
+ r.start_new_page
14
+
15
+ r.page.values(:pos_top_left => image50x50,
16
+ :pos_top_center => image50x50,
17
+ :pos_top_right => image50x50,
18
+ :pos_center_left => image50x50,
19
+ :pos_center_center => image50x50,
20
+ :pos_center_right => image50x50,
21
+ :pos_bottom_left => image50x50,
22
+ :pos_bottom_center => image50x50,
23
+ :pos_bottom_right => image50x50)
24
+
25
+ r.page.item(:overflow).src(image200x100)
26
+
27
+ # It cannot do as follows:
28
+ #
29
+ # r.page.item(:logo1).src(matsukei_logo)
30
+ # r.page.item(:logo2).value(matsukei_logo)
31
+ #
32
+ r.page.item(:logo1).src(matsukei_logo.path)
33
+ r.page.item(:logo2).value(matsukei_logo.path)
34
+
35
+ r.page.item(:thinreports_logo).src(open('http://www.thinreports.org/assets/images/thinreports-logo.png'))
36
+
37
+ r.page.list(:list) do |list|
38
+ 3.times { list.add_row :in_list => image50x50 }
39
+ end
40
40
  end
41
41
  end
@@ -1,154 +1,154 @@
1
1
  # coding: utf-8
2
2
 
3
- CaseRunner.current :dynamic_style
4
-
5
- image = CaseRunner.case_resource('image.png')
6
- setup_values = Proc.new do |page|
7
- # The Basic Style
8
- page.values(:basic_show5 => 'TextBlock',
9
- :basic_show6 => image,
10
- :basic_hide5 => 'TextBlock',
11
- :basic_hide6 => image)
12
- # The Text Style
13
- page.values(:text_b3 => 'To bold',
14
- :text_b4 => 'To normal',
15
- :text_i3 => 'To italic',
16
- :text_i4 => 'To normal',
17
- :text_u3 => 'To underline',
18
- :text_u4 => 'To none',
19
- :text_l3 => 'To line-through',
20
- :text_l4 => 'To none')
21
- page.values(:text_a2 => 'To right align',
22
- :text_a3 => "To right align\n右寄せ",
23
- :text_va2 => "To bottom align\n下揃え",
24
- :text_color2 => '赤色')
25
- end
26
-
27
- ThinReports::Report.generate_file(CaseRunner.output_file,
28
- :layout => CaseRunner.layout_file) do |r|
29
- # In case of using "dynamic_style.tlf"
30
-
31
- # Create raw-page.
32
- r.start_new_page
33
- r.page.item(:title).value('Original Page')
34
-
35
- setup_values.call(r.page)
36
-
37
- # Create styled-page.
38
- r.start_new_page
39
-
40
- setup_values.call(r.page)
41
- r.page.item(:title).value('Styled Page')
42
-
43
- # The Basic Style
44
- 6.times do |i|
45
- r.page.item("basic_show#{i + 1}").style(:visible, true)
46
- r.page.item("basic_hide#{i + 1}").style(:visible, false)
47
- end
48
-
49
- # The Graphic Style
50
- r.page.item(:graphic_bcolor1).style(:border_color, '#ff0000')
51
- r.page.item(:graphic_bcolor2).style(:border_color, 'red')
52
- # [WARNING] :stroke is deprecated.
53
- r.page.item(:graphic_bcolor3).style(:stroke, 'ff0000')
54
- # nil or 'none'.
55
- r.page.item(:graphic_bcolor4).style(:border_color, nil)
56
-
57
- r.page.item(:graphic_bwidth1).style(:border_width, 5)
58
- r.page.item(:graphic_bwidth2).style(:border_width, 5)
59
- r.page.item(:graphic_bwidth3).style(:border_width, 5)
60
- r.page.item(:graphic_bwidth4).style(:border_width, 2)
61
- r.page.item(:graphic_bwidth5).style(:border_width, 0)
62
-
63
- r.page.item(:graphic_fcolor1).style(:fill_color, '#ff0000')
64
- # [WARNING] :fill is deprecated.
65
- r.page.item(:graphic_fcolor2).style(:fill, 'red')
66
- # nil or 'none'
67
- r.page.item(:graphic_fcolor3).style(:fill_color, 'none')
68
- r.page.item(:graphic_fcolor4).style(:fill_color, 'ff0000')
69
-
70
- # The Text Style
71
- [1, 3].each do |i|
72
- r.page.item("text_b#{i}").style(:bold, true)
73
- r.page.item("text_i#{i}").style(:italic, true)
74
- r.page.item("text_u#{i}").style(:underline, true)
75
- r.page.item("text_l#{i}").style(:linethrough, true)
76
- end
77
- [2, 4].each do |i|
78
- r.page.item("text_b#{i}").style(:bold, false)
79
- r.page.item("text_i#{i}").style(:italic, false)
80
- r.page.item("text_u#{i}").style(:underline, false)
81
- r.page.item("text_l#{i}").style(:linethrough, false)
82
- end
83
-
84
- 3.times do |i|
85
- r.page.item("text_a#{i + 1}").style(:align, :right)
86
- end
87
- 2.times do |i|
88
- r.page.item("text_va#{i + 1}").style(:valign, :bottom)
89
- end
90
-
91
- 2.times do |i|
92
- r.page.item("text_color#{i + 1}").style(:color, 'ff0000')
93
- end
94
-
95
- # In case of using "dynamic_style_in_list.tlf"
96
- r.start_new_page(:layout => CaseRunner.case_resource('dynamic_style_in_list.tlf'))
97
-
98
- # Settings for Header.
99
- r.page.list(:list).header do |header|
100
- header.item(:rect).styles(:border_color => nil,
101
- :fill_color => 'ff00ff')
102
- header.item(:text).styles(:align => :center,
103
- :valign => :center,
104
- :bold => true)
105
- header.item(:tblock).styles(:align => :center,
106
- :valign => :center,
107
- :color => 'red',
108
- :linethrough => true)
3
+ testcase :dynamic_style, 'Change styles of the object dynamically' do |t|
4
+ image = t.resource('image.png')
5
+ setup_values = Proc.new do |page|
6
+ # The Basic Style
7
+ page.values(:basic_show5 => 'TextBlock',
8
+ :basic_show6 => image,
9
+ :basic_hide5 => 'TextBlock',
10
+ :basic_hide6 => image)
11
+ # The Text Style
12
+ page.values(:text_b3 => 'To bold',
13
+ :text_b4 => 'To normal',
14
+ :text_i3 => 'To italic',
15
+ :text_i4 => 'To normal',
16
+ :text_u3 => 'To underline',
17
+ :text_u4 => 'To none',
18
+ :text_l3 => 'To line-through',
19
+ :text_l4 => 'To none')
20
+ page.values(:text_a2 => 'To right align',
21
+ :text_a3 => "To right align\n右寄せ",
22
+ :text_va2 => "To bottom align\n下揃え",
23
+ :text_color2 => '赤色')
109
24
  end
110
25
 
111
- 1.step(10, 1) do |i|
112
- # Flag of overflowed list-page.
113
- is_overflowed = r.page.list(:list).overflow?
26
+ ThinReports::Report.generate(:filename => t.output_filename,
27
+ :layout => t.layout_filename) do |r|
28
+ # In case of using dynamic_style.tlf
114
29
 
115
- # Add details.
116
- r.page.list(:list).add_row do |row|
117
- case
118
- when i % 2 == 0
119
- row.item(:rect).styles(:border_color => 'ff0000',
120
- :border_width => 3,
121
- :fill_color => '0000ff')
122
- row.item(:text).styles(:color => 'red',
123
- :align => :left,
124
- :valign => :center)
125
- row.item(:tblock).styles(:color => 'blue',
30
+ # Create raw-page.
31
+ r.start_new_page
32
+ r.page.item(:title).value('Original Page')
33
+
34
+ setup_values.call(r.page)
35
+
36
+ # Create styled-page.
37
+ r.start_new_page
38
+
39
+ setup_values.call(r.page)
40
+ r.page.item(:title).value('Styled Page')
41
+
42
+ # The Basic Style
43
+ 6.times do |i|
44
+ r.page.item("basic_show#{i + 1}").style(:visible, true)
45
+ r.page.item("basic_hide#{i + 1}").style(:visible, false)
46
+ end
47
+
48
+ # The Graphic Style
49
+ r.page.item(:graphic_bcolor1).style(:border_color, '#ff0000')
50
+ r.page.item(:graphic_bcolor2).style(:border_color, 'red')
51
+ # [WARNING] :stroke is deprecated.
52
+ r.page.item(:graphic_bcolor3).style(:stroke, 'ff0000')
53
+ # nil or 'none'.
54
+ r.page.item(:graphic_bcolor4).style(:border_color, nil)
55
+
56
+ r.page.item(:graphic_bwidth1).style(:border_width, 5)
57
+ r.page.item(:graphic_bwidth2).style(:border_width, 5)
58
+ r.page.item(:graphic_bwidth3).style(:border_width, 5)
59
+ r.page.item(:graphic_bwidth4).style(:border_width, 2)
60
+ r.page.item(:graphic_bwidth5).style(:border_width, 0)
61
+
62
+ r.page.item(:graphic_fcolor1).style(:fill_color, '#ff0000')
63
+ # [WARNING] :fill is deprecated.
64
+ r.page.item(:graphic_fcolor2).style(:fill, 'red')
65
+ # nil or 'none'
66
+ r.page.item(:graphic_fcolor3).style(:fill_color, 'none')
67
+ r.page.item(:graphic_fcolor4).style(:fill_color, 'ff0000')
68
+
69
+ # The Text Style
70
+ [1, 3].each do |i|
71
+ r.page.item("text_b#{i}").style(:bold, true)
72
+ r.page.item("text_i#{i}").style(:italic, true)
73
+ r.page.item("text_u#{i}").style(:underline, true)
74
+ r.page.item("text_l#{i}").style(:linethrough, true)
75
+ end
76
+ [2, 4].each do |i|
77
+ r.page.item("text_b#{i}").style(:bold, false)
78
+ r.page.item("text_i#{i}").style(:italic, false)
79
+ r.page.item("text_u#{i}").style(:underline, false)
80
+ r.page.item("text_l#{i}").style(:linethrough, false)
81
+ end
82
+
83
+ 3.times do |i|
84
+ r.page.item("text_a#{i + 1}").style(:align, :right)
85
+ end
86
+ 2.times do |i|
87
+ r.page.item("text_va#{i + 1}").style(:valign, :bottom)
88
+ end
89
+
90
+ 2.times do |i|
91
+ r.page.item("text_color#{i + 1}").style(:color, 'ff0000')
92
+ end
93
+
94
+ # In case of using "dynamic_style_in_list.tlf"
95
+ r.start_new_page(:layout => t.resource('dynamic_style_in_list.tlf'))
96
+
97
+ # Settings for Header.
98
+ r.page.list(:list).header do |header|
99
+ header.item(:rect).styles(:border_color => nil,
100
+ :fill_color => 'ff00ff')
101
+ header.item(:text).styles(:align => :center,
102
+ :valign => :center,
103
+ :bold => true)
104
+ header.item(:tblock).styles(:align => :center,
105
+ :valign => :center,
106
+ :color => 'red',
107
+ :linethrough => true)
108
+ end
109
+
110
+ 1.step(10, 1) do |i|
111
+ # Flag of overflowed list-page.
112
+ is_overflowed = r.page.list(:list).overflow?
113
+
114
+ # Add details.
115
+ r.page.list(:list).add_row do |row|
116
+ case
117
+ when i % 2 == 0
118
+ row.item(:rect).styles(:border_color => 'ff0000',
119
+ :border_width => 3,
120
+ :fill_color => '0000ff')
121
+ row.item(:text).styles(:color => 'red',
126
122
  :align => :left,
127
123
  :valign => :center)
128
- when i % 3 == 0
129
- row.item(:rect).style(:visible, false)
130
- row.item(:text).styles(:color => '0000ff',
131
- :align => :right,
132
- :valign => :bottom)
133
- row.item(:tblock).styles(:color => 'ff0000',
124
+ row.item(:tblock).styles(:color => 'blue',
125
+ :align => :left,
126
+ :valign => :center)
127
+ when i % 3 == 0
128
+ row.item(:rect).style(:visible, false)
129
+ row.item(:text).styles(:color => '0000ff',
134
130
  :align => :right,
135
131
  :valign => :bottom)
132
+ row.item(:tblock).styles(:color => 'ff0000',
133
+ :align => :right,
134
+ :valign => :bottom)
135
+ end
136
136
  end
137
+
138
+ # Change header styles when list-page was overflowed.
139
+ if is_overflowed
140
+ r.page.list(:list).header do |header|
141
+ header.item(:rect).styles(:border_color => 'black',
142
+ :fill_color => '#ffffff')
143
+ header.item(:text).styles(:align => :left,
144
+ :valign => :top,
145
+ :bold => false)
146
+ header.item(:tblock).styles(:align => :left,
147
+ :valign => :top,
148
+ :color => '#000000',
149
+ :linethrough => false)
150
+ end
151
+ end
137
152
  end
138
-
139
- # Change header styles when list-page was overflowed.
140
- if is_overflowed
141
- r.page.list(:list).header do |header|
142
- header.item(:rect).styles(:border_color => 'black',
143
- :fill_color => '#ffffff')
144
- header.item(:text).styles(:align => :left,
145
- :valign => :top,
146
- :bold => false)
147
- header.item(:tblock).styles(:align => :left,
148
- :valign => :top,
149
- :color => '#000000',
150
- :linethrough => false)
151
- end
152
- end
153
153
  end
154
154
  end
@@ -1,20 +1,20 @@
1
1
  # coding: utf-8
2
2
 
3
- CaseRunner.current :eudc
4
-
5
- ThinReports.configure do |config|
6
- config.generator.pdf.eudc_fonts = CaseRunner.case_resource('eudc.ttf')
7
- end
8
-
9
- ThinReports::Report.generate_file(:pdf, CaseRunner.output_file) do
10
- use_layout(CaseRunner.layout_file)
3
+ testcase :eudc, 'Show External Characters' do |t|
4
+ ThinReports.configure do |config|
5
+ config.generator.pdf.eudc_fonts = t.resource('eudc.ttf')
6
+ end
11
7
 
12
- start_new_page
13
-
14
- page.item(:eudc).value('日本で生まれ世界が育てた言語 Ruby')
15
- page.values(:eudc_bold => '太字',
16
- :eudc_italic => '斜体',
17
- :eudc_bold_italic => '太字斜体')
18
- end
8
+ ThinReports::Report.generate(:filename => t.output_filename) do
9
+ use_layout t.layout_filename
10
+
11
+ start_new_page
12
+
13
+ page.item(:eudc).value('日本で生まれ世界が育てた言語 Ruby')
14
+ page.values(:eudc_bold => '太字',
15
+ :eudc_italic => '斜体',
16
+ :eudc_bold_italic => '太字斜体')
17
+ end
19
18
 
20
- ThinReports.config.generator.pdf.eudc_fonts = []
19
+ ThinReports.config.generator.pdf.eudc_fonts = []
20
+ end