Добрый день, Ильнар!
1. Сначала выберите имя файла из спула:
Code:
CALL FUNCTION 'ADS_SR_READ_CONTENT_DIR'
EXPORTING
rqident = lv_spool
TABLES
file_list = file_list
EXCEPTIONS
wrong_doctype = 1
internal_error = 2
no_directory = 3
OTHERS = 4.
2. В принципе, большинство ПДФ-ов идут как сингл-парт документы, поэтому достаточно считать из этой таблицы первую запись. В зависимости от того, заканчивается имя file_list-name на .pdf/.pda или нет - вызываете функцию:
Code:
IF pdf_detected = 'X'.
* Get content of PDF file directly
CALL FUNCTION 'ADS_SR_READ_CONTENT_TAB'
EXPORTING
rqident = lv_spool
partfilename = file_list-name
IMPORTING
filelength = infilelength
TABLES
content_tab = content_tab
EXCEPTIONS
OTHERS = 5.
CONCATENATE LINES OF content_tab INTO pdf IN BYTE MODE.
ELSE.
CALL FUNCTION 'FPCOMP_CREATE_PDF_FROM_SPOOL'
EXPORTING
i_spoolid = lv_spool
i_partnum = 1
IMPORTING
e_pdf = pdf
e_pdf_file = confile
EXCEPTIONS
OTHERS = 5.
ENDIF.
3. Конвертируем из Х-стринга в бинари и сохраняем. В lv_file_name должен быть полное имя файла включая путь!
Code:
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = pdf
IMPORTING
output_length = lv_length
TABLES
binary_tab = lt_data_tab.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
bin_filesize = lv_length
filename = lv_file_name
filetype = 'BIN'
CHANGING
data_tab = lt_data_tab[]
EXCEPTIONS