Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
kammaje_cis
Active Contributor
This blog discusses the tricks to avoid the frequent issues with PDF files in Fiori applications.

Problems


Whenever there is a PDF download or display involved in Fiori applications, we have always encountered the annoying '$value' as PDF's title or suggested file name while saving the PDF. See the below screenshots showing the issue.

Below screenshot from the Fiori demo site (Paystub app) shows the PDF title appearing as $value in Chrome browser.



 

Below screenshot shows the proposed filename $value, while saving the PDF that was displayed on the browser from the Gateway server.



 

Solution


Solution Summary:

  • PDF metadata is updated with the right ‘Title’. This will get rid of $value displayed as PDF's title.

  • ‘Content-Disposition’ HTTP header is used to influence the proposed filename while downloading.


Prerequisites:

Adobe Document Server (ADS) should be configured. This is a JAVA Add-In to your ABAP server. This comes as part of your NW licencing as long as you do not provide the ability to edit (interact) the PDF file. You can use SAP's test program 'FP_PDF_TEST_23' for testing this configuration.

Code:

Below code in method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM of DPC_EXT class resolves these issues. Inline comments in the code are self-explanatory.
* lv_pdf_data contains the binary PDF data. (XSTRING)

DATA: ls_meta TYPE sfpmetadata,
lx_fpex TYPE REF TO cx_fp_runtime,
lo_fp TYPE REF TO if_fp,
lo_pdfobj TYPE REF TO if_fp_pdf_object.

* add metadata to PDF document
TRY.
"Create PDF Object.
lo_fp = cl_fp=>get_reference( ).
lo_pdfobj = lo_fp->create_pdf_object( connection = 'ADS' ).
lo_pdfobj->set_document( pdfdata = lv_pdf_data ).
"Set title.
ls_meta-title = 'My PDF File Title'.
lo_pdfobj->set_metadata( metadata = ls_meta ).
lo_pdfobj->execute( ).
"Get the PDF content back with title
lo_pdfobj->get_document( IMPORTING pdfdata = ls_stream-value ).

CATCH cx_fp_runtime_internal
cx_fp_runtime_system
cx_fp_runtime_usage INTO lx_fpex.
ENDTRY.

"'application/pdf' is required to inform the browsers that
"this is a PDF file so that it can be opened in the default
"PDF viewer of the browser.
ls_stream-mime_type = 'application/pdf'.

copy_data_to_ref( EXPORTING is_data = ls_stream
CHANGING cr_data = er_stream ).

"'Content-Disposition: inline' directs the browsers to preview
"the PDF instead of downloading the file.
"'filename' is required by Chrome to suggets the file name while downloading.
"IE does not respect the 'filename' with 'inline', but respects
"when Content-Disposition is 'attachemnt'
ls_lheader-name = 'Content-Disposition'.
ls_lheader-value = |inline; filename="MyFileName.pdf"|.
set_header( is_header = ls_lheader ).
7 Comments
Labels in this area