Skip to Content
Technical Articles

Printing QR Code and Digital Signature in Adobe Forms

Dear Friends,

I am writing this blog post, keeping in mind the current scenario, where we have to digitally sign e-invoices, which has both QR code and Digital signature on the same form. The problem with Digitally signing the document via the ADS server is, it removes the QR code from the form.

Introduction

SAP has given a solution for this, via note 2901700. But uses the concept of Job profiles, which works after SP-13. Please refer to note 1743567, to see how to use Job profiles.

In this blog post, we will see how we can get QR code and Digital signature on Adobe Form without using Job profiles. We will basically convert the QR code into the image (BMP) and then Digitally sign the form via ADS Server.

Before implementing the solution please check if you have SAP note 2790500 implemented in your system so that we can use class CL_RSTX_BARCODE_RENDERER. Go to SE24 and check if you have the above class in your system. If not then implement the given note for the same.

Use Case

We are creating an interactive adobe form with 2 fields QR Code and Digital Signature.

Steps

Open%20transaction%20SFP

Open transaction SFP

Create%20Interface%20for%20the%20form

Create Form Interface

Give%20Deta

Give Description and select interface type as ABAP Dictionary.

cc

Create an importing parameter as IV_QRCODE of type XSTRING. This will be getting QR code image from the driver program as XSTRING. Save and activate the interface.

Create%20Adobe%20Form

Create an Adobe Form

Assign%20Form%20Interface%20created%20above%20and%20give%20description%20to%20the%20form

Assign Form Interface created above and give the description to the form. Save the form

ff

Create a graphic node QR_CODE

ffff

Link Graphic node QR_CODE variable with XSTRING variable IV_QRCODE. Open design view

ffff

Create 2 fields in design view:

  • Signature field (SignatureField1)
  • Drag and drop QR_CODE image node

Save and Activate the form

ddd

Create Driver program for the form created via SE38 transaction (Executable Program)

Copy and paste the code given below

REPORT zqrdg_dp.

DATA :
  lv_fname        TYPE rs38l_fnam ,
  lv_formname     TYPE tdsfname VALUE 'ZQRDG_F',
  ls_fpformout    TYPE fpformoutput,
  lo_fp           TYPE REF TO if_fp,
  lo_pdfobj       TYPE REF TO if_fp_pdf_object,
  lv_len          TYPE i,
  lt_tab          TYPE TABLE OF solix,
  lv_file_name    TYPE string,
  lv_timestamps   TYPE string,
  lv_qrcode       TYPE xstring,
  iv_barcode_text TYPE string VALUE 'Test QR Data'.

cl_rstx_barcode_renderer=>qr_code(
  EXPORTING
    i_module_size      = 20
    i_mode             = 'A'
    i_error_correction = 'H'
    i_barcode_text     = iv_barcode_text
  IMPORTING
    e_bitmap           = lv_qrcode
       ).

DATA(l_control) = VALUE ssfctrlop( no_dialog = 'X' preview = 'X' no_open = '' no_close = '' device = 'Z_ADS' ).

DATA(ls_outputparams) = VALUE sfpoutputparams( getpdf = 'X' dest = 'ZADS' ).

DATA(ls_docparams) = VALUE sfpdocparams( fillable = 'X' ).

CALL FUNCTION 'FP_JOB_OPEN'
  CHANGING
    ie_outputparams = ls_outputparams
  EXCEPTIONS
    cancel          = 1
    usage_error     = 2
    system_error    = 3
    internal_error  = 4
    OTHERS          = 5.

CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
  EXPORTING
    i_name     = lv_formname
  IMPORTING
    e_funcname = lv_fname.


CALL FUNCTION lv_fname
  EXPORTING
    /1bcdwb/docparams  = ls_docparams
    iv_qrcode          = lv_qrcode
  IMPORTING
    /1bcdwb/formoutput = ls_fpformout
  EXCEPTIONS
    usage_error        = 1
    system_error       = 2
    internal_error     = 3
    OTHERS             = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION 'FP_JOB_CLOSE'
  EXCEPTIONS
    usage_error    = 1
    system_error   = 2
    internal_error = 3
    OTHERS         = 4.

lo_fp = cl_fp=>get_reference( ).

lo_pdfobj = lo_fp->create_pdf_object( connection = CONV #('ADS') ).

CALL METHOD lo_pdfobj->set_document
  EXPORTING
    pdfdata = ls_fpformout-pdf.

CALL METHOD lo_pdfobj->set_template
  EXPORTING
    xftdata  = ls_fpformout-pdf
    fillable = 'X'.

CALL METHOD lo_pdfobj->set_signature
  EXPORTING
    keyname     = 'STTGlobal' "'ReaderRights' "Signature name from solution manager
    fieldname   = 'SignatureField1'
    reason      = 'TEST'
    location    = 'Mumbai'
    contactinfo = 'Rajesh'.
TRY.

    CALL METHOD lo_pdfobj->execute( ).

  CATCH cx_fp_runtime_internal INTO DATA(lc_interanl).
    MESSAGE lc_interanl->get_longtext( ) TYPE 'I'.
  CATCH cx_fp_runtime_system INTO DATA(lc_runtime).
    MESSAGE lc_runtime->get_longtext( ) TYPE 'I'.
  CATCH cx_fp_runtime_usage INTO DATA(lc_usage).
    MESSAGE lc_usage->get_longtext( ) TYPE 'I'.

ENDTRY.

*   get result -> l_out
CALL METHOD lo_pdfobj->get_document
  IMPORTING
    pdfdata = DATA(lv_out).

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer        = lv_out
*   buffer        = l_pdf
  IMPORTING
    output_length = lv_len
  TABLES
    binary_tab    = lt_tab.

GET TIME STAMP FIELD DATA(lv_timestamp).
lv_timestamps = lv_timestamp.
CONCATENATE 'C:\temp\' lv_timestamps '.pdf' INTO lv_file_name.

CALL METHOD cl_gui_frontend_services=>gui_download
  EXPORTING
    bin_filesize = lv_len "bitmap2_size "l_len
    filename     = lv_file_name
    filetype     = 'BIN'
  CHANGING
    data_tab     = lt_tab
  EXCEPTIONS
    OTHERS       = 1.

Activate the code and run the same. We will get the Form saved at the path given in the code

We%20can%20see%20both%20QR%20Code%20and%20Digital%20signature%20in%20the%20form

We can see both QR Code and Digital signature in the form

Conclusion

E-signing the document is a common requirement. The above process will help us in achieving the same. In the future SAP may release notes, wherein we can directly print QR Code and Digital signature without many hurdles. But till that time this code will work.

3 Comments
You must be Logged on to comment or reply to a post.
    • Hi Yugandhar,

      I think you have placed your QR Code on the master page. Usually, if you place your QR code on the master page then it will print as a grey image and if you put the same on the body then instead of QR code you will get the value of the code in print.

      To resolve the above issue, try to use job profiles and still of you are not able to resolve,  then follow the blog to print QR code as image

  • /
    SFP%20setting