Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
Showing results for 
Search instead for 
Did you mean: 
Product and Topic Expert
Product and Topic Expert
In my blogs Configure the SAP BTP Cloud Foundry Environment Subaccount with SAP Forms Service by Adobe and Test ..., I have explained configuring ads and testing ads rest api with postman . I have received many queries about this blog . One question is how to use  SAP cloud sdk to call  ads rest api to render pdf document .

I assume you have installed  nodejs ,yeoman. If you have not installed yeoman, you can use the following  command to install it .

npm install -g yo

Also suggest you instll generator-saphanaacademy-mta with the folowing command :

npm install -g generator-saphanaacademy-mta

You have install cloud foundry cli and  mta tool . For cloud foundry cli,  you can refer the toturial .

For MTA tool, you can install it with :

npm install -g mbt


Base on all these prerequisites, today I want to blog the steps on how to use SAP Cloud SDK to render PDF document with BTP SAP Forms Service by Adobe rest API .

The following is the steps :

Step 1 :  Check  SAP Cloud SDK for  Forms Service by Adobe API in API hub  and download API specification .

Step 2 : generate  a mta project with yeoman .

Step 3: use visual code to change the code :

Step 4:  add a folder external under srv and move the downloaed ADS specification file  into folder external

Step 5: Generate a typed client by running the generator

create folder CF_ADSRestAPI under folder external .

rename API specification file to CF_ADSRestAPI.json

add the following line in srv/package.json

,"@sap-cloud-sdk/openapi": "latest"

run the following command:

cd srv

npm install

openapi-generator -t --input external\CF_ADSRestAPI.json --outputDir  external\CF_ADSRestAPI\

Step 6: add the following code to server.js

const {ADSRenderRequestApi} = require('./external/CF_ADSRestAPI/CF_ADSRestAPI/ads-render-request-api')
const { StoreFormsApi } =require('./external/CF_ADSRestAPI/CF_ADSRestAPI/store-forms-api')

app.get('/srv/ads/adsforms', function (req, res) {
if (req.authInfo.checkScope('$XSAPPNAME.User')) {
// res.setHeader()
StoreFormsApi.formGet('labelprint').execute({ destinationName:'ads-rest-api' }).then(data=>{res.status(200).json(data)}).catch(err=>{res.status(200).json(err)});
} else {
if (req.authInfo.checkScope('$XSAPPNAME.User')){

const data = "<form1><LabelForm><DeliveryId>8000311</DeliveryId> <Position>0010</Position> <MaterialNo>M100001</MaterialNo><Quantity>123456.321</Quantity> <Package>P111111</Package><QRCode>01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789</QRCode></LabelForm></form1>"

const bodyE = new Buffer(data).toString('base64')

renderinput = {
"embedFont": 0,
"formLocale": "en_US",
"formType": "print",
"taggedPdf": 1,
"xdpTemplate": "labelprint/PrintLabel",
"xmlData": bodyE
const queryP = { templateSource: 'storageName', TraceLevel: 1 }
ADSRenderRequestApi.renderingPdfPost(renderinput,queryP).execute({destinationName:'ads-rest-api' }).then(pdf=>{res.status(200).json(pdf.fileContent)}).catch(err=>{res.status(500).send(err)})




Step 7: add the following code to app\resources\index.html

    <a href=""> ads render</a><br />

    <a href=""> ads forms</a><br />

Step 8: build mta file with the following command

cd ..

mbt build

Step 9: login into BTP subaccount with :

cf login

Step 10: deploy  generated mta file with

cf deploy mta_archives\sdkforads_0.0.1.mtar


Step 11:  create destination for ads rest api in previouse blog


Step 12,  assign role collections to user


Step 12, test the deployed application


The end .