*&---------------------------------------------------------------------*
*& Report Y_ABC_SMF
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Y_ABC_SMF.
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_ABC_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_OTF TYPE TSFOTF
PV_TITLE.
DATA: L_FNAME TYPE STRING, " 文件名
L_FSFIX TYPE STRING, " 后缀名
L_ALL TYPE STRING, " 文件名+后缀名
L_FULL TYPE STRING. " 文件路径+文件名+后缀名
DATA: L_PDF TYPE STRING. " OTF转换格式
DATA: L_BIN TYPE STRING. " 下载格式
DATA: L_LINES TYPE TABLE OF TLINE WITH HEADER LINE.
DATA: L_DOCS TYPE TABLE OF DOCS.
DATA: L_LEN TYPE I.
DATA: LT_RECORD TYPE X OCCURS 0 WITH HEADER LINE.
CHECK PT_OTF[] IS NOT INITIAL.
L_FNAME = PV_TITLE && SY-DATUM && SY-UZEIT.
"" 打印预览
PERFORM FRM_SSFCOMP_PDF_PREVIEW TABLES PT_OTF.
" 下载1
L_FSFIX = 'PDF'.
L_BIN = 'BIN'.
PERFORM FRM_WS_FILENAME_GET USING L_FNAME L_FSFIX CHANGING L_ALL L_FULL. "" 获取路径
PERFORM FRM_CONVERT_OTF_2_PDF TABLES PT_OTF L_DOCS L_LINES CHANGING L_LEN .
PERFORM FRM_GUI_DOWNLOAD TABLES L_LINES USING L_LEN L_FULL L_BIN. "" 下载文件
" 下载2
L_FSFIX = 'PDF'.
L_PDF = 'PDF'.
L_BIN = 'BIN'.
PERFORM FRM_WS_FILENAME_GET USING L_FNAME L_FSFIX CHANGING L_ALL L_FULL. "" 获取路径
PERFORM FRM_CONVERT_OTF_V1 TABLES PT_OTF L_LINES USING L_PDF CHANGING L_LEN.
PERFORM FRM_GUI_DOWNLOAD TABLES L_LINES USING L_LEN L_FULL L_BIN. "" 下载文件
" 下载3
L_FSFIX = 'PDF'.
L_PDF = 'PDF'.
L_BIN = 'BIN'.
PERFORM FRM_WS_FILENAME_GET USING L_FNAME L_FSFIX CHANGING L_ALL L_FULL. "" 获取路径
PERFORM FRM_CONVERT_OTF_V2 TABLES PT_OTF LT_RECORD USING L_PDF CHANGING L_LEN.
PERFORM FRM_GUI_DOWNLOAD TABLES L_LINES USING L_LEN L_FULL L_BIN. "" 下载文件
ENDFORM. "FRM_SAVE_TO_PDF
*&---------------------------------------------------------------------*
*& Form FRM_WS_FILENAME_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PV_TITLE text
* -->P_0199 text
*----------------------------------------------------------------------*
FORM FRM_WS_FILENAME_GET USING PV_FNAME PV_SUFFIX
CHANGING CV_FILE_ALL CV_FILE_FULL.
CONCATENATE PV_FNAME '.' PV_SUFFIX INTO CV_FILE_ALL.
"""""""""""""" 获取下载路径
CALL FUNCTION 'WS_FILENAME_GET' "#EC *
EXPORTING
DEF_FILENAME = CV_FILE_ALL
DEF_PATH = ' '
MASK = '导入'
MODE = 'S'
TITLE = 'Title'
IMPORTING
FILENAME = CV_FILE_FULL
* 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.
ENDFORM. " FRM_WS_FILENAME_GET
*&---------------------------------------------------------------------*
*& Form FRM_CONVERT_OTF_2_PDF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PT_TSFOTF text
* <--P_L_LEN text
* <--P_L_DOCS text
* <--P_L_LINES text
*----------------------------------------------------------------------*
FORM FRM_CONVERT_OTF_2_PDF TABLES P_T_TSFOTF TYPE TSFOTF
P_T_DOCS STRUCTURE DOCS
P_T_LINES STRUCTURE TLINE
CHANGING CV_LEN.
CALL FUNCTION 'CONVERT_OTF_2_PDF'
IMPORTING
BIN_FILESIZE = CV_LEN
TABLES
OTF = P_T_TSFOTF[]
DOCTAB_ARCHIVE = P_T_DOCS[]
LINES = P_T_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.
ENDFORM. " FRM_CONVERT_OTF_2_PDF
*&---------------------------------------------------------------------*
*& Form FRM_GUI_DOWNLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_LINES text
* -->P_L_LEN text
* -->P_L_FILENAME text
* -->P_0217 text
*----------------------------------------------------------------------*
FORM FRM_GUI_DOWNLOAD TABLES P_T_LINES
USING PV_LEN
PV_FILENAME
PV_TYP.
CHECK P_T_LINES[] IS NOT INITIAL.
CHECK PV_FILENAME IS NOT INITIAL.
CHECK PV_LEN IS NOT INITIAL.
CHECK PV_TYP IS NOT INITIAL.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
BIN_FILESIZE = PV_LEN
FILENAME = PV_FILENAME
FILETYPE = PV_TYP " 'BIN'
CHANGING
DATA_TAB = P_T_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_GUI_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form FRM_SSFCOMP_PDF_PREVIEW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PT_TSFOTF text
*----------------------------------------------------------------------*
FORM FRM_SSFCOMP_PDF_PREVIEW TABLES PT_TSFOTF TYPE TSFOTF.
CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
EXPORTING
I_OTF = PT_TSFOTF[]
EXCEPTIONS
CONVERT_OTF_TO_PDF_ERROR = 1
CNTL_ERROR = 2
OTHERS = 3.
ENDFORM. " FRM_SSFCOMP_PDF_PREVIEW
*&---------------------------------------------------------------------*
*& Form FRM_CONVERT_OTF_V1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PT_OTF text
* -->P_L_LINES text
* -->P_0205 text
* <--P_L_LEN text
* <--P_LV_XSTR text
*----------------------------------------------------------------------*
FORM FRM_CONVERT_OTF_V1 TABLES P_T_OTF TYPE TSFOTF
P_T_LINES STRUCTURE TLINE
USING PV_TYP
CHANGING P_L_LEN .
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = PV_TYP " 'PDF'
* MAX_LINEWIDTH = 132
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
IMPORTING
BIN_FILESIZE = P_L_LEN
TABLES
OTF = P_T_OTF[]
LINES = P_T_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.
ENDFORM. " FRM_CONVERT_OTF_V1
*&---------------------------------------------------------------------*
*& Form FRM_CONVERT_OTF_V2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PT_OTF text
* -->P_L_LINES text
* -->P_0205 text
* <--P_L_LEN text
* <--P_LV_XSTR text
*----------------------------------------------------------------------*
FORM FRM_CONVERT_OTF_V2 TABLES P_T_OTF TYPE TSFOTF
PT_RECORD TYPE STANDARD TABLE
USING PV_TYP
CHANGING P_L_LEN.
DATA: LV_XSTR TYPE XSTRING.
DATA: LT_RECORD TYPE X OCCURS 0 WITH HEADER LINE.
DATA: LT_LINES TYPE TABLE OF TLINE WITH HEADER LINE..
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = PV_TYP " 'PDF'
* MAX_LINEWIDTH = 132
* ARCHIVE_INDEX = ' '
* COPYNUMBER = 0
* ASCII_BIDI_VIS2LOG = ' '
IMPORTING
BIN_FILESIZE = P_L_LEN
BIN_FILE = LV_XSTR
TABLES
OTF = P_T_OTF[]
LINES = LT_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 FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_XSTR
IMPORTING
OUTPUT_LENGTH = P_L_LEN
TABLES
BINARY_TAB = LT_RECORD[].
FIELD-SYMBOLS: <FS_DAT1> TYPE ANY.
DATA: LV_STR1 TYPE STRING.
FIELD-SYMBOLS: <FS_DAT2> TYPE ANY.
DATA: LV_STR2 TYPE STRING.
LV_STR1 = 'LT_RECORD[]'.
ASSIGN (LV_STR1) TO <FS_DAT1>.
LV_STR2 = 'PT_RECORD[]'.
ASSIGN (LV_STR2) TO <FS_DAT2>.
<FS_DAT2> = <FS_DAT1>.
ENDFORM. " FRM_CONVERT_OTF_V2
注:SU3:需要设置个人打印机(因:预览或下载时不出现[打印设备选择窗口])