RE: Decoding PDF data from a web service

Greg Wilburn <gwilburn-kuYYJ3CQfvZxq3Q2jbZZw/[email protected]> Fri, 13 Mar 2026 17:45:04 +0000
Newsgroups gmane.comp.lang.as400.rpg
Message-ID <PH0PR17MB4863A24F778CA59526EF91BFDA45A@PH0PR17MB4863.namprd17.prod.outlook.com>
Daniel,

Thanks... actually, I tried that first (using AI example) to decode and write to the IFS.  I got an SQLSTATE of 22501 and gave up.

I tried your code below... it gives a SQL precompile error:
SQL0303: Position 32 Variable DECODED_CLOB not compatible or value too long.

I have it defined exactly as below (I'm on v7r5)

TIA,
Greg



-----Original Message-----
From: RPG400-L <[email protected]> On Behalf Of Daniel Gross
Sent: Friday, March 13, 2026 12:39 PM
To: [email protected]
Cc: [email protected]
Subject: Re: Decoding PDF data from a web service

Hi Greg,

I know I sound like a broken record here on the mailing list - but have you tried it with SQL? If the string gets decoded by the online decoder, it might be possible, that there is a problem with the decoding procedure.

As the strings are quite large, you will average to use CLOBs, as SQL only supports VARCHAR up to a length of 32739 bytes.

So it might be an an idea to try:

   dcl-s encoded_clob sqltype(clob:1000000) ccsid(*utf8) inz;
   dcl-s decoded_clob sqltype(clob:1000000) ccsid(*utf8) inz;

   encoded_clob_data = json.data.node.packingSlipPdfData;
   encoded_clob_len = %len(json.data.node.packingSlipPdfData);

   exec sql set :decoded_clob = base64_decode(:encoded_clob);

   base64decoded = %subst(decoded_clob_data:1:decoded_clob_len);

Or you can even use SQL to write the decoded data directly to your IFS file.

HTH
Daniel


> Am 13.03.2026 um 17:19 schrieb Greg Wilburn <[email protected]>:
>
> I have done this quite a few times before, so I'm not sure why I'm struggling so much with this...
>
> I'm getting a json document from a server that contains a base64 encoded string representing a packing slip... I'm able to copy the data from the webservice response file (JSON) on the IFS, and paste that into an online decoder.  That works.
>
> But when I try to do he same in my program, I'm getting an error:
> " Unable to decode character at position 1. (Char=x'4A') "
>
> Using the online decoder, indicating UTF8, it will decode.  Using the same decoder, selecting autodetect, it decodes differently indicating windows 1252?
>
> Just wondering if anyone can spot any glaring errors in my code.  I've been looking at it all morning.  UGH.
>
> // definitions
>
>  dcl-s  base64encoded  varchar(1000000) ccsid(*utf8) inz;
>  dcl-s  base64decoded  char(1000000) inz;
>  dcl-s  fd             int(10);
>
>  dcl-s  pdfFile        varchar(128) inz;
>  dcl-s  pdfData        varchar(1000000) ccsid(*utf8) inz;
>
>
> // Decode Packslip Data
>  base64Encoded = json.data.node.packingSlipPdfData;
>  len = base64_decode( %addr(base64Encoded:*data)
>                     : %len(%trim(base64Encoded))
>                     : %addr(base64Decoded)
>                     : %size(base64Decoded)
>                     );
>  pdfData = %subst(base64decoded:1:len);
>  pdfFile = fldr + '/packslips/' + inCom + '_' + inOrd + '.pdf';
>
>  flag = o_wronly + o_creat + o_ccsid + o_excl;
>  mode = s_irusr + s_iwusr + s_iroth + s_iwoth;
>  fd = open(pdfFile:flag:mode:1208:0);           // PDF is UTF8
>  rc = write( fd
>            : %addr(pdfData:*data)
>            : %len(pdfData));
>
> [Logo]<https://protect.checkpoint.com/v2/r01/___https://www.totalbizfulfillment.com/___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3OmUxNGQ6Yjg2YTA5NWMzZmRmNjE5NmY0MmEzMTFiNDgwMmQzYTA1NjA2OTQyZjAwODRlZjg5ZDFhMTQyZGJkMTgwMTJjMDpwOlQ6Rg>    Greg Wilburn
> Director of IT
> 301.895.3792 ext. 1231
> 301.895.3895 direct
> [email protected]<mailto:[email protected]>
> 1 Corporate Dr
> Grantsville, MD 21536
> https://protect.checkpoint.com/v2/r01/___www.totalbizfulfillment.com___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3OjMzOTQ6YTY1MjdhMDY5ZDNkYzJlYmUyNjAyMThmYTAzMTY3N2FiMWIwM2EzMDY3NmQ3OTA1NDdmOWM0ODA1NTg4MDM3ZjpwOlQ6Rg<https://protect.checkpoint.com/v2/r01/___http://www.totalbizfulfillment.com___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3OjVkYWU6MWMwMDE5ZmNiZDY5MzhmMWMyYzgwNmQyZDZhMDFmZDRhNjQ2OWNmYjc0ZDE4NDc0MWVjZGRmZmQyYmM3OTBkNDpwOlQ6Rg>
> --
> This is the RPG programming on IBM i (RPG400-L) mailing list
> To post a message email: [email protected]
> To subscribe, unsubscribe, or change list options,
> visit: https://protect.checkpoint.com/v2/r01/___https://lists.midrange.com/mailman/listinfo/rpg400-l___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3Ojc0OTk6ZDUxNWM2YTdkOWRlNjY1N2I4MWJiYzliZGQ3NDFiMmRhN2YwYjBlOThkYTUzMDI0N2E5NTI0NDAwM2Y3NTU3ODpwOlQ6Rg
> or email: [email protected]
> Before posting, please take a moment to review the archives
> at https://protect.checkpoint.com/v2/r01/___https://archive.midrange.com/rpg400-l___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3OjFiNjY6MDZhYWFiZDYwNDM3YmQxMjY2ZmQ1NmVkZTZmYWM3ODg5NjY3YmE1ZjRiZTg5ZTE2MjM0Y2M0Y2E2MDE0ZTQ0MjpwOlQ6Rg.
>
> Please contact [email protected] for any subscription related questions.
>
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://protect.checkpoint.com/v2/r01/___https://lists.midrange.com/mailman/listinfo/rpg400-l___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3OjdiZWQ6NDZkNzI3OTQ2OWFhYjQ4MDBkMDg0OTE1MTMzNmZmYTc5YTJkZmJlNjU0MGUwOTY1ZjYyZGQ3YWFlOTFjNzBhODpwOlQ6Rg
or email: [email protected]
Before posting, please take a moment to review the archives
at https://protect.checkpoint.com/v2/r01/___https://archive.midrange.com/rpg400-l___.YzJ1OnRvdGFsYml6ZnVsZmlsbG1lbnQxOmM6bzo1MWJhM2VhODNlZmFmNmFiNjIyOGYwMDI0MGQ2MDU1Yjo3OjNhZmY6OTU0OGZkNjQzMzg3M2U2MTljNTk3NTFlYzQ2NDIzZGU0MDlkMzJjNGI4NTVmMWQ5MDAzODc1MzU3NDA0ZWU0NjpwOlQ6Rg.

Please contact [email protected] for any subscription related questions.

Greg Wilburn
Director of IT
301.895.3792 ext. 1231
-- 
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: [email protected]
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: [email protected]
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact [email protected] for any subscription related questions.