Converting base64 string to PDF in memory

Michael Mantkowski michaelj at clientrax.com
Wed Mar 30 14:45:28 UTC 2022


Right, I understand your issue.  I saw that you were have difficulty with
the Brainy Data function and just wanted to be sure you knew about the Omnis
equivalent.

We have had similar issues with what you are doing as well.  We have a
Medical Record page in our application where we want to sometimes download
Lab Results in PDF format and display them to the user.  Since Omnis does
not have a direct way to show PDF files we always save it to disk first then
use a conversion program to convert it to a JPEG for display in Omnis.  We
use a graphics program called irfanview to do this and have a rather
involved process for multipage PDFs.

I need to check to see if Studio 10.2 has a PDF display field and see if I
can skip all that.  Or maybe the oBrowser will display PDFs?  I did try a
PDF activex control once, but it made Omnis unstable and prone to crash.

Anyway, not part of your question...

*********************************************************************
Michael Mantkowski
ClienTrax Software
1-614-875-2245
*********************************************************************


-----Original Message-----
From: omnisdev-en On Behalf Of malkishtini at gmail.com
Sent: Wednesday, March 30, 2022 10:25 AM
To: 'OmnisDev List - English' <omnisdev-en at lists.omnis-dev.com>
Subject: RE: Converting base64 string to PDF in memory

Hi Michael,
I have not started testing any conversion from Omnis yet, I'm just trying to
collect details and set a spec to myself.
I have OXML.$base64decode in mind to test in Omnis, but I think in this case
I need to save the binary to a file (which we want to avoid) and then
display it in the HTML field, unless there is another way to use lvData
directly which I'm not aware of yet.
I can test it and see what I get.

Thank you,
Mayada
-----Original Message-----
From: omnisdev-en <omnisdev-en-bounces at lists.omnis-dev.com> On Behalf Of
Michael Mantkowski
Sent: Wednesday, March 30, 2022 10:04 AM
To: 'OmnisDev List - English' <omnisdev-en at lists.omnis-dev.com>
Subject: RE: Converting base64 string to PDF in memory

Hi Mayada,

I may have missed it in the replies, but did you try the Omnis function for
base 64 decoding?

Do OXML.$base64decode(pvData) Returns lvData

*********************************************************************
Michael Mantkowski
ClienTrax Software
1-614-875-2245
*********************************************************************


-----Original Message-----
From: omnisdev-en On Behalf Of malkishtini at gmail.com
Sent: Wednesday, March 30, 2022 9:45 AM
To: 'OmnisDev List - English' <omnisdev-en at lists.omnis-dev.com>
Subject: RE: Converting base64 string to PDF in memory

Hi Phil,

I appreciate your follow up.
I did a test yesterday from outside Omnis, just to see if the atob()
function in JavaScript will work with me and it didn't. 
For some reason, the conversion from base64 to pdf failed when I used the
base64 string that was generated using the Brainy data pdf driver (while the
same base64 can be converted with no issue when I user the online convertor
tool).
To be clear, the JavaScript function did work with me when using the sample
base64 that I found on the web, but it failed with my base64.
So, I still have a lot to research until I can decide on the path to go : ).

Thank you,
Mayada

-----Original Message-----
From: omnisdev-en <omnisdev-en-bounces at lists.omnis-dev.com> On Behalf Of
Phil (OmnisList)
Sent: Wednesday, March 30, 2022 9:04 AM
To: omnisdev-en at lists.omnis-dev.com
Subject: Re: Converting base64 string to PDF in memory

Hi Mayada,

So, if you managed to revert the base64 encoded file back into a binary pdf,
do you then have a way to load that into the object?

Presuming so, which means all you need is a javascript function to decode
base64 back to the raw pdf file.

Maybe atob() a javascript function is all you need?

regards
Phil Potter
Based in Chester in the UK.

On 30/03/2022 13:15, malkishtini at gmail.com wrote:
> Hi Phil,
>
> Thank you very much for your email and for the options you shared.
> You got my requirements correctly.
> Right now, I have a JS client with an HTML control that is currently 
> displaying a pdf doc which I download as a file stream from S3. So no 
> conversion was need with this solution.
> The design should change now to support receiving an encoded 
> base64string (instead of a file stream) and displaying the response as 
> a PDF in the HTML control.
>
> I'll investigate both options that you shared below to see if they can 
> fulfill my need.
>
> Thank you and best regards,
> Mayada
>
> -----Original Message-----
> From: omnisdev-en<omnisdev-en-bounces at lists.omnis-dev.com>  On Behalf 
> Of Phil (OmnisList)
> Sent: Wednesday, March 30, 2022 6:18 AM 
> To:omnisdev-en at lists.omnis-dev.com
> Subject: Re: Converting base64 string to PDF in memory
>
> Hi Mayada,
>
> Following this link, I was trying to understand your requirements...
>
> Do you have, what Omnis calls a HTML control, to display a PDF?
>
> and your query is how to get a base 64 rest API reply into that HTML 
> control?
>
> If you had such a HTML control, then it would have some method call to 
> set the contents, which if its under your control, you could make it 
> accept
> base64 data.
>
> I'm thinking your meaning something like signature:
> https://github.com/OmnisStudio/Omnis-Signature
>
> Which I modified and added methods to for my needs...
>
> indeed there is a PDF object there also, which maybe of help?
> https://github.com/OmnisStudio/Omnis-JSPDFDevice
>
> Or, are you talking about some other html control thing?
>
> regards
> Phil Potter
> Based in Chester in the UK.
>
> On 30/03/2022 03:23,malkishtini at gmail.com  wrote:
>> Hi Scotte,
>>
>> Thank you for sharing your idea.
>> It is a good one to experiment when using oBrowser in a desktop app.
>>
>> For now, I need to do the conversion in a JS client (that runs 
>> directly in a
>> browser) and render the pdf into an Html control.
>> But I'll keep your approach in mind in case I can get it to work with 
>> the Html control.
>>
>> Thank you,
>> Mayada
>>
>> -----Original Message-----
>> From: omnisdev-en<omnisdev-en-bounces at lists.omnis-dev.com>   On Behalf
>> Of Scotte Meredith
>> Sent: Tuesday, March 29, 2022 5:22 PM
>> To: OmnisDev List - English<omnisdev-en at lists.omnis-dev.com>
>> Subject: Re: Converting base64 string to PDF in memory
>>
>> Hi, Miyada --
>>
>> I've only played with this a little, but here is an area to explore.
>>
>> You can force HTML directly into the oBrowser component using
$setdataurl.
>>
>> Create the html as a string or binary and for the images or PDF you 
>> should be able to uuencode it as an in-line image or embedding as you 
>> would for a webpage.
>>
>> Here is an example with simple html, using both the character and 
>> binary options.
>>
>> On a window with an oBrowser component named xBrowser:
>>
>> Calculate ibnURL as chartoutf8('<html><body><p>Something
>> here</p></body></html>') Do
>> $cinst.$objs.xBrowser.$setdataurl(ibnURL,'text/html')
>> ## or
>> Calculate icURL as '<html><body><p>Something here</p></body></html>'
>> Do $cinst.$objs.xBrowser.$setdataurl(icURL,'text/html')
>>
>>
>>> On Mar 29, 2022, at 10:52 AM,malkishtini at gmail.com   wrote:
>>>
>>> Hi Andrew,
>>> Thank you for your feedback.
>>> I'm afraid that we might end up doing the same thing if we cannot 
>>> find another solution in Omnis.
>>>
>>> I was wondering if Brainy data has a plug in to help with this 
>>> conversion, as we do use their driver to create the pdf in memory.
>>>
>>> We found a way to do the conversion in Javascript, 
>>> https://base64.guru/developers/javascript/examples/decode-pdf, but 
>>> not sure yet how to make this work with the JS client and the html
> object.
>>> Need to do more digging.
>>>
>>> Thank you & best regards,
>>> Mayada
>>>
>>> -----Original Message-----
>>> From: omnisdev-en<omnisdev-en-bounces at lists.omnis-dev.com>   On Behalf
>>> Of Andrew Stolarz
>>> Sent: Tuesday, March 29, 2022 12:41 PM
>>> To: OmnisDev List - English<omnisdev-en at lists.omnis-dev.com>
>>> Subject: Re: Converting base64 string to PDF in memory
>>>
>>> Mayada,
>>>
>>> I was looking to do something similar a number of years ago. It's my 
>>> understanding that with the JS client, you need to save the PDF to 
>>> disk before being able to display it in a JS form.
>>>
>>> We ended up placing the PDF's into a temp location and cleared them 
>>> out after.
>>>
>>>
>>> Andrew
>>>
>>>
>>> On Tue, Mar 29, 2022 at 11:24 AM<malkishtini at gmail.com>   wrote:
>>>
>>>> Hello $list,
>>>>
>>>> I have a project to convert a base64 string (which I get from an 
>>>> external REST API) to a PDF and display in a JS form without saving 
>>>> any file to a disk (i.e., convert it to a PDF in memory and display 
>>>> it in an HTML object in the JS form (Studio 8.1.7)).
>>>> I have not done this before, so the first thing I thought about was 
>>>> to post a question to the list to see if anyone has done something 
>>>> similar before and could kindly share some ideas with me.
>>>>
>>>> Thank you in advance for any hints/thoughts.
>>>>
>>>> Best regards,
>>>> Mayada
>>>>
>>>>
>>>>
>>>> _____________________________________________________________
>>>> Manage your list subscriptions athttps://lists.omnis-dev.com  Start 
>>>> a new message ->mailto:omnisdev-en at lists.omnis-dev.com
>>>>
>>> _____________________________________________________________
>>> Manage your list subscriptions athttps://lists.omnis-dev.com  Start 
>>> a new message ->mailto:omnisdev-en at lists.omnis-dev.com
>>>
>>> _____________________________________________________________
>>> Manage your list subscriptions athttps://lists.omnis-dev.com  Start 
>>> a new message ->mailto:omnisdev-en at lists.omnis-dev.com
>>
>> Scotte Meredith
>> spomacguy at gmail.com
>> 509/998-0991
>>
>>
>>
>>
>> _____________________________________________________________
>> Manage your list subscriptions athttps://lists.omnis-dev.com  Start a 
>> new message ->mailto:omnisdev-en at lists.omnis-dev.com
>>
>> _____________________________________________________________
>> Manage your list subscriptions athttps://lists.omnis-dev.com Start a 
>> new message ->mailto:omnisdev-en at lists.omnis-dev.com
> _____________________________________________________________
> Manage your list subscriptions athttps://lists.omnis-dev.com  Start a 
> new message ->mailto:omnisdev-en at lists.omnis-dev.com
>
> _____________________________________________________________
> Manage your list subscriptions athttps://lists.omnis-dev.com Start a 
> new message ->mailto:omnisdev-en at lists.omnis-dev.com
_____________________________________________________________
Manage your list subscriptions at https://lists.omnis-dev.com Start a new
message -> mailto:omnisdev-en at lists.omnis-dev.com 

_____________________________________________________________
Manage your list subscriptions at https://lists.omnis-dev.com Start a new
message -> mailto:omnisdev-en at lists.omnis-dev.com 

_____________________________________________________________
Manage your list subscriptions at https://lists.omnis-dev.com Start a new
message -> mailto:omnisdev-en at lists.omnis-dev.com 

_____________________________________________________________
Manage your list subscriptions at https://lists.omnis-dev.com Start a new
message -> mailto:omnisdev-en at lists.omnis-dev.com 



More information about the omnisdev-en mailing list