ABAP Report Immediate convert to PDF

*
* You have to execute Online as it uses the DOWNLOAD functions.
* This report takes another report as input, and captures the output of
* that report. The output is then converted to PDF and
* saved to a local file. This shows how to use some of the PDF function
* modules, as well as an easy way to create PDF files
* Works in 4.6c
*
report zabap_2_pdf.
*-- TABLES
 tables:
   tsp01.
*-- STRUCTURES
 data:
   mstr_print_parms like pri_params,
   mc_valid(1)      type c,
   mi_bytecount     type i,
   mi_length        type i,
   mi_rqident       like tsp01-rqident.
*-- INTERNAL TABLES
 data:
   mtab_pdf    like tline occurs 0 with header line,
   mc_filename like rlgrap-filename.
*-- SELECTION SCREEN
 parameters:
   p_repid like sy-repid,                     " Report to execute
   p_linsz like sy-linsz default 132,         " Line size
   p_paart like sy-paart default 'X_65_132'.  " Paper Format
 start-of-selection.
 concatenate 'c:\'
             p_repid
             '.pdf'
   into mc_filename.
*-- Setup the Print Parmaters
   call function 'GET_PRINT_PARAMETERS'
    exporting
      authority = space
      copies   = '1'
      cover_page                   = space
      data_set = space
      department                   = space
      destination                  = space
      expiration                   = '1'
      immediately                  = space
      in_archive_parameters        = space
      in_parameters                = space
      layout   = space
      mode     = space
      new_list_id                  = 'X'
      no_dialog = 'X'
      user     = sy-uname
    importing
      out_parameters               = mstr_print_parms
      valid    = mc_valid
    exceptions
      archive_info_not_found       = 1
      invalid_print_params         = 2
      invalid_archive_params       = 3
      others   = 4.
*-- Make sure that a printer destination has been set up
*-- If this is not done the PDF function module ABENDS
   if mstr_print_parms-pdest = space.
     mstr_print_parms-pdest = 'LOCL'.
   endif.
*-- Explicitly set line width, and output format so that
*-- the PDF conversion comes out OK
   mstr_print_parms-linsz = p_linsz.
   mstr_print_parms-paart = p_paart.
   submit (p_repid) to sap-spool without spool dynpro
                    spool parameters mstr_print_parms
                    via selection-screen
                    and return.
*-- Find out what the spool number is that was just created
   perform get_spool_number using sy-repid
                                  sy-uname
     changing mi_rqident.
*-- Convert Spool to PDF
   call function 'CONVERT_ABAPSPOOLJOB_2_PDF'
     exporting
       src_spoolid = mi_rqident
       no_dialog  = space
       dst_device = mstr_print_parms-pdest
     importing
       pdf_bytecount                  = mi_bytecount
     tables
       pdf        = mtab_pdf
     exceptions
       err_no_abap_spooljob           = 1
       err_no_spooljob                = 2
       err_no_permission              = 3
       err_conv_not_possible          = 4
       err_bad_destdevice             = 5
       user_cancelled                 = 6
       err_spoolerror                 = 7
       err_temseerror                 = 8
       err_btcjob_open_failed         = 9
       err_btcjob_submit_failed       = 10
       err_btcjob_close_failed        = 11
       others     = 12.

 call function 'DOWNLOAD'
      exporting
           bin_filesize            = mi_bytecount
           filename                = mc_filename
           filetype                = 'BIN'
      importing
           act_filename            = mc_filename
      tables
           data_tab                = mtab_pdf.
*---------------------------------------------------------------------*
*       FORM get_spool_number *
*---------------------------------------------------------------------*
*       Get the most recent spool created by user/report              *
*---------------------------------------------------------------------*
*  -->  F_REPID               *
*  -->  F_UNAME               *
*  -->  F_RQIDENT             *
*---------------------------------------------------------------------*
form get_spool_number using f_repid
      f_uname
                 changing f_rqident.
   data:
     lc_rq2name like tsp01-rq2name.
   concatenate f_repid+0(8)
               f_uname+0(3)
     into lc_rq2name separated by '__'.

   select * from tsp01 where  rq2name = lc_rq2name
   order by rqcretime descending.
     f_rqident = tsp01-rqident.
     exit.
   endselect.
   if sy-subrc ne 0.
     clear f_rqident.
   endif.
endform." get_spool_number
 
Beam Back -> ABAP Questions and Answers