abap2UI5
Version 1.146.0

PDF ​

Render a PDF directly in your app — for printouts from Adobe Forms, SmartForms, archived documents from the Content Server, or anything else that produces an xstring.

Show It in Your Own View ​

sap.m.PDFViewer renders the document inline. It takes the PDF as a data:application/pdf;base64,... URI, so the whole job is: get the bytes, base64 them, bind the result.

Press Run — the base64 below is a real one-page PDF, so the viewer has something to show:

abap
CLASS z2ui5_cl_sample_pdf DEFINITION PUBLIC.

  PUBLIC SECTION.
    INTERFACES z2ui5_if_app.

    DATA mv_pdf TYPE string.

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS z2ui5_cl_sample_pdf IMPLEMENTATION.
  METHOD z2ui5_if_app~main.

    IF client->check_on_navigated( ).

      " In a real app this is your document, base64-encoded:
      "   DATA(lv_base64) = cl_web_http_utility=>encode_x_base64( lv_xstring ).
      " where lv_xstring comes from cl_fp_function_module=>get_pdf, an OTF
      " conversion of a SmartForm, or a SELECT from the archive.
    mv_pdf = `data:application/pdf;base64,` &&
             `JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwg` &&
             `L1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2Ug` &&
             `L1BhcmVudCAyIDAgUiAvTWVkaWFCb3ggWzAgMCA1OTUgODQyXSAvUmVzb3VyY2VzIDw8IC9Gb250IDw8IC9GMSA0IDAg` &&
             `UiA+PiA+PiAvQ29udGVudHMgNSAwIFIgPj4KZW5kb2JqCjQgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1R5` &&
             `cGUxIC9CYXNlRm9udCAvSGVsdmV0aWNhID4+CmVuZG9iago1IDAgb2JqCjw8IC9MZW5ndGggNTMgPj4Kc3RyZWFtCkJU` &&
             `IC9GMSAyNCBUZiA2MCA3MDAgVGQgKGFiYXAyVUk1IC0gUERGIFZpZXdlcikgVGogRVQKZW5kc3RyZWFtCmVuZG9iagp4` &&
             `cmVmCjAgNgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMDkgMDAwMDAgbiAKMDAwMDAwMDA1OCAwMDAwMCBuIAow` &&
             `MDAwMDAwMTE1IDAwMDAwIG4gCjAwMDAwMDAyNDEgMDAwMDAgbiAKMDAwMDAwMDMxMSAwMDAwMCBuIAp0cmFpbGVyCjw8` &&
             `IC9TaXplIDYgL1Jvb3QgMSAwIFIgPj4Kc3RhcnR4cmVmCjQxMwolJUVPRgo=`.

      DATA(view) = z2ui5_cl_ui5_view_builder=>factory(
          )->ele( n = `View` ns = `mvc`
              )->a( n = `xmlns`     v = `sap.m`
              )->a( n = `xmlns:mvc` v = `sap.ui.core.mvc`

              )->ele( `Page`
                  )->a( n = `title` v = `Invoice 4711`

                  )->tag( `PDFViewer`
                      )->a( n = `source` v = client->_bind( mv_pdf )
                      )->a( n = `title`  v = `Invoice 4711`
                      )->a( n = `height` v = `600px` ).

      client->view_display( view->stringify( ) ).
    ENDIF.

  ENDMETHOD.
ENDCLASS.

Leave height off and the viewer opens in its own dialog instead of sitting in the page — the same control, one property apart.

The base64 string travels in the model, so a large document is a large roundtrip. Past a few megabytes, offer the download below rather than rendering it inline.

For a ready-made dialog with a title bar and buttons, the popups add-on carries one.

Download Instead of Display ​

To let the user save the PDF rather than view it inline, use the file download pattern:

abap
client->follow_up_action(
    val   = client->cs_event-download_b64_file
    t_arg = VALUE #( ( `data:application/pdf;base64,` && lv_base64 )
                     ( `invoice_4711.pdf` ) ) ).

TIP

On older ABAP releases without cl_web_http_utility, use cl_http_utility=>if_http_utility~encode_x_base64( lv_xstring ) instead.

Working Samples ​

Complete apps from the sample catalog that use what this page describes. Each is a single class in abap2UI5/samples unless its row names another of the three sample repositories — pull that repository with abapGit and start the class with ?app_start=<class>.

Sample Class
Open the PDF Viewer by ID (A) Z2UI5_CL_SMP_APP_449
Edit this page on GitHub ↗ Last updated:
On this page