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