ABAP-SMARTFORMS-PDF(预览、下载)

*&---------------------------------------------------------------------*
*& Report  Y_CLY_5
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Y_CLY_5.

START-OF-SELECTION.
  DATA: LT_DATA TYPE TABLE OF T001 WITH HEADER LINE.
  DO 20 TIMES.
    LT_DATA-BUKRS = SY-INDEX.
    APPEND LT_DATA.
  ENDDO.

  PERFORM FRM_PRINT.

*&---------------------------------------------------------------------*
*&      Form  FRM_PRINT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_PRINT .

**********************************************************************
  DATA: L_FNAME TYPE RS38L_FNAM.
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME = 'Y_TEST_CLY_1'
    IMPORTING
      FM_NAME  = L_FNAME.

  DATA: L_OUTPUT_OPTIONS  TYPE SSFCOMPOP ,
        L_TMP_CONTROL_PAR LIKE SSFCTRLOP,
        L_JOB_OUTPUT_INFO TYPE SSFCRESCL  ,
        L_PRINTCOUNT TYPE I.



***以下设置打印预览功能***
****Smart Forms: 控制结构*****
  L_TMP_CONTROL_PAR-GETOTF        = 'X'. "这个参数一定要设:OTF 表的返回。无打印,显示或传真
*  L_TMP_CONTROL_PAR-PREVIEW       = 'X'.            "打印预览
  L_TMP_CONTROL_PAR-NO_DIALOG     = 'X'.            "必须设置
**  L_TMP_CONTROL_PAR-DEVICE        = 'PRINTER'.

****SAP Smart Forms: 智能写作器 (传输) 选项*****
  L_OUTPUT_OPTIONS-TDNOPREV  = 'X'.                      "是否打印预览,X 不预览。
  L_OUTPUT_OPTIONS-TDNOPRINT = 'X'.                      "没有打印输出,X 不显示。
  L_OUTPUT_OPTIONS-TDIMMED   = 'X'.                      "立即打印标志。
  L_OUTPUT_OPTIONS-TDIEXIT   = 'X'.                      "预览打印后直接退出
*  L_OUTPUT_OPTIONS-TDDEST    = 'RED_LOCAL'.              "假脱机,输出设备。



  DATA: L_LINES TYPE I.
  DATA: G_C_X TYPE C VALUE 'X'.
  DESCRIBE TABLE LT_DATA LINES L_LINES.


  LOOP AT LT_DATA.
    CASE SY-TABIX.
      WHEN 1.
        L_TMP_CONTROL_PAR-NO_CLOSE = G_C_X.
        L_TMP_CONTROL_PAR-NO_OPEN  = SPACE.
      WHEN L_LINES.
        L_TMP_CONTROL_PAR-NO_CLOSE = SPACE.
        L_TMP_CONTROL_PAR-NO_OPEN  = G_C_X.
      WHEN OTHERS.
        L_TMP_CONTROL_PAR-NO_CLOSE = G_C_X.
        L_TMP_CONTROL_PAR-NO_OPEN  = G_C_X.
    ENDCASE.

    IF L_LINES = 1 .
      L_TMP_CONTROL_PAR-NO_CLOSE = SPACE.
      L_TMP_CONTROL_PAR-NO_OPEN  = SPACE.
    ENDIF.

    CALL FUNCTION L_FNAME
      EXPORTING
*   ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
        CONTROL_PARAMETERS         = L_TMP_CONTROL_PAR
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
        OUTPUT_OPTIONS             = L_OUTPUT_OPTIONS
*   USER_SETTINGS              = 'X'
     IMPORTING
*   DOCUMENT_OUTPUT_INFO       =
       JOB_OUTPUT_INFO            = L_JOB_OUTPUT_INFO
*   JOB_OUTPUT_OPTIONS         =
* EXCEPTIONS
*   FORMATTING_ERROR           = 1
*   INTERNAL_ERROR             = 2
*   SEND_ERROR                 = 3
*   USER_CANCELED              = 4
*   OTHERS                     = 5
              .


    PERFORM FRM_SAVE_TO_PDF USING L_JOB_OUTPUT_INFO-OTFDATA[] 'strtel'.



  ENDLOOP.

ENDFORM.                    " FRM_PRINT
*&---------------------------------------------------------------------*
*&      FORM  FRM_SAVE_TO_PDF
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_ANSWER   TEXT
*      -->PT_TSFOTF  TEXT
*----------------------------------------------------------------------*
FORM FRM_SAVE_TO_PDF USING PT_TSFOTF TYPE TSFOTF
                           PV_TITLE.
  DATA: L_DEF_FILENAME TYPE STRING,
        L_FILENAME     TYPE STRING.

  DATA: L_LINES TYPE TABLE OF TLINE WITH HEADER LINE.
  DATA: L_DOCS  TYPE TABLE OF DOCS.
  DATA: L_LEN   TYPE I.

  CHECK PT_TSFOTF[] IS NOT INITIAL.

  CONCATENATE PV_TITLE '.PDF' INTO L_DEF_FILENAME.

""""""""""""""" 获取下载路径
*  CALL FUNCTION 'WS_FILENAME_GET'                           "#EC *
*   EXPORTING
*     DEF_FILENAME           = L_DEF_FILENAME
*     DEF_PATH               = ' '
*     MASK                   = TEXT-Z02
*     MODE                   = 'S'
*     TITLE                  = TEXT-052
*   IMPORTING
*     FILENAME               = L_FILENAME
**       RC                     = L_RC
*   EXCEPTIONS
*     INV_WINSYS             = 1
*     NO_BATCH               = 2
*     SELECTION_CANCEL       = 3
*     SELECTION_ERROR        = 4
*     OTHERS                 = 5
*            .
*  IF SY-SUBRC <> 0.
*    IF SY-MSGTY IS NOT INITIAL.
*      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.
*    RETURN.
*  ENDIF.

  CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
    EXPORTING
      I_OTF                    = PT_TSFOTF[] "T_OTF[]
    EXCEPTIONS
      CONVERT_OTF_TO_PDF_ERROR = 1
      CNTL_ERROR               = 2
      OTHERS                   = 3.

  "" 方法2
*    CALL FUNCTION 'CONVERT_OTF_2_PDF'
*      IMPORTING
*        BIN_FILESIZE           = L_LEN
*      TABLES
*        OTF                    = PT_TSFOTF "W_RETURN-OTFDATA[]
*        DOCTAB_ARCHIVE         = L_DOCS[]
*        LINES                  = L_LINES[]
*      EXCEPTIONS
*        ERR_CONV_NOT_POSSIBLE  = 1
*        ERR_OTF_MC_NOENDMARKER = 2
*        OTHERS                 = 3.
*    IF SY-SUBRC <> 0.
*      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.

  "" 方法3
*    CALL FUNCTION 'CONVERT_OTF'
*      EXPORTING
*        FORMAT                = 'PDF'
**       MAX_LINEWIDTH         = 132
**       ARCHIVE_INDEX         = ' '
**       COPYNUMBER            = 0
**       ASCII_BIDI_VIS2LOG    = ' '
*      IMPORTING
*        BIN_FILESIZE          = L_LEN
*      TABLES
*        OTF                   = PT_TSFOTF[]
*        LINES                 = L_LINES[]
*      EXCEPTIONS
*        ERR_MAX_LINEWIDTH     = 1
*        ERR_FORMAT            = 2
*        ERR_CONV_NOT_POSSIBLE = 3
*        ERR_BAD_OTF           = 4
*        OTHERS                = 5.
*    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 METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
*      EXPORTING
*        BIN_FILESIZE = L_LEN
*        FILENAME     = L_FILENAME
*        FILETYPE     = 'BIN'
*      CHANGING
*        DATA_TAB     = L_LINES[]
*      EXCEPTIONS
*        OTHERS       = 1.
*    IF SY-SUBRC <> 0.
*      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*    ENDIF.


ENDFORM.                    "FRM_SAVE_TO_PDF

注:SU3:需要设置个人打印机(因:预览或下载时不出现[打印设备选择窗口])

猜你喜欢

转载自blog.csdn.net/cly_apple/article/details/84840400