*&---------------------------------------------------------------------*
*& 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:需要设置个人打印机(因:预览或下载时不出现[打印设备选择窗口])