Forum Discussion
sharvan270
4 years agoRegular Visitor
Not able to generate PDF via PowerBI API call in java
Hi, I was trying to generate PDF using API call in java code. I tried following API calls but getting empty PDF after exporting as File: POST https://api.powerbi.com/v1.0/myorg/groups/{group...
- 4 years ago
Can you try it in Powershell? The below works for me:
# Calls the Active Directory Authentication Library (ADAL) to authenticate against AAD function GetAuthToken { if(-not (Get-Module AzureRm.Profile)) { Import-Module AzureRm.Profile } $clientId = "<your client id>" $redirectUri = "urn:ietf:wg:oauth:2.0:oob" $resourceAppIdURI = "https://analysis.windows.net/powerbi/api" $authority = "https://login.microsoftonline.com/common/oauth2/authorize"; $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId, $redirectUri, "Auto") return $authResult } # Get the auth token from AAD $token = GetAuthToken # Building Rest API header with authorization token $authHeader = @{ 'Content-Type'='application/json' 'Authorization'=$token.CreateAuthorizationHeader() } #Report details $groupsPath = "<workspace guid>" $reportID = "<report guid>" # 0. get page names - optional $uri = “https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/pages" $Pages = Invoke-RestMethod -Uri $uri –Headers $authHeader –Method GET # 1. export request URI $uri = “https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/ExportTo” $body = "{ format : `"PDF`” }" # how to define the pages? powerBIReportConfiguration:{pages:[{pageName:"<page 1 guid>"},{pageName:"page2 guid>"}]} # issue the export request $FileExport = Invoke-RestMethod -Uri $uri –Headers $authHeader –Method POST -body $body #save the ID - we need it later $exportId = $FileExport.id # 2. export request status URI $uri = "https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/exports/$exportId" $percentComplete = 0 # repeat rendering status check until status is Succeeded while ($percentComplete -lt 100) { Start-Sleep -Seconds 30 $exportStatus = Invoke-RestMethod -Uri $uri –Headers $authHeader –Method GET $percentComplete = $exportStatus.percentComplete Write-Host $percentComplete } # 3. retrieve the rendered file $uri = "https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/exports/$exportId/file" Invoke-RestMethod -Uri $uri –Headers $authHeader –Method GET -OutFile "test.pdf"
sharvan270
4 years agoRegular Visitor
Verified with PercentComplate attribute of Export and even after that getting same issue.
lbendlin
4 years agoSuper User
Did you wait for PercentComplete to reach 100?
- sharvan2704 years agoRegular Visitor
Yes, I waited till 100 percentage then called next API call
- lbendlin4 years agoSuper User
Can you try it in Powershell? The below works for me:
# Calls the Active Directory Authentication Library (ADAL) to authenticate against AAD function GetAuthToken { if(-not (Get-Module AzureRm.Profile)) { Import-Module AzureRm.Profile } $clientId = "<your client id>" $redirectUri = "urn:ietf:wg:oauth:2.0:oob" $resourceAppIdURI = "https://analysis.windows.net/powerbi/api" $authority = "https://login.microsoftonline.com/common/oauth2/authorize"; $authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority $authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId, $redirectUri, "Auto") return $authResult } # Get the auth token from AAD $token = GetAuthToken # Building Rest API header with authorization token $authHeader = @{ 'Content-Type'='application/json' 'Authorization'=$token.CreateAuthorizationHeader() } #Report details $groupsPath = "<workspace guid>" $reportID = "<report guid>" # 0. get page names - optional $uri = “https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/pages" $Pages = Invoke-RestMethod -Uri $uri –Headers $authHeader –Method GET # 1. export request URI $uri = “https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/ExportTo” $body = "{ format : `"PDF`” }" # how to define the pages? powerBIReportConfiguration:{pages:[{pageName:"<page 1 guid>"},{pageName:"page2 guid>"}]} # issue the export request $FileExport = Invoke-RestMethod -Uri $uri –Headers $authHeader –Method POST -body $body #save the ID - we need it later $exportId = $FileExport.id # 2. export request status URI $uri = "https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/exports/$exportId" $percentComplete = 0 # repeat rendering status check until status is Succeeded while ($percentComplete -lt 100) { Start-Sleep -Seconds 30 $exportStatus = Invoke-RestMethod -Uri $uri –Headers $authHeader –Method GET $percentComplete = $exportStatus.percentComplete Write-Host $percentComplete } # 3. retrieve the rendered file $uri = "https://api.powerbi.com/v1.0/myorg/groups/$groupsPath/reports/$reportID/exports/$exportId/file" Invoke-RestMethod -Uri $uri –Headers $authHeader –Method GET -OutFile "test.pdf"