How to save base64 images in ODT opendocument/ODT files?

384 Views Asked by At

I am trying to create an ODT file from xml. I have been trying to add an image using <office:binary-data>, it is a base64 image.

After trying to do as it is told in documentation, the image is not displayed in text editors (Word and LibreOffice).

Here is my implementation:

<text:p text:style-name="P6"><draw:frame draw:name="img0" svg:width="33pt" svg:heigh="12pt"><draw:image xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEMAAAAZCAYAAABq35PiAAAAAXNSR0IArs4c6QAABH9JREFUWEftmF2IG1UUx//ZzWZ3s0mapOmQZJPNfgQFrYqKsqIFH6qi+FARq7YIfrwIVrQWSv2ogpSKVC0IiiIigmitWh9EahV9qWLBUh/8VtJtMpNtNl+TmI9tZiYZuXdnx83sTDNpEncrnceZe+6c+7vn3PM/1yJHozIuPJSAxQgGIdQAIMsLrCwWCywA+s5jcHQ9mjWR9ZB16cLgJAn3pFL47swZ3WWHrFYc8Ptx/dDQeYPltWIR2zIZQ3+3rVmDfT5fc2RUZRkbOA4najVq6OxbiINSgzD99yHvfx8bQ9BqXfVAPiqXsTmVUv1k+vuRrteX+b3L42mG8Ugmg9eLRdw4PIw3GAYXDQzQEPpZEPBwOt0ULZsdDnzo969qGDOiiMl4nPr4NsOA+Ozo68O8LOPNYhHbs9km/9Uzg0TFSCyGLU4n3mUYWC2LmbQwXpBlXMmy+FUQ1Anq0eiqPkP28jyezuVwPBzG1YODyzbuQLmMe5dEjQrjk3IZD6TTiI+Pw6Okh9b6y2oVt8zOqq9jkQgmBwa6Eh0/1mo4Uq3Suba73RjUbMa5/OTieBxbnU486/Uaml/HcTimnI8qjEczGXpG7F271tAwW69j3cyM+v2vSATRLsHYx/PYmcvRuYuTk3AZbIhZKHFJwmWJBE5GIvD19xuaPZHNYn+hQL8bllY9a1GWYYvF1E/i1NSydDLrrHZct2GY9WMPz2O3sgltwfhFELA+kaD/mR4awvehkNl/thy3UjDuTqVwsFxuPzI+KJWwZW6OGn4aCGDTyEjLRZodsFIwwqdOgWiry20282lClMY0y+KHWo0KrqOhkKrczC74bONWAsbhahW3KQXhq2DQPIylZeinsTGst9m6wUCd47+GIckyLk0k8Kco4n6XC+8wjDkYfzca1JCE06FAAHecY3oQjXKoUtGF+EWlooq6Z7xew9L6pMcD49pgfn8WJTo5+74ZHcUw6b1ada2ksbkrlQLRIft9Pjzudpv/o2bkK4UCdmhUX7uTdaOCkVS/lmWpRjoWCmGdUnpbwng+n8dz+Tx2uN14yedr1/em8Z3CIDooPzHRUTlPShKuYlkqyU+Ew0066aww3iuVcN/cHB50ufAWw3QsvUl7VFeuBLRUXy4U8JRS79MTE7qii6SHtk1oZ3dIw3kDx2FGknB0dBRXaCS6IYyv5+exMZmk58NBv78jJ8w43OsDlPRWm06fBqkg34ZCulcQujCO12q4hmVxq91O9YRRn0D6iRd4nsLq9OklDCILSIS/XyqBlNCNdruuu8tg/CGKFATp8j4PBmE3aJgSkoSbkkk85HJhp8fTKQv0EsZj2SxeLRTwWSCA2w0qISm1TTBI/z/NcfTyg9xleHUaHJLzuUYDJ0WRAkiOj3flkqdXMHbn89iTz6sthN6uVRsNeo6oMGYlCRuSSXWRZrb6TocDH3chRci/egHjRZ7HLuVQNrMeFcZWJafMGC2OORIM4maD/GtnHi2MytSUYXqanfc3QcAlSlNp1qalzjA70f9h3AUYS3bxH4qEFn6d3vcdAAAAAElFTkSuQmCC</office:binary-data></draw:image></draw:frame></text:p>

I have tried different images but all give me same result.

1

There are 1 best solutions below

0
On

An example of that implementation can be obtained by creating a Flat ODT file which is an XML document in the end.

Looks like you are missing the draw:mime-type attribute in <draw:image draw:mime-type="image/png">

Inspecting it shows:

   <text:p text:style-name="P2"><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="paragraph" svg:width="6.322in" draw:z-index="0">
     <draw:text-box fo:min-height="0.9165in">
      <text:p text:style-name="P1"><draw:frame draw:style-name="fr2" draw:name="Image2" text:anchor-type="as-char" svg:width="6.322in" svg:height="0.9165in" draw:z-index="1">
        <draw:image draw:mime-type="image/png">
         <office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAl8AAABYCAIAAABERwXbAAAACXBIWXMAAA7EAAAOxAGVKw4b
          AAAgAElEQVR4nOydeTxU3f/APzNjbDMYQulRlhTtCiVaULTYGhEtohIqpTyhbO2ylIgIqbQI