12
12
use PhpOffice \PhpWord \Media ;
13
13
use PhpOffice \PhpWord \Style ;
14
14
use PhpOffice \PhpWord \PhpWord ;
15
- use PhpOffice \PhpWord \Element \Image ;
16
- use PhpOffice \PhpWord \Element \Link ;
17
- use PhpOffice \PhpWord \Element \ListItem ;
18
- use PhpOffice \PhpWord \Element \Object ;
19
- use PhpOffice \PhpWord \Element \PageBreak ;
20
- use PhpOffice \PhpWord \Element \Table ;
21
- use PhpOffice \PhpWord \Element \Text ;
22
- use PhpOffice \PhpWord \Element \TextBreak ;
23
- use PhpOffice \PhpWord \Element \TextRun ;
24
- use PhpOffice \PhpWord \Element \Title ;
25
15
use PhpOffice \PhpWord \Exception \Exception ;
26
- use PhpOffice \PhpWord \Shared \Drawing ;
27
16
use PhpOffice \PhpWord \Shared \XMLWriter ;
28
17
use PhpOffice \PhpWord \Style \Font ;
29
18
use PhpOffice \PhpWord \Style \Paragraph ;
19
+ use PhpOffice \PhpWord \Writer \ODText \Element \Element as ElementWriter ;
30
20
31
21
/**
32
22
* ODText content part writer
@@ -90,27 +80,8 @@ public function writeContent(PhpWord $phpWord = null)
90
80
91
81
// $xmlWriter->startElement('text:section');
92
82
foreach ($ elements as $ element ) {
93
- if ($ element instanceof Text) {
94
- $ this ->writeText ($ xmlWriter , $ element );
95
- } elseif ($ element instanceof TextRun) {
96
- $ this ->writeTextRun ($ xmlWriter , $ element );
97
- } elseif ($ element instanceof Link) {
98
- $ this ->writeLink ($ xmlWriter , $ element );
99
- } elseif ($ element instanceof Title) {
100
- $ this ->writeTitle ($ xmlWriter , $ element );
101
- } elseif ($ element instanceof ListItem) {
102
- $ this ->writeListItem ($ xmlWriter , $ element );
103
- } elseif ($ element instanceof TextBreak) {
104
- $ this ->writeTextBreak ($ xmlWriter );
105
- } elseif ($ element instanceof PageBreak) {
106
- $ this ->writePageBreak ($ xmlWriter );
107
- } elseif ($ element instanceof Table) {
108
- $ this ->writeTable ($ xmlWriter , $ element );
109
- } elseif ($ element instanceof Image) {
110
- $ this ->writeImage ($ xmlWriter , $ element );
111
- } elseif ($ element instanceof Object) {
112
- $ this ->writeObject ($ xmlWriter , $ element );
113
- }
83
+ $ elementWriter = new ElementWriter ($ xmlWriter , $ this , $ element , false );
84
+ $ elementWriter ->write ();
114
85
}
115
86
// $xmlWriter->endElement(); // text:section
116
87
}
@@ -122,226 +93,6 @@ public function writeContent(PhpWord $phpWord = null)
122
93
return $ xmlWriter ->getData ();
123
94
}
124
95
125
- /**
126
- * Write text
127
- *
128
- * @param XMLWriter $xmlWriter
129
- * @param Text $text
130
- * @param bool $withoutP
131
- */
132
- protected function writeText (XMLWriter $ xmlWriter , Text $ text , $ withoutP = false )
133
- {
134
- $ styleFont = $ text ->getFontStyle ();
135
- $ styleParagraph = $ text ->getParagraphStyle ();
136
-
137
- // @todo Commented for TextRun. Should really checkout this value
138
- // $SfIsObject = ($styleFont instanceof Font) ? true : false;
139
- $ SfIsObject = false ;
140
-
141
- if ($ SfIsObject ) {
142
- // Don't never be the case, because I browse all sections for cleaning all styles not declared
143
- throw new Exception ('PhpWord : $SfIsObject wouldn \'t be an object ' );
144
- } else {
145
- if (!$ withoutP ) {
146
- $ xmlWriter ->startElement ('text:p ' ); // text:p
147
- }
148
- if (empty ($ styleFont )) {
149
- if (empty ($ styleParagraph )) {
150
- $ xmlWriter ->writeAttribute ('text:style-name ' , 'P1 ' );
151
- } elseif (is_string ($ styleParagraph )) {
152
- $ xmlWriter ->writeAttribute ('text:style-name ' , $ styleParagraph );
153
- }
154
- $ xmlWriter ->writeRaw ($ text ->getText ());
155
- } else {
156
- if (empty ($ styleParagraph )) {
157
- $ xmlWriter ->writeAttribute ('text:style-name ' , 'Standard ' );
158
- } elseif (is_string ($ styleParagraph )) {
159
- $ xmlWriter ->writeAttribute ('text:style-name ' , $ styleParagraph );
160
- }
161
- // text:span
162
- $ xmlWriter ->startElement ('text:span ' );
163
- if (is_string ($ styleFont )) {
164
- $ xmlWriter ->writeAttribute ('text:style-name ' , $ styleFont );
165
- }
166
- $ xmlWriter ->writeRaw ($ text ->getText ());
167
- $ xmlWriter ->endElement ();
168
- }
169
- if (!$ withoutP ) {
170
- $ xmlWriter ->endElement (); // text:p
171
- }
172
- }
173
- }
174
-
175
- /**
176
- * Write TextRun section
177
- *
178
- * @param XMLWriter $xmlWriter
179
- * @param TextRun $textrun
180
- * @todo Enable all other section types
181
- */
182
- protected function writeTextRun (XMLWriter $ xmlWriter , TextRun $ textrun )
183
- {
184
- $ elements = $ textrun ->getElements ();
185
- $ xmlWriter ->startElement ('text:p ' );
186
- if (count ($ elements ) > 0 ) {
187
- foreach ($ elements as $ element ) {
188
- if ($ element instanceof Text) {
189
- $ this ->writeText ($ xmlWriter , $ element , true );
190
- }
191
- }
192
- }
193
- $ xmlWriter ->endElement ();
194
- }
195
-
196
- /**
197
- * Write link element
198
- *
199
- * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
200
- */
201
- protected function writeLink (XMLWriter $ xmlWriter , Link $ link )
202
- {
203
- $ this ->writeUnsupportedElement ($ xmlWriter , 'Link ' );
204
- }
205
-
206
- /**
207
- * Write title element
208
- */
209
- protected function writeTitle (XMLWriter $ xmlWriter , Title $ title )
210
- {
211
- $ this ->writeUnsupportedElement ($ xmlWriter , 'Title ' );
212
- }
213
-
214
- /**
215
- * Write list item
216
- */
217
- protected function writeListItem (XMLWriter $ xmlWriter , ListItem $ listItem )
218
- {
219
- $ this ->writeUnsupportedElement ($ xmlWriter , 'ListItem ' );
220
- }
221
-
222
- /**
223
- * Write text break
224
- */
225
- protected function writeTextBreak (XMLWriter $ xmlWriter )
226
- {
227
- $ xmlWriter ->startElement ('text:p ' );
228
- $ xmlWriter ->writeAttribute ('text:style-name ' , 'Standard ' );
229
- $ xmlWriter ->endElement ();
230
- }
231
-
232
- /**
233
- * Write page break
234
- */
235
- protected function writePageBreak (XMLWriter $ xmlWriter )
236
- {
237
- $ this ->writeUnsupportedElement ($ xmlWriter , 'PageBreak ' );
238
- }
239
-
240
- /**
241
- * Write table
242
- */
243
- protected function writeTable (XMLWriter $ xmlWriter , Table $ table )
244
- {
245
- $ rows = $ table ->getRows ();
246
- $ rowCount = count ($ rows );
247
- $ colCount = $ table ->countColumns ();
248
- if ($ rowCount > 0 ) {
249
- $ xmlWriter ->startElement ('table:table ' );
250
- $ xmlWriter ->writeAttribute ('table:name ' , $ table ->getElementId ());
251
- $ xmlWriter ->writeAttribute ('table:style ' , $ table ->getElementId ());
252
-
253
- $ xmlWriter ->startElement ('table:table-column ' );
254
- $ xmlWriter ->writeAttribute ('table:number-columns-repeated ' , $ colCount );
255
- $ xmlWriter ->endElement (); // table:table-column
256
-
257
- foreach ($ rows as $ row ) {
258
- $ xmlWriter ->startElement ('table:table-row ' );
259
- foreach ($ row ->getCells () as $ cell ) {
260
- $ xmlWriter ->startElement ('table:table-cell ' );
261
- $ xmlWriter ->writeAttribute ('office:value-type ' , 'string ' );
262
- $ elements = $ cell ->getElements ();
263
- if (count ($ elements ) > 0 ) {
264
- foreach ($ elements as $ element ) {
265
- if ($ element instanceof Text) {
266
- $ this ->writeText ($ xmlWriter , $ element );
267
- } elseif ($ element instanceof TextRun) {
268
- $ this ->writeTextRun ($ xmlWriter , $ element );
269
- } elseif ($ element instanceof ListItem) {
270
- $ this ->writeListItem ($ xmlWriter , $ element );
271
- } elseif ($ element instanceof TextBreak) {
272
- $ this ->writeTextBreak ($ xmlWriter );
273
- } elseif ($ element instanceof Image) {
274
- $ this ->writeImage ($ xmlWriter , $ element );
275
- } elseif ($ element instanceof Object) {
276
- $ this ->writeObject ($ xmlWriter , $ element );
277
- }
278
- }
279
- } else {
280
- $ this ->writeTextBreak ($ xmlWriter );
281
- }
282
- $ xmlWriter ->endElement (); // table:table-cell
283
- }
284
- $ xmlWriter ->endElement (); // table:table-row
285
- }
286
- $ xmlWriter ->endElement (); // table:table
287
- }
288
- }
289
-
290
- /**
291
- * Write image
292
- */
293
- protected function writeImage (XMLWriter $ xmlWriter , Image $ element )
294
- {
295
- $ mediaIndex = $ element ->getMediaIndex ();
296
- $ target = 'Pictures/ ' . $ element ->getTarget ();
297
- $ style = $ element ->getStyle ();
298
- $ width = Drawing::pixelsToCentimeters ($ style ->getWidth ());
299
- $ height = Drawing::pixelsToCentimeters ($ style ->getHeight ());
300
-
301
- $ xmlWriter ->startElement ('text:p ' );
302
- $ xmlWriter ->writeAttribute ('text:style-name ' , 'Standard ' );
303
-
304
- $ xmlWriter ->startElement ('draw:frame ' );
305
- $ xmlWriter ->writeAttribute ('draw:style-name ' , 'fr ' . $ mediaIndex );
306
- $ xmlWriter ->writeAttribute ('draw:name ' , $ element ->getElementId ());
307
- $ xmlWriter ->writeAttribute ('text:anchor-type ' , 'as-char ' );
308
- $ xmlWriter ->writeAttribute ('svg:width ' , $ width . 'cm ' );
309
- $ xmlWriter ->writeAttribute ('svg:height ' , $ height . 'cm ' );
310
- $ xmlWriter ->writeAttribute ('draw:z-index ' , $ mediaIndex );
311
-
312
- $ xmlWriter ->startElement ('draw:image ' );
313
- $ xmlWriter ->writeAttribute ('xlink:href ' , $ target );
314
- $ xmlWriter ->writeAttribute ('xlink:type ' , 'simple ' );
315
- $ xmlWriter ->writeAttribute ('xlink:show ' , 'embed ' );
316
- $ xmlWriter ->writeAttribute ('xlink:actuate ' , 'onLoad ' );
317
- $ xmlWriter ->endElement (); // draw:image
318
-
319
- $ xmlWriter ->endElement (); // draw:frame
320
-
321
- $ xmlWriter ->endElement (); // text:p
322
- }
323
-
324
- /**
325
- * Write object
326
- */
327
- protected function writeObject (XMLWriter $ xmlWriter , Object $ element )
328
- {
329
- $ this ->writeUnsupportedElement ($ xmlWriter , 'Object ' );
330
- }
331
-
332
- /**
333
- * Write unsupported element
334
- *
335
- * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
336
- * @param string $element
337
- */
338
- private function writeUnsupportedElement (XMLWriter $ xmlWriter , $ element )
339
- {
340
- $ xmlWriter ->startElement ('text:p ' );
341
- $ xmlWriter ->writeRaw ($ element );
342
- $ xmlWriter ->endElement ();
343
- }
344
-
345
96
/**
346
97
* Write automatic styles
347
98
*/
0 commit comments