PDF多份文档合并为一份
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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏