goldendocx 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/.rubocop.yml +47 -0
  4. data/CHANGELOG.md +43 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +101 -0
  7. data/README.md +76 -0
  8. data/Rakefile +10 -0
  9. data/coverage/.last_run.json +5 -0
  10. data/demo/charts/create_bar_chart.rb +30 -0
  11. data/demo/charts/create_column_chart.rb +29 -0
  12. data/demo/charts/create_doughnut_chart.rb +28 -0
  13. data/demo/charts/create_line_chart.rb +41 -0
  14. data/demo/images/append_image.rb +21 -0
  15. data/demo/images/append_styled_image.rb +14 -0
  16. data/demo/tables/create_embed_image_table.rb +42 -0
  17. data/demo/tables/create_plain_table.rb +22 -0
  18. data/demo/tables/create_styled_table.rb +36 -0
  19. data/demo/templates/bg.png +0 -0
  20. data/demo/templates/blankDocument.docx +0 -0
  21. data/demo/templates/image_base64 +1 -0
  22. data/demo/templates/styles/reportLabel +19 -0
  23. data/demo/templates/styles/reportSubTitle +20 -0
  24. data/demo/templates/styles/reportTable +27 -0
  25. data/demo/templates/styles/reportTitle +19 -0
  26. data/demo/texts/append_plain_text.rb +13 -0
  27. data/demo/texts/append_styled_text.rb +23 -0
  28. data/lib/goldendocx/charts/category_axis.rb +20 -0
  29. data/lib/goldendocx/charts/properties/auto_title_deleted_property.rb +16 -0
  30. data/lib/goldendocx/charts/properties/axis_property.rb +16 -0
  31. data/lib/goldendocx/charts/properties/bar_chart_property.rb +28 -0
  32. data/lib/goldendocx/charts/properties/chart_property.rb +16 -0
  33. data/lib/goldendocx/charts/properties/column_chart_property.rb +28 -0
  34. data/lib/goldendocx/charts/properties/cross_axis_property.rb +16 -0
  35. data/lib/goldendocx/charts/properties/data_lables_property.rb +16 -0
  36. data/lib/goldendocx/charts/properties/direction_property.rb +16 -0
  37. data/lib/goldendocx/charts/properties/doughnut_chart_property.rb +17 -0
  38. data/lib/goldendocx/charts/properties/grouping_property.rb +16 -0
  39. data/lib/goldendocx/charts/properties/hole_property.rb +16 -0
  40. data/lib/goldendocx/charts/properties/index_property.rb +16 -0
  41. data/lib/goldendocx/charts/properties/label_hidden_property.rb +16 -0
  42. data/lib/goldendocx/charts/properties/layout_property.rb +14 -0
  43. data/lib/goldendocx/charts/properties/line_chart_property.rb +24 -0
  44. data/lib/goldendocx/charts/properties/marker_property.rb +16 -0
  45. data/lib/goldendocx/charts/properties/number_list_property.rb +17 -0
  46. data/lib/goldendocx/charts/properties/order_property.rb +16 -0
  47. data/lib/goldendocx/charts/properties/plot_area_property.rb +23 -0
  48. data/lib/goldendocx/charts/properties/point_count_property.rb +16 -0
  49. data/lib/goldendocx/charts/properties/point_property.rb +18 -0
  50. data/lib/goldendocx/charts/properties/rounded_corner_property.rb +16 -0
  51. data/lib/goldendocx/charts/properties/series_category_property.rb +16 -0
  52. data/lib/goldendocx/charts/properties/series_text_property.rb +16 -0
  53. data/lib/goldendocx/charts/properties/series_value_property.rb +16 -0
  54. data/lib/goldendocx/charts/properties/smooth_property.rb +14 -0
  55. data/lib/goldendocx/charts/properties/string_list_property.rb +17 -0
  56. data/lib/goldendocx/charts/properties/symbol_property.rb +16 -0
  57. data/lib/goldendocx/charts/properties/text_value_property.rb +16 -0
  58. data/lib/goldendocx/charts/properties.rb +12 -0
  59. data/lib/goldendocx/charts/reference.rb +16 -0
  60. data/lib/goldendocx/charts/series.rb +57 -0
  61. data/lib/goldendocx/charts/value_axis.rb +20 -0
  62. data/lib/goldendocx/charts.rb +26 -0
  63. data/lib/goldendocx/components/bar_chart.rb +17 -0
  64. data/lib/goldendocx/components/chart.rb +55 -0
  65. data/lib/goldendocx/components/column_chart.rb +17 -0
  66. data/lib/goldendocx/components/doughnut_chart.rb +17 -0
  67. data/lib/goldendocx/components/image.rb +77 -0
  68. data/lib/goldendocx/components/line_chart.rb +17 -0
  69. data/lib/goldendocx/components/paragraph.rb +23 -0
  70. data/lib/goldendocx/components/properties/align_property.rb +16 -0
  71. data/lib/goldendocx/components/properties/bold_property.rb +16 -0
  72. data/lib/goldendocx/components/properties/color_property.rb +16 -0
  73. data/lib/goldendocx/components/properties/drawing.rb +16 -0
  74. data/lib/goldendocx/components/properties/extents_property.rb +17 -0
  75. data/lib/goldendocx/components/properties/graphic_data_property.rb +17 -0
  76. data/lib/goldendocx/components/properties/graphic_frame_locks_property.rb +18 -0
  77. data/lib/goldendocx/components/properties/graphic_frame_property.rb +16 -0
  78. data/lib/goldendocx/components/properties/graphic_property.rb +16 -0
  79. data/lib/goldendocx/components/properties/inline.rb +20 -0
  80. data/lib/goldendocx/components/properties/non_visual_property.rb +17 -0
  81. data/lib/goldendocx/components/properties/padding_property.rb +19 -0
  82. data/lib/goldendocx/components/properties/property.rb +17 -0
  83. data/lib/goldendocx/components/properties/run.rb +20 -0
  84. data/lib/goldendocx/components/properties/run_property.rb +17 -0
  85. data/lib/goldendocx/components/properties/style_property.rb +16 -0
  86. data/lib/goldendocx/components/properties/textual.rb +16 -0
  87. data/lib/goldendocx/components/properties.rb +12 -0
  88. data/lib/goldendocx/components/table.rb +44 -0
  89. data/lib/goldendocx/components/text.rb +35 -0
  90. data/lib/goldendocx/components.rb +16 -0
  91. data/lib/goldendocx/configuration.rb +18 -0
  92. data/lib/goldendocx/content_types/default.rb +22 -0
  93. data/lib/goldendocx/content_types/override.rb +22 -0
  94. data/lib/goldendocx/document.rb +51 -0
  95. data/lib/goldendocx/documents/body.rb +90 -0
  96. data/lib/goldendocx/documents/document.rb +29 -0
  97. data/lib/goldendocx/documents/element.rb +23 -0
  98. data/lib/goldendocx/documents/relationship.rb +17 -0
  99. data/lib/goldendocx/documents/relationships.rb +39 -0
  100. data/lib/goldendocx/documents/style.rb +21 -0
  101. data/lib/goldendocx/documents/styles.rb +74 -0
  102. data/lib/goldendocx/documents/unparsed_style.rb +17 -0
  103. data/lib/goldendocx/documents.rb +10 -0
  104. data/lib/goldendocx/docx.rb +108 -0
  105. data/lib/goldendocx/element.rb +192 -0
  106. data/lib/goldendocx/images/picture.rb +41 -0
  107. data/lib/goldendocx/images/properties/blip_property.rb +16 -0
  108. data/lib/goldendocx/images/properties/drawing_property.rb +14 -0
  109. data/lib/goldendocx/images/properties/extents_property.rb +17 -0
  110. data/lib/goldendocx/images/properties/fill_rectangle_property.rb +14 -0
  111. data/lib/goldendocx/images/properties/image_data_property.rb +17 -0
  112. data/lib/goldendocx/images/properties/non_visual_drawing_property.rb +17 -0
  113. data/lib/goldendocx/images/properties/non_visual_picture_property.rb +17 -0
  114. data/lib/goldendocx/images/properties/picture_fill_property.rb +17 -0
  115. data/lib/goldendocx/images/properties/picture_shape_property.rb +16 -0
  116. data/lib/goldendocx/images/properties/shape_property.rb +30 -0
  117. data/lib/goldendocx/images/properties/stretch_property.rb +17 -0
  118. data/lib/goldendocx/images/properties/transform_property.rb +16 -0
  119. data/lib/goldendocx/images/properties.rb +12 -0
  120. data/lib/goldendocx/images/shape.rb +32 -0
  121. data/lib/goldendocx/images.rb +12 -0
  122. data/lib/goldendocx/parts/content_types.rb +63 -0
  123. data/lib/goldendocx/parts/documents.rb +103 -0
  124. data/lib/goldendocx/parts/media.rb +43 -0
  125. data/lib/goldendocx/parts.rb +10 -0
  126. data/lib/goldendocx/tables/cell.rb +33 -0
  127. data/lib/goldendocx/tables/header_cell.rb +16 -0
  128. data/lib/goldendocx/tables/header_row.rb +14 -0
  129. data/lib/goldendocx/tables/image_cell.rb +23 -0
  130. data/lib/goldendocx/tables/properties/cell_property.rb +19 -0
  131. data/lib/goldendocx/tables/properties/cell_width_property.rb +17 -0
  132. data/lib/goldendocx/tables/properties/grid_column_property.rb +16 -0
  133. data/lib/goldendocx/tables/properties/grid_property.rb +16 -0
  134. data/lib/goldendocx/tables/properties/grid_span_property.rb +16 -0
  135. data/lib/goldendocx/tables/properties/header_row_property.rb +14 -0
  136. data/lib/goldendocx/tables/properties/property.rb +17 -0
  137. data/lib/goldendocx/tables/properties/row_height_property.rb +17 -0
  138. data/lib/goldendocx/tables/properties/row_property.rb +16 -0
  139. data/lib/goldendocx/tables/properties/shading_property.rb +18 -0
  140. data/lib/goldendocx/tables/properties/style_property.rb +16 -0
  141. data/lib/goldendocx/tables/properties/vertical_align_property.rb +16 -0
  142. data/lib/goldendocx/tables/properties/width_property.rb +17 -0
  143. data/lib/goldendocx/tables/properties.rb +12 -0
  144. data/lib/goldendocx/tables/row.rb +28 -0
  145. data/lib/goldendocx/tables.rb +19 -0
  146. data/lib/goldendocx/units.rb +11 -0
  147. data/lib/goldendocx/version.rb +5 -0
  148. data/lib/goldendocx/xml_serializers/nokogiri.rb +66 -0
  149. data/lib/goldendocx/xml_serializers/ox.rb +63 -0
  150. data/lib/goldendocx.rb +72 -0
  151. data/sig/goldendocx.rbs +4 -0
  152. metadata +347 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f1603ab8a5538d27e48b351b381f8859c92fb9e42169df8cbcc6104545803c2b
4
+ data.tar.gz: 9bc30497d4a1f96da15f8190d9edb42857f2ec6876550ebb47415f3ed5e67caa
5
+ SHA512:
6
+ metadata.gz: b826c86f0013b2af7af58b047cdb5340cc912913ca78b0198ab9b506a8614a173b2d1a53f42d928da6f277f21a6312895175687a49e79e2cf63658acace1ef4a
7
+ data.tar.gz: cb4198c911418e3579df98019d87709a009aed9bd595b2889602e595a32d53b2a333561cd8d43dde67f40a55b1ebd6552e0921a184308417f4ce8270a215cd0f
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,47 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rspec
4
+
5
+ AllCops:
6
+ NewCops: enable
7
+ TargetRubyVersion: 2.7
8
+ SuggestExtensions: false
9
+
10
+ Metrics/AbcSize:
11
+ CountRepeatedAttributes: false
12
+
13
+ Metrics/ClassLength:
14
+ CountAsOne:
15
+ - array
16
+ - hash
17
+
18
+ Metrics/MethodLength:
19
+ Max: 15
20
+ CountAsOne:
21
+ - array
22
+ - hash
23
+
24
+ Style/Documentation:
25
+ Enabled: false
26
+
27
+ Style/NumericLiterals:
28
+ Enabled: false
29
+
30
+ Style/StringLiterals:
31
+ Enabled: true
32
+ EnforcedStyle: single_quotes
33
+
34
+ Style/StringLiteralsInInterpolation:
35
+ Enabled: true
36
+ EnforcedStyle: single_quotes
37
+
38
+ Layout/LineLength:
39
+ Max: 150
40
+
41
+ RSpec/ExampleLength:
42
+ Max: 20
43
+
44
+ RSpec/MultipleExpectations:
45
+ Max: 10
46
+
47
+
data/CHANGELOG.md ADDED
@@ -0,0 +1,43 @@
1
+ ## [0.1.0] - 2023-02-20
2
+
3
+ Basic implementation for generating a docx file based on docx file as template.
4
+
5
+ Already available for production usages.
6
+
7
+ ### Features
8
+
9
+ - Create texts for docx
10
+ - Create tables for docx
11
+ - Create images for docx
12
+ - Create charts for docx ( Yet only readable for WPS )
13
+
14
+ ## [0.2.0] - 2023-03-22
15
+
16
+ Mostly refactoring
17
+
18
+ ### Features
19
+
20
+ - Support both `ox` and `nokogiri` as XML serializer
21
+
22
+ ## [0.2.1] - 2023-03-23
23
+
24
+ ### Features
25
+
26
+ - Support customize color and bold for Text
27
+
28
+ ### Refactors
29
+
30
+ - Introduce `ActiveSupport` to make coding easier
31
+ - Clean irrelevant demos
32
+
33
+ ## [0.2.2] - 2023-03-31(WIP)
34
+
35
+ ### Features
36
+
37
+ - Add Github CI support
38
+
39
+
40
+ ### Fixes
41
+
42
+ - Fix create charts issues
43
+ - Fix Nokogiri XML serializer compatible issues
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://gems.ruby-china.com'
4
+ # source 'https://rubygems.org'
5
+
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,101 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ goldendocx (0.2.2)
5
+ activesupport (~> 7.0)
6
+ nokogiri (~> 1.14)
7
+ ox (~> 2.14)
8
+ rubyzip (~> 2.3)
9
+
10
+ GEM
11
+ remote: https://gems.ruby-china.com/
12
+ specs:
13
+ activesupport (7.0.4.3)
14
+ concurrent-ruby (~> 1.0, >= 1.0.2)
15
+ i18n (>= 1.6, < 2)
16
+ minitest (>= 5.1)
17
+ tzinfo (~> 2.0)
18
+ ast (2.4.2)
19
+ concurrent-ruby (1.2.2)
20
+ diff-lcs (1.5.0)
21
+ docile (1.4.0)
22
+ i18n (1.12.0)
23
+ concurrent-ruby (~> 1.0)
24
+ json (2.6.2)
25
+ minitest (5.18.0)
26
+ nokogiri (1.14.2-x86_64-darwin)
27
+ racc (~> 1.4)
28
+ nokogiri (1.14.2-x86_64-linux)
29
+ racc (~> 1.4)
30
+ ox (2.14.14)
31
+ parallel (1.22.1)
32
+ parser (3.2.1.1)
33
+ ast (~> 2.4.1)
34
+ racc (1.6.2)
35
+ rainbow (3.1.1)
36
+ rake (13.0.6)
37
+ regexp_parser (2.6.2)
38
+ rexml (3.2.5)
39
+ rspec (3.11.0)
40
+ rspec-core (~> 3.11.0)
41
+ rspec-expectations (~> 3.11.0)
42
+ rspec-mocks (~> 3.11.0)
43
+ rspec-core (3.11.0)
44
+ rspec-support (~> 3.11.0)
45
+ rspec-expectations (3.11.0)
46
+ diff-lcs (>= 1.2.0, < 2.0)
47
+ rspec-support (~> 3.11.0)
48
+ rspec-mocks (3.11.1)
49
+ diff-lcs (>= 1.2.0, < 2.0)
50
+ rspec-support (~> 3.11.0)
51
+ rspec-support (3.11.0)
52
+ rubocop (1.42.0)
53
+ json (~> 2.3)
54
+ parallel (~> 1.10)
55
+ parser (>= 3.1.2.1)
56
+ rainbow (>= 2.2.2, < 4.0)
57
+ regexp_parser (>= 1.8, < 3.0)
58
+ rexml (>= 3.2.5, < 4.0)
59
+ rubocop-ast (>= 1.24.1, < 2.0)
60
+ ruby-progressbar (~> 1.7)
61
+ unicode-display_width (>= 1.4.0, < 3.0)
62
+ rubocop-ast (1.28.0)
63
+ parser (>= 3.2.1.0)
64
+ rubocop-capybara (2.17.1)
65
+ rubocop (~> 1.41)
66
+ rubocop-performance (1.16.0)
67
+ rubocop (>= 1.7.0, < 2.0)
68
+ rubocop-ast (>= 0.4.0)
69
+ rubocop-rspec (2.19.0)
70
+ rubocop (~> 1.33)
71
+ rubocop-capybara (~> 2.17)
72
+ ruby-progressbar (1.11.0)
73
+ rubyzip (2.3.2)
74
+ simplecov (0.22.0)
75
+ docile (~> 1.1)
76
+ simplecov-html (~> 0.11)
77
+ simplecov_json_formatter (~> 0.1)
78
+ simplecov-html (0.12.3)
79
+ simplecov-lcov (0.8.0)
80
+ simplecov_json_formatter (0.1.4)
81
+ tzinfo (2.0.6)
82
+ concurrent-ruby (~> 1.0)
83
+ unicode-display_width (2.2.0)
84
+
85
+ PLATFORMS
86
+ x86_64-darwin
87
+ x86_64-darwin-21
88
+ x86_64-linux
89
+
90
+ DEPENDENCIES
91
+ goldendocx!
92
+ rake (~> 13.0)
93
+ rspec (~> 3.11)
94
+ rubocop (~> 1.25)
95
+ rubocop-performance (~> 1.16)
96
+ rubocop-rspec (~> 2.19)
97
+ simplecov (~> 0.22.0)
98
+ simplecov-lcov (~> 0.8.0)
99
+
100
+ BUNDLED WITH
101
+ 2.3.23
data/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # The Ruby API for Microsoft Word
2
+
3
+ Ruby APIs for manipulating Microsoft Word based upon OOXML standards.
4
+
5
+ ## Installation
6
+
7
+ Install the gem and add to the application's Gemfile by executing:
8
+
9
+ $ bundle add goldendocx
10
+
11
+ If bundler is not being used to manage dependencies, install the gem by executing:
12
+
13
+ $ gem install goldendocx
14
+
15
+ ## Usage
16
+
17
+ ```ruby
18
+ require 'goldendocx'
19
+ ```
20
+
21
+ ### XML Serializers
22
+
23
+ Support both `ox` and `nokogiri` as XML serializer, and `ox` as default.
24
+
25
+ You can customize with configuration
26
+ ```ruby
27
+ Goldendocx.configure do |config|
28
+ config.xml_serializer = :nokogiri
29
+ end
30
+ ```
31
+
32
+ ### Compose MS Word
33
+ - Read MS Word file and write to another path
34
+ ```ruby
35
+ docx = Goldendocx::Docx.new(docx_file_path)
36
+ docx.write_to(new_file_path)
37
+ ```
38
+ - Create texts to MS Word
39
+ ```ruby
40
+ docx.create_text("Hello World!")
41
+ ```
42
+ ```ruby
43
+ docx.add_style(well_comsposed_style_path)
44
+ docx.create_text("Hello World!", style: 'StyleName', align: :center)
45
+ ```
46
+ - Create tables to MS Word
47
+ ```ruby
48
+ headers = %w[名称 数量 百分比]
49
+ rows = [
50
+ %w[A 10 10%],
51
+ %w[B 66 66%],
52
+ %w[C 24 24%]
53
+ ]
54
+ table = docx.create_table
55
+ headers.each { |header| table.add_header(header) }
56
+ rows.each { |row| table.add_row(row) }
57
+ ```
58
+ - Create images to MS Word
59
+ ```ruby
60
+ docx.create_image(File.open(image_path))
61
+ docx.create_image("data:image/png;base64,ImageBase64StringData")
62
+ docx.create_image(Kernel.open('https://image.url'))
63
+ ```
64
+
65
+ - Create charts to MS Word
66
+ ```ruby
67
+ chart = docx.create_chart(:column)
68
+ chart.name = '地域分布详情数据'
69
+
70
+ categories = %w[河南省 山东省 浙江省 四川省 安徽省 上海市 湖北省 山西省 河北省 贵州省]
71
+ values = [13, 12, 9, 9, 8, 7, 7, 6, 5, 3]
72
+ chart.add_series('地域分布详情数据', categories, values)
73
+ ```
74
+
75
+ More demos view at [Demos](demo/)
76
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+ RuboCop::RakeTask.new
9
+
10
+ task default: %i[rubocop spec]
@@ -0,0 +1,5 @@
1
+ {
2
+ "result": {
3
+ "line": 100.0
4
+ }
5
+ }
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportTitle"))
9
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportSubTitle"))
10
+
11
+ docx.create_text('地域分布详情数据(Top 10)', style: 'SubTitle')
12
+
13
+ chart = docx.create_chart(:bar)
14
+ chart.name = '地域分布详情数据(Top 10)'
15
+
16
+ categories = %w[
17
+ 河南省 山东省 浙江省 四川省 安徽省 上海市 湖北省 山西省 河北省 贵州省 广东省 江西省
18
+ 北京市 陕西省 江苏省 广西壮族自治区 福建省 甘肃省 新疆维吾尔自治区 内蒙古自治区 黑龙江省
19
+ 宁夏回族自治区 吉林省 天津市 辽宁省 云南省 海外
20
+ ]
21
+ values = [
22
+ 13, 12, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1
23
+ ]
24
+
25
+ chart.add_series('地域分布详情数据', categories, values)
26
+
27
+ filename = 'simpleBarChartDocument.docx'
28
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
29
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
30
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportTitle"))
9
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportSubTitle"))
10
+
11
+ docx.create_text('地域分布详情数据', style: 'SubTitle')
12
+
13
+ chart = docx.create_chart(:column)
14
+ chart.name = '地域分布详情数据'
15
+
16
+ categories = %w[
17
+ 河南省 山东省 浙江省 四川省 安徽省 上海市 湖北省 山西省 河北省 贵州省 广东省 江西省
18
+ 北京市 陕西省 江苏省 广西壮族自治区 福建省 甘肃省 新疆维吾尔自治区 内蒙古自治区 黑龙江省
19
+ 宁夏回族自治区 吉林省 天津市 辽宁省 云南省 海外
20
+ ]
21
+ values = [
22
+ 13, 12, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1
23
+ ]
24
+ chart.add_series('地域分布详情数据', categories, values)
25
+
26
+ filename = 'simpleColumnChartDocument.docx'
27
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
28
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
29
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportTitle"))
9
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportSubTitle"))
10
+
11
+ docx.create_text('地域分布详情数据(Top 10)', style: 'SubTitle')
12
+
13
+ chart = docx.create_chart(:doughnut)
14
+ categories = %w[
15
+ 河南省 山东省 浙江省 四川省 安徽省 上海市 湖北省 山西省 河北省 贵州省 广东省 江西省
16
+ 北京市 陕西省 江苏省 广西壮族自治区 福建省 甘肃省 新疆维吾尔自治区 内蒙古自治区 黑龙江省
17
+ 宁夏回族自治区 吉林省 天津市 辽宁省 云南省 海外
18
+ ]
19
+ values = [
20
+ 13, 12, 9, 9, 8, 7, 7, 6, 5, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1
21
+ ]
22
+
23
+ chart.add_series('地域分布详情数据', categories, values)
24
+
25
+ filename = 'simpleDoughnutChartDocument.docx'
26
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
27
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
28
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportTitle"))
9
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportSubTitle"))
10
+
11
+ docx.create_text('表单最近表现(2023.01.29-2023.02.28)', style: 'SubTitle')
12
+
13
+ chart = docx.create_chart(:line)
14
+ chart.name = '表单最近表现'
15
+
16
+ categories = %w[
17
+ 2023-01-29 2023-01-30 2023-01-31 2023-02-01 2023-02-02 2023-02-03 2023-02-04 2023-02-05
18
+ 2023-02-06 2023-02-07 2023-02-08 2023-02-09 2023-02-10 2023-02-11 2023-02-12 2023-02-13
19
+ 2023-02-14 2023-02-15 2023-02-16 2023-02-17 2023-02-18 2023-02-19 2023-02-20 2023-02-21
20
+ 2023-02-22 2023-02-23 2023-02-24 2023-02-25 2023-02-26 2023-02-27 2023-02-28
21
+ ]
22
+
23
+ view_values = [
24
+ 0, 0, 0, 2, 0, 48, 158, 94, 126, 142, 9, 7, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 2, 3, 2
25
+ ]
26
+ chart.add_series('浏览', categories, view_values)
27
+
28
+ fill_values = [
29
+ 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 20, 0, 20, 0, 0, 60, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 45, 30, 0, 0
30
+ ]
31
+ chart.add_series('填写', categories, fill_values)
32
+
33
+ query_values = [
34
+ 2, 1, 12, 0, 0, 0, 0, 45, 0, 0, 20, 0, 0, 24, 0, 0, 0, 0, 23, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0
35
+ ]
36
+ chart.add_series('查询', categories, query_values)
37
+
38
+ filename = 'simpleLineChartDocument.docx'
39
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
40
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
41
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+ require 'open-uri'
6
+
7
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
8
+
9
+ image = File.open("#{Dir.pwd}/demo/templates/bg.png")
10
+ docx.create_image(image)
11
+
12
+ image_base64 = File.read("#{Dir.pwd}/demo/templates/image_base64")
13
+ docx.create_image(image_base64)
14
+
15
+ image_url = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png'
16
+ docx.create_image(Kernel.open(image_url))
17
+
18
+ filename = 'simpleImageDocument.docx'
19
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
20
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
21
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ image = File.open("#{Dir.pwd}/demo/templates/bg.png")
9
+ docx.create_image(image, width: 720000, height: 720000)
10
+
11
+ filename = 'styledImageDocument.docx'
12
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
13
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
14
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+ Goldendocx.configure { |config| config.xml_serializer = :ox }
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ # Register styles because default document without any style
9
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportTable"))
10
+ # Set default textAlignment at template instead of modify manually
11
+ # docx.document.styles.styles.find { |s| s.type == 'paragraph' && s.default? }.tap do |style|
12
+ # style.node.public_send('w:pPr').tap do |pr|
13
+ # pr << Ox::Element.new('w:textAlignment').tap { |a| a['w:val'] = :center }
14
+ # end
15
+ # end
16
+
17
+ table = docx.create_table(style: 'reportTable')
18
+
19
+ # Headers
20
+ table.add_header('名称', width: (Goldendocx::Tables::DEFAULT_TABLE_DXA_WIDTH / 2))
21
+ table.add_header('数量', width: 1500)
22
+ table.add_header('单价')
23
+ table.add_header('总价', width: (Goldendocx::Tables::DEFAULT_TABLE_DXA_WIDTH / 6))
24
+
25
+ # Rows
26
+ image_base64 = File.read("#{Dir.pwd}/demo/templates/image_base64")
27
+ image = docx.create_embed_image(image_base64, width: 720000, height: 720000, align: :left)
28
+
29
+ rows = [
30
+ [Goldendocx::Tables::ImageCell.new(image: image, content: '选项A'), 3, '¥3.00', '¥9.00'],
31
+ [Goldendocx::Tables::ImageCell.new(image: image, content: '选项B'), 4, '¥6.50', '¥18.00'],
32
+ [Goldendocx::Tables::ImageCell.new(image: image, content: '选项C'), 10, '¥6.00', '¥60.00']
33
+ ]
34
+ rows.each do |r|
35
+ row = table.add_row(r)
36
+ row.height = 1500
37
+ end
38
+
39
+ filename = 'embedImageTableDocument.docx'
40
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
41
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
42
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ headers = %w[名称 数量 单价]
9
+ rows = [
10
+ %w[可口可乐 3 ¥3.00],
11
+ %w[魔爪 4 ¥6.50],
12
+ %w[北冰洋 10 ¥6.00]
13
+ ]
14
+
15
+ table = docx.create_table
16
+ headers.each { |header| table.add_header(header) }
17
+ rows.each { |row| table.add_row(row) }
18
+
19
+ filename = 'plainTableDocument.docx'
20
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
21
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
22
+ exec "open ~/Desktop/#{filename}"
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push "#{Dir.pwd}/lib"
4
+ require 'goldendocx'
5
+
6
+ docx = Goldendocx::Docx.new("#{Dir.pwd}/demo/templates/blankDocument.docx")
7
+
8
+ # Register styles because default document without any style
9
+ docx.add_style(File.read("#{Dir.pwd}/demo/templates/styles/reportTable"))
10
+
11
+ table = docx.create_table(style: 'reportTable')
12
+
13
+ # Headers
14
+ table.add_header('名称', width: (Goldendocx::Tables::DEFAULT_TABLE_DXA_WIDTH / 2))
15
+ table.add_header('数量', width: 1500)
16
+ table.add_header('单价')
17
+ table.add_header('总价', width: (Goldendocx::Tables::DEFAULT_TABLE_DXA_WIDTH / 6))
18
+
19
+ # Rows
20
+ rows = [
21
+ %w[可口可乐 3 ¥3.00 ¥9.00],
22
+ %w[魔爪 4 ¥6.50 ¥18.00],
23
+ %w[北冰洋 10 ¥6.00 ¥60.00]
24
+ ]
25
+ rows.each do |r|
26
+ row = table.add_row(r)
27
+ row.height = 500
28
+ end
29
+
30
+ # RowMergeCell
31
+ table.add_row([{ span: 4, content: '总数据量: 210', align: :center }])
32
+
33
+ filename = 'styledTableDocument.docx'
34
+ system "rm -f ~/Desktop/#{filename}" # -f so that we don't have an error if the file doesn't exist
35
+ docx.write_to File.expand_path("~/Desktop/#{filename}")
36
+ exec "open ~/Desktop/#{filename}"
Binary file
Binary file