Page 1 of 1

How to read an image (bar/pie chart) from docx file

PostPosted: Thu Jan 15, 2015 9:05 pm
by shanmukhan
I have a word document in docx format with arithmetic questions and answers including symbols like summation, integration and pie charts / bar charts.

Using docx4j I am able to read text from docx but I am not able to read images (to save them in a clob).

My objective is to read an image and write into a jpg/jpeg file. Please find the attached docx file.

I have used org.docx4j.samples.OpenMainDocumentAndTraverse to travese the doc and able to print text values.
if (o instanceof org.docx4j.wml.Text) { text = ((org.docx4j.wml.Text) o).getValue();


Please guide me in getting this.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Thu Jan 15, 2015 10:17 pm
by jason
Do you want to extract all the images in the main document part (irrespective of where they occur), or do you need to know their context (eg adjacent text)?

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Thu Jan 15, 2015 11:15 pm
by shanmukhan
Hi jason,
I want to know their context(ex adjacent text) also.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Sun Jan 18, 2015 5:48 am
by shanmukhan
Hi jason,
Please help me in reading an image (bar/pie chart) from docx file. This image i want to save as a jpg/png file

Thanks
Shanmukhan

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Sun Jan 18, 2015 11:53 am
by jason
Do you mean something like:ge

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
        <w:drawing>
          <wp:inline distT="0" distB="0" distL="0" distR="0">
            <wp:extent cx="5486400" cy="3200400"/>
            <wp:effectExtent l="0" t="0" r="19050" b="19050"/>
            <wp:docPr id="1" name="Chart 1"/>
            <wp:cNvGraphicFramePr/>
            <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
              <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/chart">
                <c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId5"/>
              </a:graphicData>
            </a:graphic>
          </wp:inline>
        </w:drawing>
 
Parsed in 0.002 seconds, using GeSHi 1.0.8.4


ie with a c:chart element?

In this example there is no image; Word generates it on the fly from the embedded data.

If you mean something else, feel free to attach a sample docx.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Tue Jan 20, 2015 2:23 am
by shanmukhan
Hi jason,
Please find the attached Maths_Input_Data.docx file.
I want parse the docx file and store each type of input data ( each questions) in a database.
Later randomly (not in the order) retrieve these questions and display it on a html page.

Please let me know how to generate bar/pie charts and other drawings mentioned in the attachment as it is in a html page.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Tue Jan 20, 2015 9:13 am
by jason
This is all pushing the limits of what you can do easily. Your easiest approach might be to use Word to convert these objects to simple images.

In your example docx,

OMML (your first 4 examples), as i suggested to you on StackOverflow, xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" so you can investigate omml2mathml and then use mathml tools to get your final output.

The chart - see my previous post in this thread.

The geometrical drawing:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
   <w:p w:rsidR="00962004" w:rsidRDefault="00BF722E" w:rsidP="00B8629A">
      <w:r>
        <w:rPr>
          <w:noProof/>
          <w:lang w:bidi="te-IN"/>
        </w:rPr>
        <mc:AlternateContent>
          <mc:Choice Requires="wps">
            <w:drawing>
              <wp:anchor distT="0" distB="0" distL="114300" distR="114300" simplePos="0" relativeHeight="251669504" behindDoc="0" locked="0" layoutInCell="1" allowOverlap="1">
                <wp:simplePos x="0" y="0"/>
                <wp:positionH relativeFrom="column">
                  <wp:posOffset>1219835</wp:posOffset>
                </wp:positionH>
                <wp:positionV relativeFrom="paragraph">
                  <wp:posOffset>641985</wp:posOffset>
                </wp:positionV>
                <wp:extent cx="243840" cy="194945"/>
                <wp:effectExtent l="635" t="3810" r="3175" b="1270"/>
                <wp:wrapNone/>
                <wp:docPr id="28" name="Text Box 18"/>
                <wp:cNvGraphicFramePr>
                  <a:graphicFrameLocks xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"/>
                </wp:cNvGraphicFramePr>
                <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                  <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                    <wps:wsp>
                      <wps:cNvSpPr txBox="1">
                        <a:spLocks noChangeArrowheads="1"/>
                      </wps:cNvSpPr>
                      <wps:spPr bwMode="auto">
                        <a:xfrm>
                          <a:off x="0" y="0"/>
                          <a:ext cx="243840" cy="194945"/>
                        </a:xfrm>
                        <a:prstGeom prst="rect">
                          <a:avLst/>
                        </a:prstGeom>
                        <a:solidFill>
                          <a:srgbClr val="FFFFFF"/>
                        </a:solidFill>
                        <a:ln>
                          <a:noFill/>
                        </a:ln>
                        <a:extLst>
                          <a:ext uri="{91240B29-F687-4F45-9708-019B960494DF}">
                            <a14:hiddenLine xmlns:a14="http://schemas.microsoft.com/office/drawing/2010/main" w="9525">
                              <a:solidFill>
                                <a:srgbClr val="000000"/>
                              </a:solidFill>
                              <a:miter lim="800000"/>
                              <a:headEnd/>
                              <a:tailEnd/>
                            </a14:hiddenLine>
                          </a:ext>
                        </a:extLst>
                      </wps:spPr>
                      <wps:txbx>
                        <w:txbxContent>
                          <w:p w:rsidR="00F4625C" w:rsidRPr="00F4625C" w:rsidRDefault="00F4625C">
                            <w:pPr>
                              <w:rPr>
                                <w:b/>
                                <w:sz w:val="8"/>
                              </w:rPr>
                            </w:pPr>
                            <w:r w:rsidRPr="00F4625C">
                              <w:rPr>
                                <w:b/>
                                <w:sz w:val="14"/>
                              </w:rPr>
                              <w:t>O</w:t>
                            </w:r>
                          </w:p>
                        </w:txbxContent>
                      </wps:txbx>
                      <wps:bodyPr rot="0" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" anchor="t" anchorCtr="0" upright="1">
                        <a:noAutofit/>
                      </wps:bodyPr>
                    </wps:wsp>
                  </a:graphicData>
                </a:graphic>
                <wp14:sizeRelH relativeFrom="page">
                  <wp14:pctWidth>0</wp14:pctWidth>
                </wp14:sizeRelH>
                <wp14:sizeRelV relativeFrom="page">
                  <wp14:pctHeight>0</wp14:pctHeight>
                </wp14:sizeRelV>
              </wp:anchor>
            </w:drawing>
          </mc:Choice>
          <mc:Fallback>
            <w:pict>
              <v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe">
                <v:stroke joinstyle="miter"/>
                <v:path gradientshapeok="t" o:connecttype="rect"/>
              </v:shapetype>
              <v:shape id="Text Box 18" o:spid="_x0000_s1026" type="#_x0000_t202" style="position:absolute;margin-left:96.05pt;margin-top:50.55pt;width:19.2pt;height:15.35pt;z-index:251669504;visibility:visible;mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;mso-width-percent:0;mso-height-percent:0;mso-width-relative:page;mso-height-relative:page;v-text-anchor:top" o:gfxdata="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 AAAA5wUAAAAA " stroked="f">
                <v:textbox>
                  <w:txbxContent>
                    <w:p w:rsidR="00F4625C" w:rsidRPr="00F4625C" w:rsidRDefault="00F4625C">
                      <w:pPr>
                        <w:rPr>
                          <w:b/>
                          <w:sz w:val="8"/>
                        </w:rPr>
                      </w:pPr>
                      <w:r w:rsidRPr="00F4625C">
                        <w:rPr>
                          <w:b/>
                          <w:sz w:val="14"/>
                        </w:rPr>
                        <w:t>O</w:t>
                      </w:r>
                    </w:p>
                  </w:txbxContent>
                </v:textbox>
              </v:shape>
            </w:pict>
          </mc:Fallback>
        </mc:AlternateContent>
      </w:r>
etc
    </w:p>
 
Parsed in 0.011 seconds, using GeSHi 1.0.8.4


is tricky, unless you're able to decode (uudecode or base64decode?) the @gfxdata to get something useful.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Fri Jan 23, 2015 3:43 am
by shanmukhan
Hi jason,
Thanks for the information. WIll let you know the progress.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Fri Jan 23, 2015 4:03 am
by shanmukhan
Hi jason,

I decoded the gfxdata content and got a zip file which contains _rels, drs directories and one content_types.xml file. Ref: https://social.msdn.microsoft.com/Forums/office/en-US/0fcedce7-0d2f-4e93-97e7-01c453d79e41/how-to-decode-gfxdata?forum=worddev

Please let me know how can I constuct HTML drawing from these files.

Attached the generated zip file.

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Fri Jan 23, 2015 4:18 am
by shanmukhan
Hi jason,

I decoded the gfxdata content and got a zip file which contains _rels, drs directories and one content_types.xml file. Ref: https://social.msdn.microsoft.com/Forum ... um=worddev

Please let me know how can I constuct HTML drawing from these files.

Attached the generated zip file.

Input gfxdata:

<v:shape o:gfxdata="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" type="#_x0000_t5" style="position:absolute;margin-left:125.25pt;margin-top:20.5pt;width:24.75pt;height:100.5pt;z-index:251660288;visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;v-text-anchor:middle" id="Isosceles Triangle 6" o:spid="_x0000_s1026" strokecolor="#1f4d78 [1604]" strokeweight="1pt" fillcolor="white [3212]"/>

Re: How to read an image (bar/pie chart) from docx file

PostPosted: Thu Jan 29, 2015 11:08 am
by jason
Looking at the contents of the zip file, it includes:

Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wp:e2oholder xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
  <wp:effectOffset l="0" t="0" r="0" b="0"/>
  <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
    <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
      <wps:wsp xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
        <wps:cNvPr id="6" name="Isosceles Triangle 6"/>
        <wps:cNvSpPr/>
        <wps:spPr>
          <a:xfrm>
            <a:off x="0" y="0"/>
            <a:ext cx="314325" cy="1276350"/>
          </a:xfrm>
          <a:prstGeom prst="triangle">
            <a:avLst/>
          </a:prstGeom>
          <a:solidFill>
            <a:schemeClr val="bg1"/>
          </a:solidFill>
        </wps:spPr>
        <wps:style>
          <a:lnRef idx="2">
            <a:schemeClr val="accent1">
              <a:shade val="50000"/>
            </a:schemeClr>
          </a:lnRef>
          <a:fillRef idx="1">
            <a:schemeClr val="accent1"/>
          </a:fillRef>
          <a:effectRef idx="0">
            <a:schemeClr val="accent1"/>
          </a:effectRef>
          <a:fontRef idx="minor">
            <a:schemeClr val="lt1"/>
          </a:fontRef>
        </wps:style>
        <wps:bodyPr rot="0" spcFirstLastPara="0" vertOverflow="overflow" horzOverflow="overflow" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" numCol="1" spcCol="0" rtlCol="0" fromWordArt="0" anchor="ctr" anchorCtr="0" forceAA="0" compatLnSpc="1">
          <a:prstTxWarp prst="textNoShape">
            <a:avLst/>
          </a:prstTxWarp>
          <a:noAutofit/>
        </wps:bodyPr>
      </wps:wsp>
    </a:graphicData>
  </a:graphic>
</wp:e2oholder>
 
Parsed in 0.005 seconds, using GeSHi 1.0.8.4


but no image :-(