Image from MIME encoded database record [message #804056] |
Wed, 22 February 2012 01:18  |
Eclipse User |
|
|
|
Hi
I am trying to create a report that includes an image that is pulled from a database as a mime encoded string (image/svg+xml)
It appears vaguely possible but I can't really find any way to do this on the BIRT report designer, e.g. I can add an image, bind it to the database column (as a string), but can't seem to find a way to set BIRT to interpret the string as a mime encoded image.
Can anyone point me in the right direction ?
Thanks
Guy
|
|
|
|
|
Re: Image from MIME encoded database record [message #805427 is a reply to message #804802] |
Thu, 23 February 2012 14:04  |
Eclipse User |
|
|
|
You should not have to include any additional jars for the
org.apache.commons.codec.binary package. It is included with birt by
default. Create a new blank report add a data value with a dummy
expression and try the following onCreate script:
importPackage(Packages.org.apache.commons.codec.binary)
importPackage(Packages.java.lang);
var jj = new String("Hello");
var tt = Base64.encodeBase64(jj.getBytes());
ggg = Base64.decodeBase64(tt);
this.setDisplayValue(new String(ggg));
Jason
On 2/22/2012 9:29 PM, Guy Wittig wrote:
> Jason,
>
> thanks for your reply, good hint, do it in code ...
>
> The string is of the form "H4sIAAAAAAAAC+y9aXMcSXIm/F .......
> Thx+FOzZGV1hw0ozqLmEbrGs4WNaG" it is about 100kbytes long.
>
> It appears to be "GZip + Base64" Mime encoded, and has a Mime type
> "image/svg+xml". That is what is stored in other database columns for
> this record.
>
> The class BASE64Decoder() is in the sun.misc library. I have tried to
> get this working using the org.apache.commons.codec.binary.Base64 class
> as this is used in the deployment environment.
> oncreate() is:
>
> importPackage(Packages.javax.imageio);
> importPackage(Packages.java.io);
> importPackage(Packages.org.apache.commons.codec.binary);
> decoder = new Base64();
> decodedBytes =
> decoder.decode(this.getRowData().getColumnValue("MIME_DOCUMENT_CONTENTS"));
> this.data =decodedBytes;
>
>
>
> I can't seem to get it to run in the designer. Can't find the Base64
> class as per error below. I have tried adding the JAR into the project
> class path (Windows\Preferences\Report Design\Classpath and tried adding
> it into the BIRT script lib directory. Still does not seem to be able to
> find the class.
>
> Any ideas?
>
>
>
>>>>> Compiled Source:
>>>>> /report/body/image[@id="1947"]/method[@name="onCreate"]
> importPackage(Packages.javax.imageio);
> importPackage(Packages.java.io);
> importPackage(Packages.org.apache.commons.codec.binary);
>
> decoder = new Base64();
> decodedBytes =
> decoder.decode(this.getRowData().getColumnValue("MIME_DOCUMENT_CONTENTS"));
> this.data =decodedBytes;
>>>>> end compilation.
>>>>> Frame Source Name:
>>>>> /report/body/image[@id="1947"]/method[@name="onCreate"]
>>>>> Frame Function Name: Enter script. 1
>>>>> Line changed to: 1
>>>>> Line changed to: 2
>>>>> Line changed to: 3
>>>>> Line changed to: 5
>>>>> Debugger exception occured:
> org.mozilla.javascript.EcmaError: ReferenceError: "Base64" is not defined.
>
>
>
|
|
|
Powered by
FUDForum. Page generated in 0.04413 seconds