rubyword 1.0.0 → 1.1.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -2
  3. data/CHANGELOG.md +44 -0
  4. data/README.cn.md +167 -0
  5. data/README.md +24 -3
  6. data/bin/run-example +11 -0
  7. data/doc/README.md +18 -1
  8. data/doc/doc-information.md +16 -0
  9. data/doc/footer.md +19 -0
  10. data/doc/header.md +11 -0
  11. data/doc/image.md +10 -0
  12. data/doc/link.md +10 -0
  13. data/doc/list.md +17 -0
  14. data/doc/paragraph.md +27 -0
  15. data/doc/table.md +21 -0
  16. data/doc/text.md +26 -1
  17. data/doc/title.md +14 -0
  18. data/doc/toc.md +11 -0
  19. data/example/doc_information.rb +13 -0
  20. data/example/footer.rb +5 -0
  21. data/example/header.rb +5 -0
  22. data/example/image.rb +7 -0
  23. data/example/link.rb +7 -0
  24. data/example/list.rb +11 -0
  25. data/example/paragraph.rb +17 -0
  26. data/example/result/.keep +0 -0
  27. data/example/result/doc-information.docx +0 -0
  28. data/example/result/footer.docx +0 -0
  29. data/example/result/header.docx +0 -0
  30. data/example/result/image.docx +0 -0
  31. data/example/result/link.docx +0 -0
  32. data/example/result/list.docx +0 -0
  33. data/example/result/paragraph.docx +0 -0
  34. data/example/result/table.docx +0 -0
  35. data/example/result/test.docx +0 -0
  36. data/example/result/text.docx +0 -0
  37. data/example/table.rb +18 -0
  38. data/example/test.rb +117 -0
  39. data/example/text.rb +9 -0
  40. data/example/toc.rb +24 -0
  41. data/lib/rubyword.rb +1 -0
  42. data/lib/rubyword/configuration.rb +1 -1
  43. data/lib/rubyword/document.rb +29 -41
  44. data/lib/rubyword/element/base.rb +12 -0
  45. data/lib/rubyword/element/link.rb +6 -5
  46. data/lib/rubyword/element/list.rb +4 -2
  47. data/lib/rubyword/element/paragraph.rb +38 -0
  48. data/lib/rubyword/element/section.rb +23 -10
  49. data/lib/rubyword/element/table.rb +60 -0
  50. data/lib/rubyword/element/text.rb +14 -79
  51. data/lib/rubyword/style.rb +4 -0
  52. data/lib/rubyword/version.rb +1 -1
  53. data/lib/rubyword/writer.rb +0 -4
  54. data/lib/rubyword/writer/part/document.rb +51 -44
  55. data/lib/rubyword/writer/part/footer.rb +1 -6
  56. data/lib/rubyword/writer/part/header.rb +2 -6
  57. data/lib/rubyword/writer/style/base.rb +0 -1
  58. data/lib/rubyword/writer/style/paragraph.rb +47 -0
  59. data/lib/rubyword/writer/style/section.rb +0 -1
  60. data/lib/rubyword/writer/style/word.rb +40 -0
  61. data/rubyword.gemspec +1 -2
  62. data/spec/rubyword/document_spec.rb +18 -3
  63. data/spec/rubyword/element/page_break_spec.rb +55 -0
  64. data/spec/rubyword/element/text_break_spec.rb +46 -0
  65. data/spec/rubyword/element/text_spec.rb +50 -0
  66. data/spec/spec_helper.rb +3 -30
  67. metadata +50 -20
  68. data/CHANGELOG.txt +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94a411b43cd5b8e055aa0d391332d91e29b5a9eb
4
- data.tar.gz: 3253a4e9f289ba99b9e62a0ab73b1cb43c223d58
3
+ metadata.gz: 4211931a53c84371b34bd29570a365bb1c9606bd
4
+ data.tar.gz: bbfecc910bb93c23ddd4e8403c24820da0cd1689
5
5
  SHA512:
6
- metadata.gz: d67230b2cb422a7a5631c9844a1fa44b77a0739b683dfcecd86b9e090989ade5d625d7dfb8a1d17aef10c9a8290a59799a95fd092507b0bd40554aea31a28557
7
- data.tar.gz: 82ebc3d3424424abc1293896448472dc53d76f41fbbb921e6eeb158793172c017992458c07819c011674d29737e4f7dff8e78c115c3181379a79bd9f389778b1
6
+ metadata.gz: 2d86f0449340b3274d3cc4844fb58b5205d0d55297a0fd62ecc6efe588c4ac8f5c3e7d9e1a67d3c736b4ec15851ab147e91106836f24ea3e63151fb3e185f79f
7
+ data.tar.gz: 63b6215169ff3ba6012189728d188ea1bbdd1552b48b479f4db467dab3d7fb3ce0b7f0e304b52167cf7fdb8e7310618b2e45850bd5203f82b351a4b063665f15
data/.gitignore CHANGED
@@ -4,7 +4,6 @@
4
4
  .config
5
5
  .yardoc
6
6
  Gemfile.lock
7
- temp
8
- sample/*
7
+ example/*.docx
9
8
  .idea/*
10
9
  .vscode
@@ -0,0 +1,44 @@
1
+ # CHANGELOG
2
+
3
+ # Version 1.1.0 - 2017-11-02
4
+ + add paragraph feature
5
+ + add table feature
6
+ ```
7
+ section {
8
+ text 'hello'
9
+ p(text_align: 'center') {
10
+ text 'i am '
11
+ text 'a boy'
12
+ }
13
+ text 'welcome to my home..'
14
+
15
+ p {
16
+ text 'This is a '
17
+ text 'apple, yellow apple', bgcolor: 'yellow', text_align: 'center'
18
+ }
19
+
20
+ table {
21
+ tr {
22
+ th 'id'
23
+ th 'name'
24
+ th 'age'
25
+ }
26
+ tr {
27
+ th '1'
28
+ th 'young'
29
+ th '66'
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ # Version 1.0.0 - 2017-10-21
36
+
37
+ + Support for setting the properties of the document, such as: title, subject, author and other information
38
+ + Support for generated TOC for the title
39
+ + Support for setting header and footer
40
+ + Support for insert title which is different attributes, such as: title, sub title, etc.
41
+ + Support for insert blank lines and blank page
42
+ + Support for insert multiple images
43
+ + Support for insert multiple lists
44
+ + Support for insert hyperlink
@@ -0,0 +1,167 @@
1
+ # RubyWord: Microsoft Word Generation For Ruby
2
+ > RubyWord 是一个便捷的 word 文档生成工具
3
+
4
+ # 语言
5
+ * [English](README.md)
6
+ * [简体中文](README.cn.md)
7
+
8
+ # 更新日志
9
+ [ChANGELOG](CHANGELOG.md)
10
+
11
+ # 使用前请先阅读
12
+ 这个项目正在开发中,因为只有我自己在开发,所以进度可能会比较缓慢以及可能会存在很多未知的问题。这方面请多谅解,同时也希望各位有兴趣的朋友也加入到开发来,欢迎多提宝贵意见或者直接提PR也是非常欢迎的,感谢支持。
13
+
14
+ # 安装
15
+ ```
16
+ gem install rubyword
17
+ ```
18
+ 或者将下面这句代码写入到Gemfile
19
+ ```
20
+ gem 'rubyword'
21
+ ```
22
+ # 特性
23
+ + 支持设置文档的属性,比如: 标题,副标题,作者以及等等
24
+ + 支持插入段落
25
+ + 支持根据一级标题,二级标题,多级标题自动生成目录结构
26
+ + 支持设置页头和页尾
27
+ + 支持插入多级标题
28
+ + 支持插入空行符以及空白页
29
+ + 支持插入图片
30
+ + 支持插入列表
31
+ + 支持插入超链接
32
+ + 支持插入表格
33
+ + 更多功能,敬请期待..
34
+
35
+ # 用法说明
36
+ ```
37
+ require "rubyword"
38
+ Rubyword::Document::generate('hello.docx') {
39
+ # word 文档的属性
40
+ information({
41
+ company: 'ruby word',
42
+ creator: 'young',
43
+ title: 'example word file',
44
+ description: 'this is a example docx',
45
+ subject: 'how to create doc info',
46
+ keywords: 'remark',
47
+ category: 'category'
48
+ })
49
+
50
+ section {
51
+ text '普通段落1'
52
+ p(text_align: 'center') {
53
+ text '连续的文本1'
54
+ text '连续的文本'
55
+ }
56
+ text '普通段落2'
57
+
58
+ p {
59
+ text '不居中的文本 '
60
+ text '黄色的文本', bgcolor: 'yellow', text_align: 'center'
61
+ }
62
+ }
63
+
64
+ # 根据标题生成目录
65
+ title_directory font_size: 24
66
+
67
+ # 插入页头
68
+ add_header 'rubyword'
69
+
70
+ # 插入页尾,并以数字作为页码
71
+ add_footer nil, text_align: 'center', nums_type: 'number'
72
+ # 插入页尾,使用字符作为页码
73
+ # add_footer 'hello', text_align: 'center'
74
+
75
+ section {
76
+ # 二级标题
77
+ title_2 "It's a subtitle"
78
+ # 一级标题
79
+ title_1 'Database'
80
+ # 二级标题
81
+ title_2 'MySQL'
82
+ # 三级标题
83
+ title_3 'NoSQL'
84
+ # 一级标题,并且不把它列入目录生成的范围
85
+ title_1 "It's a title", ignore_dir: true
86
+ # 空白行
87
+ text_break 3
88
+ # 插入文本并指定样式
89
+ text 'hello word', bgcolor: 'yellow', text_align: 'center'
90
+ # 空白页
91
+ page_break 2
92
+ # 插入文本
93
+ text 'hello word', indent_between: '1440-1440'
94
+ text 'title', { font_size: 62, color: '996699', blod: true, text_align: 'center' }
95
+
96
+ # 插入标题
97
+ title_1 'section2 title'
98
+ title_2 'section2 title'
99
+ title_3 'section2 title'
100
+
101
+ # 插入链接
102
+ link 'baidu', 'http://www.baidu.com', text_align: 'center'
103
+ }
104
+
105
+ section {
106
+ # 插入文本
107
+ text 'another Section', bgcolor: 'yellow', text_align: 'center'
108
+
109
+ # 插入文本
110
+ text 'hello word', indent_between: '1440-1440'
111
+ text 'title', { font_size: 62, color: '996699', blod: true, text_align: 'center' }
112
+ }
113
+
114
+ # 插入列表
115
+ section {
116
+ list 'test1', 1
117
+ list 'test1', 2
118
+ list 'test3', 2
119
+ list 'test2', 1
120
+ list 'test2', 1
121
+ }
122
+
123
+ section {
124
+ # 插入链接
125
+ link 'baidu', 'http://www.baidu.com', text_align: 'center'
126
+ # 插入图片
127
+ image 'http://www.baidu.com/img/bd_logo1.png'
128
+ # 插入表格
129
+ table {
130
+ tr {
131
+ th 'id'
132
+ th 'name'
133
+ th 'age'
134
+ }
135
+ tr {
136
+ th '1'
137
+ th 'young'
138
+ th '66'
139
+ }
140
+ }
141
+ }
142
+
143
+
144
+ }
145
+ ```
146
+
147
+ # 文档
148
+ [查看文档](doc/README.md)
149
+
150
+ # 马上要做的
151
+ + 支持更多样式
152
+ + 支持markdown/html转换为word
153
+
154
+ # 贡献
155
+ 非常欢迎有兴趣的朋友加入到开发中,以下是提交流程
156
+ 1. fork this project
157
+ 2. git clone your fork project
158
+ 3. git checkout -b fixed-something
159
+ 4. git commit fixed some bug.
160
+ 5. git push to your fork project
161
+ 6. create a new pr to request merge
162
+
163
+ # 灵感
164
+ 首先非常感谢 [PHPWord](https://github.com/PHPOffice/PHPWord), 因为在无意中发现了 PHPWord 的这个非常强大项目, 并且该项目支持很多各种各样的特性。但是当我在寻找我大 Ruby 这类相关项目的时候居然找不到,本着学习的精神,参考了 PHPWord 的设计,就自己写了一个啦,欢迎 Star 支持一下。
165
+
166
+ # 协议
167
+ RubyWord is licensed under [The MIT License](LICENSE)
data/README.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # RubyWord: Microsoft Word Generation For Ruby
2
2
  > RubyWord is a simple, efficient Word document generation gem and easy to generate docx file.
3
3
 
4
+ # Language
5
+ * [English](README.md)
6
+ * [简体中文](README.cn.md)
7
+
8
+ # CHANGELOG
9
+ [ChANGELOG](CHANGELOG.md)
10
+
4
11
  # Please Read Before Use
5
12
  This project is under developing, and develop by myself until now, so the progress may be slow and there may be a lot of problems, but i will try my best to improve it and welcome everyone to join the development. Thanks for supporting.
6
13
 
@@ -14,6 +21,7 @@ gem 'rubyword'
14
21
  ```
15
22
  # Features
16
23
  + Support for setting the properties of the document, such as: title, subject, author and other information
24
+ + Support for insert a paragraph
17
25
  + Support for generated TOC for the title
18
26
  + Support for setting header and footer
19
27
  + Support for insert title which is different attributes, such as: title, sub title, etc.
@@ -21,7 +29,7 @@ gem 'rubyword'
21
29
  + Support for insert multiple images
22
30
  + Support for insert multiple lists
23
31
  + Support for insert hyperlink
24
-
32
+ + Support for insert table
25
33
  # Usage
26
34
  ```
27
35
  require "rubyword"
@@ -99,13 +107,26 @@ Rubyword::Document::generate('hello.docx') {
99
107
  # add a link
100
108
  link 'baidu', 'http://www.baidu.com', text_align: 'center'
101
109
  image 'http://www.baidu.com/img/bd_logo1.png'
110
+ # add table
111
+ table {
112
+ tr {
113
+ th 'id'
114
+ th 'name'
115
+ th 'age'
116
+ }
117
+ tr {
118
+ th '1'
119
+ th 'young'
120
+ th '66'
121
+ }
122
+ }
102
123
  }
103
124
  }
104
125
  ```
126
+ # Document
127
+ [More Information](doc/README.md)
105
128
 
106
129
  # TODO
107
- + Support table
108
- + Support paragraph
109
130
  + Support more style
110
131
  + Support Markdown/HTML to docx
111
132
 
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ file_path = File.join(File.expand_path('../../', __FILE__), 'example')
3
+ puts file_path
4
+ Dir.foreach(file_path) do |filename|
5
+ real_path = "#{file_path}/#{filename}"
6
+ next if File.directory?(real_path)
7
+ if filename != "." and filename != ".."
8
+ system "ruby #{real_path}"
9
+ puts "#{filename} done."
10
+ end
11
+ end
@@ -1 +1,18 @@
1
- # keep
1
+ # Rubyword Document
2
+
3
+ ### Example Text
4
+ + You can check and run the example in `/example` dir or run `/bin/run-example`
5
+
6
+ ### Feature List
7
+ + [Text](text.md)
8
+ + [Title](title.md)
9
+ + [Toc](toc.md)
10
+ + [Paragraph](paragraph.md)
11
+ + [List](list.md)
12
+ + [Link](link.md)
13
+ + [Image](image.md)
14
+ + [Table](table.md)
15
+ + [Header](header.md)
16
+ + [Footer](footer.md)
17
+ + [Doc Information](doc-information.md)
18
+
@@ -0,0 +1,16 @@
1
+ # Doc Information
2
+
3
+ ## Example
4
+ ```
5
+ Rubyword::Document::generate('hello.docx') {
6
+ information({
7
+ company: 'ruby word',
8
+ creator: 'young',
9
+ title: 'example word file',
10
+ description: 'this is a example docx',
11
+ subject: 'how to create doc info',
12
+ keywords: 'remark',
13
+ category: 'category'
14
+ })
15
+ }
16
+ ```
@@ -0,0 +1,19 @@
1
+ # Footer
2
+
3
+ ## Options
4
+ + text_align: 'left' | 'center' | 'right'
5
+ + nums_type: 'number' | 'roman', Desc: when you need page numer as a footer, the text(first param) must be nil
6
+
7
+ ## Example
8
+ ```
9
+ Rubyword::Document::generate('hello.docx') {
10
+ # insert footer with page number
11
+ add_footer nil, text_align: 'center', nums_type: 'number'
12
+
13
+ # insert footer with roman number
14
+ add_footer nil, text_align: 'center', nums_type: 'roman'
15
+
16
+ # insert footer with string
17
+ add_footer 'hello', text_align: 'center'
18
+ }
19
+ ```
@@ -0,0 +1,11 @@
1
+ # Header
2
+
3
+ ## Options
4
+ + text_align: 'left' | 'center' | 'right'
5
+
6
+ ## Example
7
+ ```
8
+ Rubyword::Document::generate('hello.docx') {
9
+ add_header 'rubyword'
10
+ }
11
+ ```
@@ -0,0 +1,10 @@
1
+ # Image
2
+
3
+ ## Example
4
+ ```
5
+ Rubyword::Document::generate('hello.docx') {
6
+ section {
7
+ image 'http://www.baidu.com/img/bd_logo1.png'
8
+ }
9
+ }
10
+ ```
@@ -0,0 +1,10 @@
1
+ # Link
2
+
3
+ ## Example
4
+ ```
5
+ Rubyword::Document::generate('hello.docx') {
6
+ section {
7
+ link 'baidu', 'http://www.baidu.com', text_align: 'center'
8
+ }
9
+ }
10
+ ```
@@ -0,0 +1,17 @@
1
+ # List
2
+
3
+ ## Options
4
+ + level: Number
5
+
6
+ ## Example
7
+ ```
8
+ Rubyword::Document::generate('hello.docx') {
9
+ section {
10
+ list 'list-1', 1
11
+ list 'list-second', 2
12
+ list 'test3', 2
13
+ list 'test2', 1
14
+ list 'test2', 1
15
+ }
16
+ }
17
+ ```
@@ -0,0 +1,27 @@
1
+ # Paragraph
2
+
3
+ ## Style
4
+ + font_size: Number | 16
5
+ + color: Number | 996699
6
+ + bgcolor: Number | 996699
7
+ + underline: Boolean | true
8
+ + blod: Boolean | true
9
+ + all_caps: Boolean | false
10
+ + italic: Boolean | false
11
+ + text_align: 'left' || 'center' || 'right',
12
+ + spacing: Number 200
13
+ + indent_left: Number 100
14
+ + indent_right: Number 200
15
+ + indent_between: Number 200
16
+
17
+ ## Example
18
+ ```
19
+ Rubyword::Document::generate('hello.docx') {
20
+ section {
21
+ p {
22
+ text 'This is a '
23
+ text 'apple, yellow apple', bgcolor: 'yellow', text_align: 'center'
24
+ }
25
+ }
26
+ }
27
+ ```