perlpreben has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I have exported a simple word document as w2007 xml. This stores images as base64 it seems;

/9j/4AAQSkZJRgABAgEASABIAAD/wAARCAE3AwEDAREAAhEBAxEB/9sAhAABAQEBAQEBAQ +EBAQEB AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgECAgIBAQIDAgICAgMDAwECAwMDAgMCAgMCAQ +EBAQEB AQEBAQECAQEBAQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIC AgL/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAA

Seems simple. What I want to do is to convert a jpeg to base64, so I can import it into an xml .. and have word display it.

So I try;

use MIME::Base64 qw(encode_base64); open(FILE, "1.jpg") or die "$!"; binmode FILE; while (read(FILE, $buf, 60*57)) { print encode_base64($buf); }

And when I open the word document, the picture is rubbish. BUT i can see traces of the original picture, so im headed in the right direction at least.

Anyone got any advice on this? Thanks

Replies are listed 'Best First'.
Re: Word 2007 XML format and perl
by InfiniteSilence (Curate) on Feb 13, 2010 at 23:07 UTC
    use MIME::Base64 qw(encode_base64); open(FILE, $ARGV[0]) or die "$!"; open(OUTPUTFILE, ">newimg.jpg") or die $!; binmode FILE; binmode OUTPUTFILE; while (read(FILE, $buf, 60*57)) { print OUTPUTFILE encode_base64($buf); } close(FILE); close(OUTPUTFILE);
    Nope, it works. I manually added a JPG to a Word 2007 document, saved it as an XML, ran the code against a different (similarly sized image), removed the base64 Word added for the image and replaced it with what the code created (I replaced the text with Windows eMacs mind you), saved it, and reopened it in Word. The image I replaced it with looked fine. Now, when I tried this with an image that was much wider than the original Word tried to force the image to fit in the original dimensions. This may be what you are experiencing, but that doesn't have anything to do with Perl or base64, it has to do with the XML tags that Word is using to place and format the image.

    Celebrate Intellectual Diversity

      hehe... im really sorry for wasting your time, cause I just realized that I had forgot to replace one line of base64-code due to my editor acting up.

      But your comment was still very helpfull , both due to the extra binmode on output and also it made me look outside the code to find the flaw. A million thanks :)