2020use PhpOffice \Common \XMLWriter ;
2121use PhpOffice \PhpWord \Element \Image as ImageElement ;
2222use PhpOffice \PhpWord \Writer \Word2007 \Style \Image as ImageStyleWriter ;
23+ use \PhpOffice \PhpWord \Shared \Converter ;
2324
2425/**
2526 * Image element writer
@@ -41,11 +42,7 @@ public function write()
4142 return ;
4243 }
4344
44- if ($ element ->isWatermark ()) {
45- $ this ->writeWatermark ($ xmlWriter , $ element );
46- } else {
47- $ this ->writeImage ($ xmlWriter , $ element );
48- }
45+ $ this ->writeImage ($ xmlWriter , $ element );
4946 }
5047
5148 /**
@@ -57,31 +54,99 @@ private function writeImage(XMLWriter $xmlWriter, ImageElement $element)
5754 {
5855 $ rId = $ element ->getRelationId () + ($ element ->isInSection () ? 6 : 0 );
5956 $ style = $ element ->getStyle ();
57+
6058 $ styleWriter = new ImageStyleWriter ($ xmlWriter , $ style );
6159
62- if (!$ this ->withoutP ) {
63- $ xmlWriter ->startElement ('w:p ' );
60+ $ cx = Converter::pixelToEmu ($ style ->getWidth ());
61+ $ cy = Converter::pixelToEmu ($ style ->getHeight ());
62+
63+ $ xmlWriter ->startElement ('w:p ' );
6464 $ styleWriter ->writeAlignment ();
65- }
66- $ this ->writeCommentRangeStart ();
65+ $ xmlWriter ->startElement ('w:r ' );
66+ $ xmlWriter ->startElement ('w:drawing ' );
67+ $ xmlWriter ->startElement ('wp:inline ' );
68+ $ xmlWriter ->writeAttribute ('distT ' , 0 );
69+ $ xmlWriter ->writeAttribute ('distB ' , 0 );
70+ $ xmlWriter ->writeAttribute ('distL ' , 114300 );
71+ $ xmlWriter ->writeAttribute ('distR ' , 114300 );
6772
68- $ xmlWriter ->startElement ('w:r ' );
69- $ xmlWriter ->startElement ( ' w:pict ' );
70- $ xmlWriter ->startElement ( ' v:shape ' );
71- $ xmlWriter ->writeAttribute ( ' type ' , ' #_x0000_t75 ' );
73+ $ xmlWriter ->startElement ('wp:extent ' );
74+ $ xmlWriter ->writeAttribute ( ' cx ' , $ cx );
75+ $ xmlWriter ->writeAttribute ( ' cy ' , $ cy );
76+ $ xmlWriter ->endElement (); //wp:extent
7277
73- $ styleWriter ->write ();
78+ $ xmlWriter ->startElement ('wp:docPr ' );
79+ $ xmlWriter ->writeAttribute ('id ' , $ rId );
80+ $ xmlWriter ->writeAttribute ('name ' , 'name ' );
81+ $ xmlWriter ->writeAttribute ('descr ' , 'aa ' );
82+ $ xmlWriter ->endElement (); // wp:docPr
7483
75- $ xmlWriter ->startElement ('v:imagedata ' );
76- $ xmlWriter ->writeAttribute ('r:id ' , 'rId ' . $ rId );
77- $ xmlWriter ->writeAttribute ('o:title ' , '' );
78- $ xmlWriter ->endElement (); // v:imagedata
84+ $ xmlWriter ->startElement ('wp:cNvGraphicFramePr ' );
85+ $ xmlWriter ->startElement ('a:graphicFrameLocks ' );
86+ $ xmlWriter ->writeAttribute ('xmlns:a ' , 'http://schemas.openxmlformats.org/drawingml/2006/main ' );
87+ $ xmlWriter ->writeAttribute ('noChangeAspect ' , 1 );
88+ $ xmlWriter ->endElement (); //a:graphicFrameLocks
89+ $ xmlWriter ->endElement (); // wp:cNvGraphicFramePr
7990
80- $ xmlWriter ->endElement (); // v:shape
81- $ xmlWriter ->endElement (); // w:pict
82- $ xmlWriter ->endElement (); // w:r
91+ $ xmlWriter ->startElement ('a:graphic ' );
92+ $ xmlWriter ->writeAttribute ('xmlns:a ' , 'http://schemas.openxmlformats.org/drawingml/2006/main ' );
93+ $ xmlWriter ->startElement ('a:graphicData ' );
94+ $ xmlWriter ->writeAttribute ('uri ' , 'http://schemas.openxmlformats.org/drawingml/2006/picture ' );
95+ $ xmlWriter ->startElement ('pic:pic ' );
96+ $ xmlWriter ->writeAttribute ('xmlns:pic ' , 'http://schemas.openxmlformats.org/drawingml/2006/picture ' );
97+
98+ $ xmlWriter ->startElement ('pic:nvPicPr ' );
99+ $ xmlWriter ->startElement ('pic:cNvPr ' );
100+ $ xmlWriter ->writeAttribute ('id ' , 3 );
101+ $ xmlWriter ->writeAttribute ('desc ' , 'aa ' );
102+ $ xmlWriter ->writeAttribute ('name ' , 'name ' );
103+ $ xmlWriter ->endElement (); //pic:cNvPr
104+
105+ $ xmlWriter ->startElement ('pic:cNvPicPr ' );
106+ $ xmlWriter ->startElement ('a:picLocks ' );
107+ $ xmlWriter ->writeAttribute ('noChangeAspect ' , '1 ' );
108+ $ xmlWriter ->endElement (); //a:picLocks
109+ $ xmlWriter ->endElement (); //pic:cNvPicPr
110+ $ xmlWriter ->endElement (); //pic:nvPicPr
111+
112+ $ xmlWriter ->startElement ('pic:blipFill ' );
113+ $ xmlWriter ->startElement ('a:blip ' );
114+ $ xmlWriter ->writeAttribute ('r:embed ' , 'rId ' .$ rId );
115+ $ xmlWriter ->endElement (); //a:blip
116+
117+ $ xmlWriter ->startElement ('a:stretch ' );
118+ $ xmlWriter ->startElement ('a:fillRect ' );
119+ $ xmlWriter ->endElement (); //a:fillRect
120+ $ xmlWriter ->endElement (); //a:stretch
121+ $ xmlWriter ->endElement (); //pic:blipFill
122+
123+ $ xmlWriter ->startElement ('pic:spPr ' );
124+ $ xmlWriter ->startElement ('a:xfrm ' );
125+ $ xmlWriter ->startElement ('a:off ' );
126+ $ xmlWriter ->writeAttribute ('x ' , 0 );
127+ $ xmlWriter ->writeAttribute ('y ' , 0 );
128+ $ xmlWriter ->endElement (); //a:off
129+
130+ $ xmlWriter ->startElement ('a:ext ' );
131+ $ xmlWriter ->writeAttribute ('cx ' , $ cx );
132+ $ xmlWriter ->writeAttribute ('cy ' , $ cy );
133+ $ xmlWriter ->endElement (); //a:ext
134+ $ xmlWriter ->endElement (); //a:xfrm
135+
136+ $ xmlWriter ->startElement ('a:prstGeom ' );
137+ $ xmlWriter ->writeAttribute ('prst ' , 'rect ' );
138+ $ xmlWriter ->startElement ('a:avLst ' );
139+ $ xmlWriter ->endElement (); //a:avLst
140+ $ xmlWriter ->endElement (); //a:prstGeom
141+ $ xmlWriter ->endElement (); //pic:spPr
83142
84- $ this ->endElementP ();
143+ $ xmlWriter ->endElement (); //pic:pic
144+ $ xmlWriter ->endElement (); //a:graphicData
145+ $ xmlWriter ->endElement (); //a:graphic
146+ $ xmlWriter ->endElement (); //wp:inline
147+ $ xmlWriter ->endElement (); //w:drawing
148+ $ xmlWriter ->endElement (); //w:r
149+ $ xmlWriter ->endElement (); //w:p
85150 }
86151
87152 /**
0 commit comments