rubyword 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ ```