1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Doctrine\Tests\DBAL\Query; |
4
|
|
|
|
5
|
|
|
use PHPUnit\Framework\TestCase; |
6
|
|
|
use DOMDocument; |
7
|
|
|
use PhpDocxTemplate\PhpDocxTemplate; |
8
|
|
|
use PhpDocxTemplate\DocxDocument; |
9
|
|
|
use Twig\Loader\ArrayLoader; |
10
|
|
|
use Twig\Environment; |
11
|
|
|
|
12
|
|
|
class PhpDocxTemplateTest extends TestCase |
13
|
|
|
{ |
14
|
|
|
private const TEMPLATE1 = __DIR__ . "/templates/template1.docx"; |
15
|
|
|
private const TEMPLATE2 = __DIR__ . "/templates/template2.docx"; |
16
|
|
|
private const TEMPLATE3 = __DIR__ . "/templates/template3.docx"; |
17
|
|
|
private const TEMPLATE4 = __DIR__ . "/templates/template4.docx"; |
18
|
|
|
|
19
|
|
|
public function testXmlToString(): void |
20
|
|
|
{ |
21
|
|
|
$xml = new DOMDocument('1.0'); |
22
|
|
|
$root = $xml->createElement('book'); |
23
|
|
|
$root = $xml->appendChild($root); |
24
|
|
|
$title = $xml->createElement('title'); |
25
|
|
|
$title = $root->appendChild($title); |
26
|
|
|
$text = $xml->createTextNode('Title'); |
27
|
|
|
$title->appendChild($text); |
28
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE1); |
29
|
|
|
|
30
|
|
|
$this->assertEquals( |
31
|
|
|
$reporter->xmlToString($xml), |
32
|
|
|
"<?xml version=\"1.0\"?>\n<book><title>Title</title></book>\n" |
33
|
|
|
); |
34
|
|
|
$reporter->close(); |
35
|
|
|
} |
36
|
|
|
|
37
|
|
|
public function testGetDocx(): void |
38
|
|
|
{ |
39
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE1); |
40
|
|
|
$this->assertInstanceOf(DocxDocument::class, $reporter->getDocx()); |
41
|
|
|
$reporter->close(); |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
public function testGetXml(): void |
45
|
|
|
{ |
46
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE1); |
47
|
|
|
$this->assertEquals( |
48
|
|
|
$reporter->getXml(), |
49
|
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" . |
50
|
|
|
"<w:document xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" " . |
51
|
|
|
"xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" " . |
52
|
|
|
"xmlns:cx1=\"http://schemas.microsoft.com/office/drawing/2015/9/8/chartex\" " . |
53
|
|
|
"xmlns:cx2=\"http://schemas.microsoft.com/office/drawing/2015/10/21/chartex\" " . |
54
|
|
|
"xmlns:cx3=\"http://schemas.microsoft.com/office/drawing/2016/5/9/chartex\" " . |
55
|
|
|
"xmlns:cx4=\"http://schemas.microsoft.com/office/drawing/2016/5/10/chartex\" " . |
56
|
|
|
"xmlns:cx5=\"http://schemas.microsoft.com/office/drawing/2016/5/11/chartex\" " . |
57
|
|
|
"xmlns:cx6=\"http://schemas.microsoft.com/office/drawing/2016/5/12/chartex\" " . |
58
|
|
|
"xmlns:cx7=\"http://schemas.microsoft.com/office/drawing/2016/5/13/chartex\" " . |
59
|
|
|
"xmlns:cx8=\"http://schemas.microsoft.com/office/drawing/2016/5/14/chartex\" " . |
60
|
|
|
"xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" " . |
61
|
|
|
"xmlns:aink=\"http://schemas.microsoft.com/office/drawing/2016/ink\" " . |
62
|
|
|
"xmlns:am3d=\"http://schemas.microsoft.com/office/drawing/2017/model3d\" " . |
63
|
|
|
"xmlns:o=\"urn:schemas-microsoft-com:office:office\" " . |
64
|
|
|
"xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" " . |
65
|
|
|
"xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" " . |
66
|
|
|
"xmlns:v=\"urn:schemas-microsoft-com:vml\" " . |
67
|
|
|
"xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" " . |
68
|
|
|
"xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" " . |
69
|
|
|
"xmlns:w10=\"urn:schemas-microsoft-com:office:word\" " . |
70
|
|
|
"xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" " . |
71
|
|
|
"xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" " . |
72
|
|
|
"xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" " . |
73
|
|
|
"xmlns:w16cid=\"http://schemas.microsoft.com/office/word/2016/wordml/cid\" " . |
74
|
|
|
"xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex\" " . |
75
|
|
|
"xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" " . |
76
|
|
|
"xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" " . |
77
|
|
|
"xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" " . |
78
|
|
|
"xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" " . |
79
|
|
|
"mc:Ignorable=\"w14 w15 w16se w16cid wp14\"><w:body><w:p w14:paraId=\"504F2588\" " . |
80
|
|
|
"w14:textId=\"54DF26C8\" w:rsidR=\"0090657C\" w:rsidRPr=\"00FA3F61\" " . |
81
|
|
|
"w:rsidRDefault=\"00FA3F61\" w:rsidP=\"00C13DD6\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/>" . |
82
|
|
|
"</w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>Hello {{ object }}!</w:t>" . |
83
|
|
|
"</w:r><w:bookmarkStart w:id=\"0\" w:name=\"_GoBack\"/><w:bookmarkEnd w:id=\"0\"/></w:p>" . |
84
|
|
|
"<w:sectPr w:rsidR=\"0090657C\" w:rsidRPr=\"00FA3F61\"><w:pgSz w:w=\"11906\" w:h=\"16838\"/>" . |
85
|
|
|
"<w:pgMar w:top=\"1134\" w:right=\"850\" w:bottom=\"1134\" w:left=\"1701\" w:header=\"708\" " . |
86
|
|
|
"w:footer=\"708\" w:gutter=\"0\"/><w:cols w:space=\"708\"/><w:docGrid w:linePitch=\"360\"/>" . |
87
|
|
|
"</w:sectPr></w:body></w:document>\n" |
88
|
|
|
); |
89
|
|
|
$reporter->close(); |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
public function testPatchXml(): void |
93
|
|
|
{ |
94
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE1); |
95
|
|
|
//test stripTags |
96
|
|
|
$xml = "{<tag>%Hello</w:t><w:t>\nworld%<tag>}\n{<tag>{Hi</w:t><w:t>\nthere}<tag>}\n"; |
97
|
|
|
$this->assertEquals( |
98
|
|
|
$reporter->patchXml($xml), |
99
|
|
|
"{%Hello\nworld%}\n{{Hi\nthere}}\n" |
100
|
|
|
); |
101
|
|
|
|
102
|
|
|
//test colspan |
103
|
|
|
$xml = "<w:tc xeLLm[t6;cT&!Z_#KI8cniins[)UX>TAnAaqg_a}sePvK.OO#Q=B-]cBDFM8UL]8m@i" . |
104
|
|
|
"Ct{% colspan val%}TkuSd<w:r meg+PYSJWO}~k<w:t></w:t></w:r>" . |
105
|
|
|
"<w:gridSpan88MJ@1bX/><w:tcPrL4><w:gridSpan@1bY/>?Nl`z:^kY@FXeJ@P{8WhCt0__/,8woI2." . |
106
|
|
|
"8#[r_Cqig!5Qt{8gl5ls<9Ci|^QN2IK#L[cB9@:XclVQQIxe</w:tc>"; |
107
|
|
|
$this->assertEquals( |
108
|
|
|
$reporter->patchXml($xml), |
109
|
|
|
'<w:tc xeLLm[t6;cT&!Z_#KI8cniins[)UX>TAnAaqg_a}sePvK.OO#Q=B-]cBDFM8UL]8m@iCtTkuSd<w:tcPrL4>' . |
110
|
|
|
'<w:gridSpan w:val="{{val}}"/><w:gridSpan@1bY/>?Nl`z:^kY@FXeJ@P{8WhCt0__/,8woI2.8#[r_Cqig!5Qt' . |
111
|
|
|
'{8gl5ls<9Ci|^QN2IK#L[cB9@:XclVQQIxe</w:tc>' |
112
|
|
|
); |
113
|
|
|
|
114
|
|
|
//test cellbg |
115
|
|
|
$xml = "<w:tc xeLLm[t6;cT&!Z_#KI8cniins[)UX>TAnAaqg_a}sePvK.OO#Q=B-]cBDFM8UL]8m@i" . |
116
|
|
|
"Ct{% cellbg val%}TkuSd<w:r meg+PYSJWO}~k<w:t></w:t></w:r>" . |
117
|
|
|
"<w:shd88MJ@1bX/><w:tcPrL4><w:shd@1bY/>?Nl`z:^kY@FXeJ@P{8WhCt0__/,8woI2." . |
118
|
|
|
"8#[r_Cqig!5Qt{8gl5ls<9Ci|^QN2IK#L[cB9@:XclVQQIxe</w:tc>"; |
119
|
|
|
$this->assertEquals( |
120
|
|
|
$reporter->patchXml($xml), |
121
|
|
|
'<w:tc xeLLm[t6;cT&!Z_#KI8cniins[)UX>TAnAaqg_a}sePvK.OO#Q=B-]cBDFM8UL]8m@iCtTkuSd<w:tcPrL4>' . |
122
|
|
|
'<w:shd w:val="clear" w:color="auto" w:fill="{{val}}"/><w:shd@1bY/>?Nl`z:^kY@FXeJ@P{8WhCt0__/,' . |
123
|
|
|
'8woI2.8#[r_Cqig!5Qt{8gl5ls<9Ci|^QN2IK#L[cB9@:XclVQQIxe</w:tc>' |
124
|
|
|
); |
125
|
|
|
|
126
|
|
|
//test avoid {{r and {%r tags |
127
|
|
|
$xml = "<w:t>[x&\P^XIk]sdD((KK{%r .S-ce4F!b,l8Qo`(>NA;%}"; |
128
|
|
|
$this->assertEquals( |
129
|
|
|
$reporter->patchXml($xml), |
130
|
|
|
'<w:t xml:space="preserve">[x&\P^XIk]sdD((KK</w:t></w:r><w:r><w:t xml:space="preserve">' . |
131
|
|
|
'{%r .S-ce4F!b,l8Qo`(>NA;%}</w:t></w:r><w:r><w:t xml:space="preserve">' |
132
|
|
|
); |
133
|
|
|
$xml = "{%r _Rom{X=aC3/s#W#~o<#d:tH^>DTAz;s<}O0RJ#V!wW:]%kR@wzLf*\iu^zAGrr!3]v<SUc|B)o>kA.:*1?,0%}"; |
134
|
|
|
$this->assertEquals( |
135
|
|
|
$reporter->patchXml($xml), |
136
|
|
|
'</w:t></w:r><w:r><w:t xml:space="preserve">{%r _Rom{X=aC3/s#W#~o<#d:tH^>DTAz;s<}O0RJ#V!wW:]%kR' . |
137
|
|
|
'@wzLf*\iu^zAGrr!3]v<SUc|B)o>kA.:*1?,0%}</w:t></w:r><w:r><w:t xml:space="preserve">' |
138
|
|
|
); |
139
|
|
|
|
140
|
|
|
// test |
141
|
|
|
$xml = "<w:trs>RaYI}@{{trs :k!HJO Z36#T1$3U>6F.=y1_y5w:I7uAWs=_n-(ix*HXPd7){>{V|yPkDIa=" . |
142
|
|
|
"cLlQwozlcjFn<_(`&32 PZ1e5_Pqbc@zFR!r0(%}S'orf,78A<S nR=E</w:trs>"; |
143
|
|
|
$this->assertEquals( |
144
|
|
|
$reporter->patchXml($xml), |
145
|
|
|
'{{ :k!HJO Z36#T1$3U>6F.=y1_y5w:I7uAWs=_n-(ix*HXPd7){>{V|yPkDIa=cLlQwozlcjFn<_(`&32 PZ1e5_Pqbc@zFR!r0(%}' |
146
|
|
|
); |
147
|
|
|
|
148
|
|
|
// test vMerge |
149
|
|
|
$xml = "<w:tc></w:tcPr>t/H-Q.X)jC_sI6(J7w-;QI&JpDG}:>f02Zls<8(7&SEyc>" . |
150
|
|
|
"`@P/<Ero^KEbL`EX^<w:t>{% vm %}</w:t></w:tc>"; |
151
|
|
|
$this->assertEquals( |
152
|
|
|
$reporter->patchXml($xml), |
153
|
|
|
'<w:tc><w:vMerge w:val="{% if loop.first %}restart{% else %}continue' . |
154
|
|
|
'{% endif %}"/></w:tcPr>t/H-Q.X)jC_sI6(J7w-;QI&JpDG}:>f02Zls<8(7&SEyc>`' . |
155
|
|
|
'@P/<Ero^KEbL`EX^<w:t>{% if loop.first %}{% endif %}</w:t></w:tc>' |
156
|
|
|
); |
157
|
|
|
|
158
|
|
|
// test hMerge |
159
|
|
|
$xml = "<w:tc></w:tcPr>t/H-Q.X)jC_sI6(J7w-;QI&JpDG}:>f02Zls<8(7&SEyc>" . |
160
|
|
|
"`@P/<Ero^KEbL`EX^<w:t>{% hm %}</w:t></w:tc>"; |
161
|
|
|
$this->assertEquals( |
162
|
|
|
$reporter->patchXml($xml), |
163
|
|
|
'{% if loop.first %}<w:tc><w:gridSpan w:val="{{ loop.length }}"/></w:tcPr>t/H-Q.X)' . |
164
|
|
|
'jC_sI6(J7w-;QI&JpDG}:>f02Zls<8(7&SEyc>`@P/<Ero^KEbL`EX^<w:t></w:t></w:tc>{% endif %}' |
165
|
|
|
); |
166
|
|
|
|
167
|
|
|
// test cleanTags |
168
|
|
|
$xml = '{%‘<>“”‘’%}'; |
169
|
|
|
$this->assertEquals( |
170
|
|
|
$reporter->patchXml($xml), |
171
|
|
|
"{%'<>\"\"''%}" |
172
|
|
|
); |
173
|
|
|
$reporter->close(); |
174
|
|
|
} |
175
|
|
|
|
176
|
|
|
public function testRenderXml(): void |
177
|
|
|
{ |
178
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE1); |
179
|
|
|
$this->assertEquals( |
180
|
|
|
$reporter->buildXml(["object" => "world"]), |
181
|
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" . |
182
|
|
|
"<w:document xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" " . |
183
|
|
|
"xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" " . |
184
|
|
|
"xmlns:cx1=\"http://schemas.microsoft.com/office/drawing/2015/9/8/chartex\" " . |
185
|
|
|
"xmlns:cx2=\"http://schemas.microsoft.com/office/drawing/2015/10/21/chartex\" " . |
186
|
|
|
"xmlns:cx3=\"http://schemas.microsoft.com/office/drawing/2016/5/9/chartex\" " . |
187
|
|
|
"xmlns:cx4=\"http://schemas.microsoft.com/office/drawing/2016/5/10/chartex\" " . |
188
|
|
|
"xmlns:cx5=\"http://schemas.microsoft.com/office/drawing/2016/5/11/chartex\" " . |
189
|
|
|
"xmlns:cx6=\"http://schemas.microsoft.com/office/drawing/2016/5/12/chartex\" " . |
190
|
|
|
"xmlns:cx7=\"http://schemas.microsoft.com/office/drawing/2016/5/13/chartex\" " . |
191
|
|
|
"xmlns:cx8=\"http://schemas.microsoft.com/office/drawing/2016/5/14/chartex\" " . |
192
|
|
|
"xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" " . |
193
|
|
|
"xmlns:aink=\"http://schemas.microsoft.com/office/drawing/2016/ink\" " . |
194
|
|
|
"xmlns:am3d=\"http://schemas.microsoft.com/office/drawing/2017/model3d\" " . |
195
|
|
|
"xmlns:o=\"urn:schemas-microsoft-com:office:office\" " . |
196
|
|
|
"xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" " . |
197
|
|
|
"xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" " . |
198
|
|
|
"xmlns:v=\"urn:schemas-microsoft-com:vml\" " . |
199
|
|
|
"xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" " . |
200
|
|
|
"xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" " . |
201
|
|
|
"xmlns:w10=\"urn:schemas-microsoft-com:office:word\" " . |
202
|
|
|
"xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" " . |
203
|
|
|
"xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" " . |
204
|
|
|
"xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" " . |
205
|
|
|
"xmlns:w16cid=\"http://schemas.microsoft.com/office/word/2016/wordml/cid\" " . |
206
|
|
|
"xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex\" " . |
207
|
|
|
"xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" " . |
208
|
|
|
"xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" " . |
209
|
|
|
"xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" " . |
210
|
|
|
"xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" " . |
211
|
|
|
"mc:Ignorable=\"w14 w15 w16se w16cid wp14\"><w:body><w:p w14:paraId=\"504F2588\" " . |
212
|
|
|
"w14:textId=\"54DF26C8\" w:rsidR=\"0090657C\" w:rsidRPr=\"00FA3F61\" " . |
213
|
|
|
"w:rsidRDefault=\"00FA3F61\" w:rsidP=\"00C13DD6\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/>" . |
214
|
|
|
"</w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>Hello world!</w:t>" . |
215
|
|
|
"</w:r><w:bookmarkStart w:id=\"0\" w:name=\"_GoBack\"/><w:bookmarkEnd w:id=\"0\"/></w:p>" . |
216
|
|
|
"<w:sectPr w:rsidR=\"0090657C\" w:rsidRPr=\"00FA3F61\"><w:pgSz w:w=\"11906\" w:h=\"16838\"/>" . |
217
|
|
|
"<w:pgMar w:top=\"1134\" w:right=\"850\" w:bottom=\"1134\" w:left=\"1701\" w:header=\"708\" " . |
218
|
|
|
"w:footer=\"708\" w:gutter=\"0\"/><w:cols w:space=\"708\"/><w:docGrid w:linePitch=\"360\"/>" . |
219
|
|
|
"</w:sectPr></w:body></w:document>\n" |
220
|
|
|
); |
221
|
|
|
$reporter->close(); |
222
|
|
|
} |
223
|
|
|
|
224
|
|
|
public function testRender(): void |
225
|
|
|
{ |
226
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE2); |
227
|
|
|
$reporter->render(["one" => "1", "two" => "2", "three" => "3", "four" => "4"]); |
228
|
|
|
$this->assertEquals( |
229
|
|
|
$reporter->getXml(), |
230
|
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" . |
231
|
|
|
"<w:document xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" xmlns:c" . |
232
|
|
|
"x=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" xmlns:cx1=\"http://schemas.microsoft." . |
233
|
|
|
"com/office/drawing/2015/9/8/chartex\" xmlns:cx2=\"http://schemas.microsoft.com/office/drawing/2015/1" . |
234
|
|
|
"0/21/chartex\" xmlns:cx3=\"http://schemas.microsoft.com/office/drawing/2016/5/9/chartex\" xmlns:cx4=" . |
235
|
|
|
"\"http://schemas.microsoft.com/office/drawing/2016/5/10/chartex\" xmlns:cx5=\"http://schemas.microso" . |
236
|
|
|
"ft.com/office/drawing/2016/5/11/chartex\" xmlns:cx6=\"http://schemas.microsoft.com/office/drawing/20" . |
237
|
|
|
"16/5/12/chartex\" xmlns:cx7=\"http://schemas.microsoft.com/office/drawing/2016/5/13/chartex\" xmlns:" . |
238
|
|
|
"cx8=\"http://schemas.microsoft.com/office/drawing/2016/5/14/chartex\" xmlns:mc=\"http://schemas.open" . |
239
|
|
|
"xmlformats.org/markup-compatibility/2006\" xmlns:aink=\"http://schemas.microsoft.com/office/drawing/" . |
240
|
|
|
"2016/ink\" xmlns:am3d=\"http://schemas.microsoft.com/office/drawing/2017/model3d\" xmlns:o=\"urn:sch" . |
241
|
|
|
"emas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/r" . |
242
|
|
|
"elationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:" . |
243
|
|
|
"schemas-microsoft-com:vml\" xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessin" . |
244
|
|
|
"gDrawing\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns" . |
245
|
|
|
":w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordproce" . |
246
|
|
|
"ssingml/2006/main\" xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" xmlns:w15=\"h" . |
247
|
|
|
"ttp://schemas.microsoft.com/office/word/2012/wordml\" xmlns:w16cid=\"http://schemas.microsoft.com/of" . |
248
|
|
|
"fice/word/2016/wordml/cid\" xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex" . |
249
|
|
|
"\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" xmlns:wpi=\"http:" . |
250
|
|
|
"//schemas.microsoft.com/office/word/2010/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.co" . |
251
|
|
|
"m/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessing" . |
252
|
|
|
"Shape\" mc:Ignorable=\"w14 w15 w16se w16cid wp14\"><w:body><w:tbl><w:tblPr><w:tblStyle w:val=\"a3\"/" . |
253
|
|
|
"><w:tblW w:w=\"0\" w:type=\"auto\"/><w:tblLook w:val=\"04A0\" w:firstRow=\"1\" w:lastRow=\"0\" w:fir" . |
254
|
|
|
"stColumn=\"1\" w:lastColumn=\"0\" w:noHBand=\"0\" w:noVBand=\"1\"/></w:tblPr><w:tblGrid><w:gridCol w" . |
255
|
|
|
":w=\"3115\"/><w:gridCol w:w=\"3115\"/><w:gridCol w:w=\"3115\"/></w:tblGrid><w:tr w:rsidR=\"00031864" . |
256
|
|
|
"\" w14:paraId=\"73B274FD\" w14:textId=\"77777777\" w:rsidTr=\"00135B64\"><w:tc><w:tcPr><w:tcW w:w=\"3" . |
257
|
|
|
"115\" w:type=\"dxa\"/></w:tcPr><w:p w14:paraId=\"29117FB3\" w14:textId=\"713E58B3\" w:rsidR=\"000318" . |
258
|
|
|
"64\" w:rsidRPr=\"0033062B\" w:rsidRDefault=\"00031864\" w:rsidP=\"0033062B\"><w:pPr><w:rPr><w:lang w" . |
259
|
|
|
":val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>1</w:t></w:r></w:p" . |
260
|
|
|
"></w:tc><w:tc><w:tcPr><w:tcW w:w=\"6230\" w:type=\"dxa\"/><w:gridSpan w:val=\"2\"/></w:tcPr><w:p w14" . |
261
|
|
|
":paraId=\"4620CF03\" w14:textId=\"7FD6FF29\" w:rsidR=\"00031864\" w:rsidRPr=\"00B6314C\" w:rsidRDefa" . |
262
|
|
|
"ult=\"00B6314C\" w:rsidP=\"0033062B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:rPr></w:pPr><w:r><w" . |
263
|
|
|
":rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>1</w:t></w:r></w:p></w:tc></w:tr><w:tr w:rsidR=\"00031864" . |
264
|
|
|
"\" w14:paraId=\"638CAE21\" w14:textId=\"77777777\" w:rsidTr=\"0033062B\"><w:tc><w:tcPr><w:tcW w:w=\"" . |
265
|
|
|
"3115\" w:type=\"dxa\"/><w:vMerge w:val=\"restart\"/></w:tcPr><w:p w14:paraId=\"69D3958C\" w14:textId" . |
266
|
|
|
"=\"77777777\" w:rsidR=\"00031864\" w:rsidRPr=\"0033062B\" w:rsidRDefault=\"00031864\" w:rsidP=\"0033" . |
267
|
|
|
"062B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/><" . |
268
|
|
|
"/w:rPr><w:t>2</w:t></w:r></w:p><w:p w14:paraId=\"203EF204\" w14:textId=\"751D091A\" w:rsidR=\"000318" . |
269
|
|
|
"64\" w:rsidRPr=\"0033062B\" w:rsidRDefault=\"00031864\" w:rsidP=\"0033062B\"><w:pPr><w:rPr><w:lang w" . |
270
|
|
|
":val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>3</w:t></w:r></w:p" . |
271
|
|
|
"></w:tc><w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=\"dxa\"/></w:tcPr><w:p w14:paraId=\"29D750B5\" w14:" . |
272
|
|
|
"textId=\"52111D71\" w:rsidR=\"00031864\" w:rsidRPr=\"00B6314C\" w:rsidRDefault=\"00B6314C\" w:rsidP=" . |
273
|
|
|
"\"0033062B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-U" . |
274
|
|
|
"S\"/></w:rPr><w:t>2</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=\"dxa\"/></w:tc" . |
275
|
|
|
"Pr><w:p w14:paraId=\"443FEDA5\" w14:textId=\"77777777\" w:rsidR=\"00031864\" w:rsidRDefault=\"000318" . |
276
|
|
|
"64\" w:rsidP=\"0033062B\"/></w:tc></w:tr><w:tr w:rsidR=\"00031864\" w14:paraId=\"3400FAC6\" w14:text" . |
277
|
|
|
"Id=\"77777777\" w:rsidTr=\"0033062B\"><w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=\"dxa\"/><w:vMerge/><" . |
278
|
|
|
"/w:tcPr><w:p w14:paraId=\"27010401\" w14:textId=\"299C3CC2\" w:rsidR=\"00031864\" w:rsidRPr=\"003306" . |
279
|
|
|
"2B\" w:rsidRDefault=\"00031864\" w:rsidP=\"0033062B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:rPr" . |
280
|
|
|
"></w:pPr></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=\"dxa\"/></w:tcPr><w:p w14:paraId=\"6" . |
281
|
|
|
"D034FEF\" w14:textId=\"6465FA34\" w:rsidR=\"00031864\" w:rsidRPr=\"00B6314C\" w:rsidRDefault=\"00B63" . |
282
|
|
|
"14C\" w:rsidP=\"0033062B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lan" . |
283
|
|
|
"g w:val=\"en-US\"/></w:rPr><w:t>3</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=" . |
284
|
|
|
"\"dxa\"/></w:tcPr><w:p w14:paraId=\"331E7F28\" w14:textId=\"77777777\" w:rsidR=\"00031864\" w:rsidRDe" . |
285
|
|
|
"fault=\"00031864\" w:rsidP=\"0033062B\"/></w:tc></w:tr><w:tr w:rsidR=\"0033062B\" w14:paraId=\"489E0" . |
286
|
|
|
"54E\" w14:textId=\"77777777\" w:rsidTr=\"0033062B\"><w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=\"dxa\"" . |
287
|
|
|
"/></w:tcPr><w:p w14:paraId=\"24A13E38\" w14:textId=\"18E3B4BC\" w:rsidR=\"0033062B\" w:rsidRPr=\"003" . |
288
|
|
|
"3062B\" w:rsidRDefault=\"0033062B\" w:rsidP=\"0033062B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:" . |
289
|
|
|
"rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>4</w:t></w:r></w:p></w:tc><w:tc><w:tcP" . |
290
|
|
|
"r><w:tcW w:w=\"3115\" w:type=\"dxa\"/></w:tcPr><w:p w14:paraId=\"58DCBE56\" w14:textId=\"5D680B0D\" " . |
291
|
|
|
"w:rsidR=\"0033062B\" w:rsidRPr=\"00B6314C\" w:rsidRDefault=\"00B6314C\" w:rsidP=\"0033062B\"><w:pPr>" . |
292
|
|
|
"<w:rPr><w:lang w:val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w:rPr><w:t>4<" . |
293
|
|
|
"/w:t></w:r><w:bookmarkStart w:id=\"0\" w:name=\"_GoBack\"/><w:bookmarkEnd w:id=\"0\"/></w:p></w:tc><" . |
294
|
|
|
"w:tc><w:tcPr><w:tcW w:w=\"3115\" w:type=\"dxa\"/></w:tcPr><w:p w14:paraId=\"277EDAD6\" w14:textId=\"" . |
295
|
|
|
"77777777\" w:rsidR=\"0033062B\" w:rsidRDefault=\"0033062B\" w:rsidP=\"0033062B\"/></w:tc></w:tr></w:" . |
296
|
|
|
"tbl><w:p w14:paraId=\"504F2588\" w14:textId=\"658244D8\" w:rsidR=\"0090657C\" w:rsidRPr=\"0033062B\"" . |
297
|
|
|
" w:rsidRDefault=\"0090657C\" w:rsidP=\"0033062B\"/><w:sectPr w:rsidR=\"0090657C\" w:rsidRPr=\"003306" . |
298
|
|
|
"2B\"><w:pgSz w:w=\"11906\" w:h=\"16838\"/><w:pgMar w:top=\"1134\" w:right=\"850\" w:bottom=\"1134\" " . |
299
|
|
|
"w:left=\"1701\" w:header=\"708\" w:footer=\"708\" w:gutter=\"0\"/><w:cols w:space=\"708\"/><w:docGri" . |
300
|
|
|
"d w:linePitch=\"360\"/></w:sectPr></w:body></w:document>\n" |
301
|
|
|
); |
302
|
|
|
$reporter->save("./tmp/test.docx"); |
303
|
|
|
} |
304
|
|
|
|
305
|
|
|
public function testCyrillic(): void |
306
|
|
|
{ |
307
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE3); |
308
|
|
|
$reporter->render(["один" => "значение"]); |
309
|
|
|
$this->assertEquals( |
310
|
|
|
$reporter->getXml(), |
311
|
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" . |
312
|
|
|
"<w:document xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" xmlns:c" . |
313
|
|
|
"x=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" xmlns:cx1=\"http://schemas.microsoft." . |
314
|
|
|
"com/office/drawing/2015/9/8/chartex\" xmlns:cx2=\"http://schemas.microsoft.com/office/drawing/2015/1" . |
315
|
|
|
"0/21/chartex\" xmlns:cx3=\"http://schemas.microsoft.com/office/drawing/2016/5/9/chartex\" xmlns:cx4=" . |
316
|
|
|
"\"http://schemas.microsoft.com/office/drawing/2016/5/10/chartex\" xmlns:cx5=\"http://schemas.microso" . |
317
|
|
|
"ft.com/office/drawing/2016/5/11/chartex\" xmlns:cx6=\"http://schemas.microsoft.com/office/drawing/20" . |
318
|
|
|
"16/5/12/chartex\" xmlns:cx7=\"http://schemas.microsoft.com/office/drawing/2016/5/13/chartex\" xmlns:" . |
319
|
|
|
"cx8=\"http://schemas.microsoft.com/office/drawing/2016/5/14/chartex\" xmlns:mc=\"http://schemas.open" . |
320
|
|
|
"xmlformats.org/markup-compatibility/2006\" xmlns:aink=\"http://schemas.microsoft.com/office/drawing/" . |
321
|
|
|
"2016/ink\" xmlns:am3d=\"http://schemas.microsoft.com/office/drawing/2017/model3d\" xmlns:o=\"urn:sch" . |
322
|
|
|
"emas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/r" . |
323
|
|
|
"elationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:" . |
324
|
|
|
"schemas-microsoft-com:vml\" xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessin" . |
325
|
|
|
"gDrawing\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns" . |
326
|
|
|
":w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordproce" . |
327
|
|
|
"ssingml/2006/main\" xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" xmlns:w15=\"h" . |
328
|
|
|
"ttp://schemas.microsoft.com/office/word/2012/wordml\" xmlns:w16cid=\"http://schemas.microsoft.com/of" . |
329
|
|
|
"fice/word/2016/wordml/cid\" xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex" . |
330
|
|
|
"\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" xmlns:wpi=\"http:" . |
331
|
|
|
"//schemas.microsoft.com/office/word/2010/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.co" . |
332
|
|
|
"m/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessing" . |
333
|
|
|
"Shape\" mc:Ignorable=\"w14 w15 w16se w16cid wp14\"><w:body><w:p w14:paraId=\"504F2588\" w14:textId=" . |
334
|
|
|
"\"0B366F38\" w:rsidR=\"0090657C\" w:rsidRPr=\"00BC38E6\" w:rsidRDefault=\"00BC38E6\" w:rsidP=\"003306" . |
335
|
|
|
"2B\"><w:pPr><w:rPr><w:lang w:val=\"en-US\"/></w:rPr></w:pPr><w:r><w:rPr><w:lang w:val=\"en-US\"/></w" . |
336
|
|
|
":rPr><w:t xml:space=\"preserve\">значение</w:t></w:r><w:bookmarkStart w:id=\"0\" w:name=\"_GoBack\"/>" . |
337
|
|
|
"<w:bookmarkEnd w:id=\"0\"/></w:p><w:sectPr w:rsidR=\"0090657C\" w:rsidRPr=\"00BC38E6\"><w:pgSz w:w=\"" . |
338
|
|
|
"11906\" w:h=\"16838\"/><w:pgMar w:top=\"1134\" w:right=\"850\" w:bottom=\"1134\" w:left=\"1701\" w:he" . |
339
|
|
|
"ader=\"708\" w:footer=\"708\" w:gutter=\"0\"/><w:cols w:space=\"708\"/><w:docGrid w:linePitch=\"360\"/><" . |
340
|
|
|
"/w:sectPr></w:body></w:document>\n" |
341
|
|
|
); |
342
|
|
|
} |
343
|
|
|
|
344
|
|
|
public function testForLoop(): void |
345
|
|
|
{ |
346
|
|
|
$reporter = new PhpDocxTemplate(self::TEMPLATE4); |
347
|
|
|
$reporter->render(["сотрудники" => [ |
348
|
|
|
[ |
349
|
|
|
"фамилия" => "Иванов", |
350
|
|
|
"имя" => "Иван", |
351
|
|
|
"отчество" => "Иванович", |
352
|
|
|
"дети" => [ |
353
|
|
|
[ |
354
|
|
|
"фамилия" => "Иванова", |
355
|
|
|
"имя" => "Алена", |
356
|
|
|
"отчество" => "Ивановна", |
357
|
|
|
"возраст" => 25 |
358
|
|
|
], |
359
|
|
|
[ |
360
|
|
|
"фамилия" => "Иванов", |
361
|
|
|
"имя" => "Михаил", |
362
|
|
|
"отчество" => "Иванович", |
363
|
|
|
"возраст" => 6 |
364
|
|
|
] |
365
|
|
|
], |
366
|
|
|
"возраст" => 50 |
367
|
|
|
], |
368
|
|
|
[ |
369
|
|
|
"фамилия" => "Петров", |
370
|
|
|
"имя" => "Петр", |
371
|
|
|
"отчество" => "Петрович", |
372
|
|
|
"возраст" => 30 |
373
|
|
|
] |
374
|
|
|
]]); |
375
|
|
|
//echo $reporter->getXml(); |
376
|
|
|
$reporter->save("./tmp/report4.docx"); |
377
|
|
|
} |
378
|
|
|
} |
379
|
|
|
|