Всем привет!

Сегодня день ABAP. Понадобилось мне выгрузить многостраничый запрос в спул в формате PDF. Не нашел ни одного стандартного решения для этого, поэтому пришлось тряхнуть стариной и написать минипрограммку. Суть простая. Вот такой спул выгружается в виде отдельных PDF файлов в указанный каталог. Никаких проверок внутри нет, так что используем на свой страх и риск. Мне оно надо только раз в год, поэтому приспичило и пришлось нарисовать. За красоту кода ругать бессмысленно 🙂

multi_pages_spool

Многостраничный PDF на ABAP

REPORT  ZHR_DOWNLOAD_PDF_SPOOL.

PARAMETERS:
SPOOLNO LIKE TSP01-RQIDENT,
P_FILE LIKE RLGRAP-FILENAME DEFAULT ‘C:\temp\’.

data: i type i. i = 1.
data: pdf_data type FPCONTENT.

do.
*  DATA PDF LIKE TLINE OCCURS 100 WITH HEADER LINE.
DATA PDF TYPE TABLE OF HRB2A_RAW255.
clear pdf_data. clear pdf.
data: bin_size type i.

CALL FUNCTION ‘FPCOMP_CREATE_PDF_FROM_SPOOL’
EXPORTING
i_spoolid               = spoolno
i_partnum               = i
IMPORTING
e_pdf                   = pdf_data
*     E_RENDERPAGECOUNT =
*      e_pdf_file              = confile
EXCEPTIONS
ads_error               = 1
usage_error             = 2
system_error            = 3
internal_error          = 4
OTHERS                  = 5.

if sy-subrc <> 0.
exit.
endif.

CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’
EXPORTING
buffer                = pdf_data
IMPORTING
output_length         = bin_size
TABLES
binary_tab            = pdf.

data fullpath type string.
data c_num type string. c_num = i.
data c_spool type string. c_spool = spoolno.

CONCATENATE p_file c_spool c_num ‘.pdf’ into fullpath.

CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
*        BIN_FILESIZE                  = bin_filesize
FILENAME                      = fullpath
FILETYPE                      = ‘BIN’
*       APPEND                        = ‘ ‘
*       CODEPAGE                      = ‘ ‘
*       NO_BYTEORDER_MARK             = ‘ ‘
*      IMPORTING
*        FILELENGTH                    = c
TABLES
DATA_TAB                      = pdf
*       FORMAT_TAB                    =
EXCEPTIONS
FILE_WRITE_ERROR              = 1
NO_BATCH                      = 2
GUI_REFUSE_FILETRANSFER       = 3
INVALID_TYPE                  = 4
NO_AUTHORITY                  = 5
UNKNOWN_ERROR                 = 6.

i = i + 1.
enddo.