Skip to Content
Technical Articles
Author's profile photo Amy King

Merge Smart Form Copies

Overview

The Smart Form copies window is a useful feature that can be used to print a Smart Form in duplicate, triplicate, etc. while distinguishing a copy from the original or distinguishing one copy from another copy, e.g., when one copy is the customer copy and the original is the office copy.

Extra processing steps are needed to generate a single PDF document which combines these copies.

By using the copynumber parameter available in the interface of function module CONVERT_OTF since SAP_BASIS 620 along with utility class CL_RSPO_PDF_MERGE introduced in SAP_BASIS 731, we can retrieve all Smart Form copies and merge them into a single PDF document.

N.B., the code samples below use new ABAP syntax introduced in SAP_BASIS 740. If you are at a lower release, you can rework these statements to achieve the same result.

Step 1: Instantiate the PDF Utility

DATA(lo_pdf_helper) = NEW cl_rspo_pdf_merge( ).

Step 2: Generate Smart Form Output

DATA fm_name TYPE rs38l_fnam.
DATA job_output_info TYPE ssfcrescl.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
  EXPORTING
    formname           = 'MY_SMARTFORM'
  IMPORTING
    fm_name            = fm_name
  EXCEPTIONS
    no_form            = 1
    no_function_module = 2
    OTHERS             = 3.

DATA(control_parameters) = VALUE ssfctrlop( getotf = abap_true 
                                            no_dialog = abap_true ).

DATA(output_options) = VALUE ssfcompop( tdcopies = 3 ). " however many copies are needed

CALL FUNCTION fm_name
  EXPORTING
    control_parameters = control_parameters
    output_options     = output_options
    ...                = ...
  IMPORTING
    job_output_info    = job_output_info
  EXCEPTIONS
    formatting_error   = 1
    internal_error     = 2
    send_error         = 3
    user_canceled      = 4
    OTHERS             = 5.

Step 3: Convert OTF Data of Each Copy and Collect into the PDF Utility

DATA bin_file TYPE xstring
DATA lines TYPE tline_tab.

DO output_options-tdcopies TIMES.

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
      copynumber            = CONV rspocopies( sy-index )
    IMPORTING
      bin_file              = bin_file
    TABLES
      otf                   = job_output_info-otfdata[]
      lines                 = lines
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.
 
  IF sy-subrc IS INITIAL.
    lo_pdf_helper->add_document( bin_file ).
  ENDIF.

ENDDO. " output_options-tdcopies

Step 4: Merge Individual PDF Documents

lo_pdf_helper->merge_documents( 
  IMPORTING 
    merged_document = DATA(merged_document) 
).

Step 5: Proceed According to Your Application’s Needs

In this example, we download the merged PDF to the local file system.

DATA bin_tab TYPE ty_xline_tabtype.
DATA filename TYPE string.

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer     = merged_document
  TABLES
    binary_tab = bin_tab.

DATA(lo_gui) = NEW cl_gui_frontend_services( ).

lo_gui->gui_download(
  EXPORTING
    filename = filename
    filetype = 'BIN'
  CHANGING
    data_tab = bin_tab
).

Assigned Tags

      2 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Sandra Rossi
      Sandra Rossi

      Maybe it can be of some interest, the class CL_RSPO_PDF_MERGE is introduced by the note 2264208 - Merging PDF files (ABAP interface)

      Author's profile photo Karan K
      Karan K

      Hi Amy,

      What if we gave large size files so will it throw the dump or it will only take time to download?