ABAP程序打印Spool Request到PDF

来源:互联网 发布:大型分析仪器仿真软件 编辑:程序博客网 时间:2024/06/07 15:59

其实打印到pdf完全不需要程序,只要你装了pdf打印生成软件,打印的时候选择pdf也就行了。

本文的程序非我所做,不过也不知道从哪里拿到的了。在不经意间看到了,于是在机器上测试下,发现有些地方需要更正。改好了,测试好了,放上来分享给大家。


程序源代码如下: 

*-- Enhancements: only allow to be run with variant.  Then called
*-- program will be transparent to users
*-- 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 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 'd:\'
              P_REPID
              '.pdf'
    INTO MC_FILENAME.
*-- Setup the Print Parmaters
  CALL FUNCTION 'GET_PRINT_PARAMETERS'
    EXPORTING
      COPIES                 '1'
      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_REPIDTO 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.
  DATALF TYPE STRING.
  LF MC_FILENAME.
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
*     BIN_FILESIZE            =
      FILENAME                LF
      FILETYPE                'BIN'
*     APPEND                  = ' '
*     WRITE_FIELD_SEPARATOR   = ' '
*     HEADER                  = '00'
*     TRUNC_TRAILING_BLANKS   = ' '
*     WRITE_LF                = 'X'
*     COL_SELECT              = ' '
*     COL_SELECT_MASK         = ' '
*     DAT_MODE                = ' '
*     CONFIRM_OVERWRITE       = ' '
*     NO_AUTH_CHECK           = ' '
*     CODEPAGE                = ' '
*     IGNORE_CERR             = ABAP_TRUE
*     REPLACEMENT             = '#'
*     WRITE_BOM               = ' '
*     TRUNC_TRAILING_BLANKS_EOL       = 'X'
*     WK1_N_FORMAT            = ' '
*     WK1_N_SIZE              = ' '
*     WK1_T_FORMAT            = ' '
*     WK1_T_SIZE              = ' '
*     WRITE_LF_AFTER_LAST_LINE        = ABAP_TRUE
*     SHOW_TRANSFER_STATUS    = ABAP_TRUE
* IMPORTING
*     FILELENGTH              =
    TABLES
      DATA_TAB                MTAB_PDF
*     FIELDNAMES              =
    EXCEPTIONS
      FILE_WRITE_ERROR        1
      NO_BATCH                2
      GUI_REFUSE_FILETRANSFER 3
      INVALID_TYPE            4
      NO_AUTHORITY            5
      UNKNOWN_ERROR           6
      HEADER_NOT_ALLOWED      7
      SEPARATOR_NOT_ALLOWED   8
      FILESIZE_NOT_ALLOWED    9
      HEADER_TOO_LONG         10
      DP_ERROR_CREATE         11
      DP_ERROR_SEND           12
      DP_ERROR_WRITE          13
      UNKNOWN_DP_ERROR        14
      ACCESS_DENIED           15
      DP_OUT_OF_MEMORY        16
      DISK_FULL               17
      DP_TIMEOUT              18
      FILE_NOT_FOUND          19
      DATAPROVIDER_EXCEPTION  20
      CONTROL_FLUSH_ERROR     21
      OTHERS                  22.
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*  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(9)
              F_UNAME+0(3)
    INTO LC_RQ2NAME.
  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





0 0