01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream. * This method get's called when a media file is queried with $value. A binary stream will be returned. TRY . DATA (file_id) = VALUE zfile_id( it_key_tab[ name = 'file_id' ]- value ). CATCH cx_sy_itab_line_not_found. RETURN . " leave here when no file_id provided ENDTRY . DATA (ls_file) = get_file( file_id ) " read your file you want to return (if it's not yet a binary stream, convert it) DATA (ls_stream) = VALUE ty_s_media_resource( value = ls_file- value mime_type = ls_file-mimetype ). " in my case it's 'application/pdf' " necessary to display the filename instead of $value in the viewer title TRY . " create pdf object DATA (lo_fp) = cl_fp=>get_reference( ). DATA (lo_pdfobj) = lo_fp->create_pdf_object( connection = 'ADC' ). lo_pdfobj->set_document( pdfdata = ls_stream- value ). " set title lo_pdfobj->set_metadata( VALUE #( title = ls_file-filename ) ). lo_pdfobj->execute( ). " get pdf 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 DATA (lo_fpex). ENDTRY . copy_data_to_ref( EXPORTING is_data = ls_stream CHANGING cr_data = er_stream ). " necessary for the pdf to be opened inline instead of a download (also sets the filename when downloaded) /iwbep/if_mgw_conv_srv_runtime~set_header( VALUE #( name = 'content-disposition' value = |inline; filename={ ls_file-filename }| ) ). ENDMETHOD |
Quick way to open a PDFViewer in your UI5 App:
1 2 3 4 | const pdfViewer = new PDFViewer ( ) pdfViewer . setSource ( "/sap/opu/odata/ZMY_SEVICE" + my_path + "/$value" ) // my_path could be something like this "/PdfSet('file_id')" pdfViewer . setTitle ( "My PDFViewer Title" ) // title of the popup, not the viewer pdfViewer . open ( ) |