SAP ABAP打印Spool Request到PDF

其实打印到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 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 '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_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.
  DATA: LF 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

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值