Skip to main content

Notifications

Announcements

No record found.

Small and medium business | Business Central, N...
Suggested answer

Business Central Codeunit "Base64 Convert" is returning different base64 code than an online converter

(1) ShareShare
ReportReport
Posted on by 15

Hi,

I am trying to convert a report to base64 code so that I can send it to a different application via API calls.

To test, I used an online pdf to base64 converter, I copied the generated code and the application successfully received the document that I sent. Now, instead of hardcoding the base64 code, I want to be able to convert a report in Business Central to base64 and send it. However, my API call failed with an error message "PDF Validation failed". When I compare the outputs from the online converter and the AL procedure, I see that they are different. Below is the code that I used to convert the report to base 64.

local procedure BssiReport()
    var
        ReportOutstream: OutStream;
        ReportInstream: InStream;
        TempBlob: Codeunit "Temp Blob";
        res: Text;
        Txt: Text;
        Base64Convert: Codeunit "Base64 Convert";
    begin
        TempBlob.CreateOutStream(ReportOutstream);
        Report.SaveAs(Report::BssiPLMLeaseSummary, '2022-07-20VERSION(1) SORTING(Field1) WHERE(Field1=1(A100))VERSION(1) SORTING(Field1,Field2)VERSION(1) SORTING(Field1,Field5,Field2)VERSION(1) SORTING(Field1,Field3,Field4,Field5,Field6)VERSION(1) SORTING(Field2,Field48,Field3,Field4,Field5,Field1)VERSION(1) SORTING(Field2,Field48,Field3,Field4,Field5,Field1)VERSION(1) SORTING(Field2)', ReportFormat::Pdf, ReportOutstream);
        TempBlob.CreateInStream(ReportInstream);
        WHILE NOT (ReportInstream.EOS) DO BEGIN
            ReportInstream.READTEXT(Txt);
            res  = Txt;
        END;
        jsonObj.Add('documentBase64', Base64Convert.ToBase64(res));
        //...
    end;

I won't copy the entire code here but this is the first portion of the output that I got from using the online converter:

"JVBERi0xLjcNCiWhs8XXDQoxIDAgb2JqDQo8PC9QYWdlcyAyIDAgUiAvVHlwZS9DYXRhbG9nPj4NCmVuZG9iag0KMiAwIG9iag0KPDwvQ291bnQgMS9LaWRzWyA0IDAgUiBdL1R5cGUvUGFnZXM Pg0KZW5kb2JqDQozIDAgb2JqDQo8PC9DcmVhdGlvbkRhdGUoRDoyMDIyMDcwNDExMTYxOCkvQ3JlYXRvcihQREZpdW0pL1Byb2R1Y2VyKFBERml1bSk Pg0KZW5kb2JqDQo0IDAgb2JqDQo8PC9Db250ZW50cyA1IDAgUiAvTWVkaWFCb3..."

This is what I got from Business Central using CodeUnit "Base64 Convert":

"JVBERi0xLjcl77 977 977 977 977 977 977 9MSAwIG9ialsvUERGL1RleHQvSW1hZ2VCL0ltYWdlQy9JbWFnZUldZW5kb2JqMiAwIG9iajw8L1R5cGUvUGFnZS9QYXJlbnQgNiAwIFIvTWVkaWFCb3hbMCAwIDc5MiA2MTJdL0NvbnRlbnRzIDUgMCBSL1Jlc291cmNlczw8L1Byb2NTZXQgMSAwIFIvWE9iamVjdDw8Pj4vRm9udDw8L0YzIDMgMCBSL0Y0IDQgMCBSPj4 Pj4 ZW5kb2JqMyAwIG9iajw8L1R5cGUvRm9udC9TdWJ0eXBlL1R..."

Does anybody have any idea on why Business Central is not generating the same output?

  • Suggested answer
    Binesh Profile Picture
    Binesh 7,885 on at
    RE: Business Central Codeunit "Base64 Convert" is returning different base64 code than an online converter

    Hello,

    Use the below code which will return the base64 string of your report in pdf format.

    Note: Use the return Base64 String to add in Jsonobject. 

        procedure SendReportToBase64()Base64: Text
        var
            BaseConvert: Codeunit "Base64 Convert";
            TempBlob: Codeunit "Temp Blob";
            NAvInstream: InStream;
            ParametersTok: Label '2022-07-20VERSION(1) SORTING(Field1) WHERE(Field1=1(A100))VERSION(1) SORTING(Field1,Field2)VERSION(1) SORTING(Field1,Field5,Field2)VERSION(1) SORTING(Field1,Field3,Field4,Field5,Field6)VERSION(1) SORTING(Field2,Field48,Field3,Field4,Field5,Field1)VERSION(1) SORTING(Field2,Field48,Field3,Field4,Field5,Field1)VERSION(1) SORTING(Field2)';
            Navoutstream: OutStream;
        begin
            Clear(Base64);
            ClearLastError();
            TempBlob.CreateOutStream(NAVOutStream);
            if Report.SaveAs(Report::BssiPLMLeaseSummary, ParametersTok, ReportFormat::Pdf, NAVOutStream) then begin
                TempBlob.CreateInStream(NAvInstream);
                Base64 := BaseConvert.ToBase64(NAvInstream);
                if Base64 = '' then Error('Unable to generate report');
            end else begin
                Clear(Base64);
                Error(GetLastErrorText);
            end;
        end;

  • Suggested answer
    Inge M. Bruvik Profile Picture
    Inge M. Bruvik 993 Super User 2024 Season 1 on at
    RE: Business Central Codeunit "Base64 Convert" is returning different base64 code than an online converter

    How are you feeding the online converter. Do you feed it the finished report or the txt value from your code?

    Maybe there is a difference in the character set that is used ?

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Congratulations 2024 Spotlight Honorees

Kudos to all of our 2024 community stars! 🎉

Meet the Top 10 leaders for December

Congratulations to our December super stars! 🥳

Start Your Super User Journey

Join the ranks of our community heros! 🦹

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 291,735 Super User 2024 Season 2

#2
Martin Dráb Profile Picture

Martin Dráb 230,466 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Featured topics

Product updates

Dynamics 365 release plans