ABAP中按指定页段拆分假脱机请求并下载的方案问询
SAP原生ABAP拆分假脱机请求为指定页段PDF方案
- 直接使用SAP标准函数
RSPO_DOWNLOAD_SPOOLJOB即可实现,无需修改原报表。该函数支持指定起始页和结束页,直接导出对应页段的PDF文件:- 核心参数说明:
SPOOLID:传入目标假脱机请求IDPAGE_FROM:设置要导出的起始页码PAGE_TO:设置要导出的结束页码FORMAT:固定传入'PDF'指定输出格式FILENAME:定义输出文件的路径和名称
- 核心参数说明:
- 结合你已掌握的
RSPO_GET_PAGES_SPOOLJOB获取总页数后,可通过循环批量生成每2页的PDF,示例ABAP代码:DATA: lv_total_pages TYPE i, lv_spoolid TYPE tsp01-rqident, lv_page_from TYPE i, lv_page_to TYPE i, lv_filename TYPE string. " 获取假脱机请求总页数 CALL FUNCTION 'RSPO_GET_PAGES_SPOOLJOB' EXPORTING rqident = lv_spoolid IMPORTING pages = lv_total_pages. " 循环拆分每2页为一个独立PDF DO (lv_total_pages DIV 2) TIMES. lv_page_from = ( sy-index - 1 ) * 2 + 1. lv_page_to = sy-index * 2. " 处理总页数为奇数的情况(最后一段仅1页) IF lv_page_to > lv_total_pages. lv_page_to = lv_total_pages. ENDIF. lv_filename = |SPOOL_{ lv_spoolid }_PAGES_{ lv_page_from }-{ lv_page_to }.pdf|. " 导出指定页段的PDF CALL FUNCTION 'RSPO_DOWNLOAD_SPOOLJOB' EXPORTING rqident = lv_spoolid page_from = lv_page_from page_to = lv_page_to format = 'PDF' filename = lv_filename EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. " 按需添加异常处理逻辑 ENDIF. ENDDO. - 也可以使用SAP标准类
CL_RSPO_SPOOL_JOB实现,先获取假脱机作业实例,再调用GET_PDF方法指定页段参数,得到PDF二进制数据后自行写入文件:DATA: lo_spool_job TYPE REF TO cl_rspo_spool_job, lv_pdf TYPE xstring, lv_total_pages TYPE i, lv_spoolid TYPE tsp01-rqident, lv_page_from TYPE i, lv_page_to TYPE i. " 获取假脱机作业实例 lo_spool_job = cl_rspo_spool_job=>get_instance( iv_spool_id = lv_spoolid ). " 获取总页数 lv_total_pages = lo_spool_job->get_page_count( ). " 循环拆分逻辑同前,获取指定页段的PDF二进制数据 lo_spool_job->get_pdf( EXPORTING iv_page_from = lv_page_from iv_page_to = lv_page_to IMPORTING ev_pdf = lv_pdf ). " 将二进制数据写入文件(可使用GUI_DOWNLOAD或CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD)
内容的提问来源于stack exchange,提问作者Mogera
相关产品推荐
相关产品推荐

