REPORT Z_PDF_MODULE.
TYPES: BEGIN OF gty_result,
content TYPE fpcontent,
END OF gty_result,
gty_result_tab TYPE STANDARD TABLE OF gty_result.
DATA: ls_result TYPE gty_result,
gt_result TYPE gty_result_tab.
START-OF-SELECTION.
PERFORM FRM_PRINT_SFP.
*&---------------------------------------------------------------------*
*& Form FRM_PRINT_SFP
*&---------------------------------------------------------------------*
* 启动打印
* 打开->导入->填充数据->关闭
* 多份PDF合并为一份 FP_CHECK_BATCH_PDF_RETURN
* FP_GET_PDF_TABLE gets all the PDFs returned by ADS
*----------------------------------------------------------------------*
FORM FRM_PRINT_SFP .
DATA: FM_NAME TYPE RS38L_FNAM, "功能模块的名称
FP_DOCPARAMS TYPE SFPDOCPARAMS, "格式处理格式参数
FP_OUTPUTPARAMS TYPE SFPOUTPUTPARAMS, "格式处理输出参数
*--------------------------------------------------------------------*
lt_data TYPE tsfixml,
LV_SEP TYPE C,
L_FILE TYPE STRING,
LS_PDF_FILE TYPE FPFORMOUTPUT,
LO_PDF_MERGER TYPE REF TO CL_RSPO_PDF_MERGE,
LT_PDF_TABLE TYPE TFPCONTENT,
lv_merged_document TYPE xstring,
lv_rc TYPE i value 0,
lv_len TYPE i,
msg TYPE REF TO cx_rspo_pdf_merge.
*--------------------------------------------------------------------*
*打印默认勾选参数
FP_OUTPUTPARAMS-DEST = 'LP01'.
FP_OUTPUTPARAMS-NODIALOG = abap_true.
FP_OUTPUTPARAMS-PREVIEW = abap_false.
FP_OUTPUTPARAMS-GETPDF = 'M'.
FP_OUTPUTPARAMS-ASSEMBLE = abap_true.
FP_OUTPUTPARAMS-BUMODE = 'M'.
FP_OUTPUTPARAMS-REQNEW = abap_true.
* 设置语言
* FP_DOCPARAMS-LANGU = 'E'.
* FP_DOCPARAMS-COUNTRY = 'US'.
*&----打开 SPOOL JOB
CALL FUNCTION 'FP_JOB_OPEN' "& FORM PROCESSING: CALL FORM
CHANGING
IE_OUTPUTPARAMS = FP_OUTPUTPARAMS
EXCEPTIONS
CANCEL = 1
USAGE_ERROR = 2
SYSTEM_ERROR = 3
INTERNAL_ERROR = 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.
*&----获取ADOBE FORM的名称参数
CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
EXPORTING
I_NAME = 'ZYC_PDF_T01'
IMPORTING
E_FUNCNAME = FM_NAME.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*&----数据填充
DO 2 TIMES .
CALL FUNCTION FM_NAME
EXPORTING
/1BCDWB/DOCPARAMS = FP_DOCPARAMS
"HEAD = GW_HEAD
"ITEM = GT_ITEM
IMPORTING
/1BCDWB/FORMOUTPUT = LS_PDF_FILE
EXCEPTIONS
USAGE_ERROR = 1
SYSTEM_ERROR = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CLEAR LS_PDF_FILE.
ENDDO.
*&----关闭
CALL FUNCTION 'FP_JOB_CLOSE'
EXCEPTIONS
USAGE_ERROR = 1
SYSTEM_ERROR = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*--------------------------------------------------------------------*begin 1
*第一种方式:
*&&-- Merging different PDF files into one
TRY .
CREATE OBJECT LO_PDF_MERGER.
CATCH cx_rspo_pdf_merge INTO msg.
"WRITE:/ msg->GET_LONGTEXT().
ENDTRY.
CALL FUNCTION 'FP_GET_PDF_TABLE'
IMPORTING
E_PDF_TABLE = LT_PDF_TABLE.
*--------------------------------------------------------------------*
* Add documents to attribute table of PDF merger
LOOP AT LT_PDF_TABLE INTO DATA(LWA_FORM).
LO_PDF_MERGER->ADD_DOCUMENT( LWA_FORM ).
ENDLOOP.
* Call kernel method to do the merge of the specified files.
lo_pdf_merger->merge_documents( IMPORTING merged_document = lv_merged_document
rc = lv_rc ).
*--------------------------------------------------------------------*end 1
*--------------------------------------------------------------------* begin 2
* CALL FUNCTION 'FP_GET_PDF_TABLE'
* IMPORTING
* E_PDF_TABLE = LT_PDF_TABLE.
* CLEAR ls_result.
* LOOP AT LT_PDF_TABLE INTO LS_RESULT-content.
* INSERT ls_result INTO TABLE gt_result.
* CLEAR ls_result.
* ENDLOOP.
*--------------------------------------------------------------------*end 2
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_TEMP_DIRECTORY
CHANGING
TEMP_DIR = L_FILE
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2
OTHERS = 3.
IF SY-SUBRC IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_FILE_SEPARATOR
CHANGING
FILE_SEPARATOR = LV_SEP
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
CONCATENATE L_FILE LV_SEP SY-REPID '.pdf' INTO L_FILE.
*--------------------------------------------------------------------*BEGIN 1
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = lv_merged_document
IMPORTING
output_length = lv_len
TABLES
BINARY_TAB = LT_DATA.
*--------------------------------------------------------------------* END 1
*--------------------------------------------------------------------*BEGIN 2
* CLEAR ls_result.
* READ TABLE gt_result INTO ls_result INDEX 1.
* CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
* EXPORTING
* BUFFER = ls_result-content
* TABLES
* BINARY_TAB = LT_DATA.
*--------------------------------------------------------------------*END 2
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
EXPORTING
BIN_FILESIZE = lv_len"1
"bin_filesize = XSTRLEN( ls_result-content ) " 2
FILENAME = L_FILE
FILETYPE = 'BIN'
CHANGING
DATA_TAB = LT_DATA
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
NOT_SUPPORTED_BY_GUI = 22
ERROR_NO_GUI = 23
OTHERS = 24.
IF SY-SUBRC IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE
EXPORTING
DOCUMENT = L_FILE
SYNCHRONOUS = 'X'
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
BAD_PARAMETER = 3
FILE_NOT_FOUND = 4
PATH_NOT_FOUND = 5
FILE_EXTENSION_UNKNOWN = 6
ERROR_EXECUTE_FAILED = 7
SYNCHRONOUS_FAILED = 8
NOT_SUPPORTED_BY_GUI = 9
OTHERS = 10.
IF SY-SUBRC IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'I' NUMBER '256'.
ENDIF.
* CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
* EXPORTING
* FILENAME = L_FILE
* CHANGING
* RC = LV_RC
* EXCEPTIONS
* FILE_DELETE_FAILED = 1
* CNTL_ERROR = 2
* ERROR_NO_GUI = 3
* FILE_NOT_FOUND = 4
* ACCESS_DENIED = 5
* UNKNOWN_ERROR = 6
* NOT_SUPPORTED_BY_GUI = 7
* WRONG_PARAMETER = 8
* OTHERS = 9.
* IF SY-SUBRC IS NOT INITIAL.
* MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
* ENDIF.
ENDFORM.