The following report, takes already existing pdf spools, and creates a new one with consolidated pdfs in a single spool.
REPORT zovg_single_spool4.
TYPES:
BEGIN OF ty_tsp01,
rqident TYPE tsp01-rqident,
rqtitle TYPE tsp01-rqtitle,
rqdest TYPE tsp01-rqdest,
ban TYPE c,
END OF ty_tsp01.
CONSTANTS: l_c_printer(8) TYPE c VALUE 'LP0K',
l_c_doctype(4) TYPE c VALUE 'ADSP',
l_c_sptd TYPE c VALUE '/'.
DATA:
l_i_old_spools TYPE TABLE OF ty_tsp01,
l_wa_old_spool TYPE ty_tsp01,
g_v_pdf1 TYPE fpcontent,
l_v_data TYPE fpcontent,
l_v_prdest TYPE tsp01-rqdest,
l_v_handle TYPE sy-tabix,
l_v_spoolid TYPE tsp01-rqident,
l_v_globaldir TYPE text1024,
l_v_pages TYPE i,
l_v_dstfile TYPE text1024,
l_v_filesize TYPE i,
l_v_partname TYPE adspart
.
data: file_list like adsfile occurs 100.
data: file like adsfile.
data: content type xstring.
data: partfilename type rlgrap-filename.
data: l_v_ext(3) type c.
l_v_prdest = l_c_printer.
l_wa_old_spool-rqident = 11485.
APPEND l_wa_old_spool
TO l_i_old_spools.
l_wa_old_spool-rqident = 11486.
APPEND l_wa_old_spool
TO l_i_old_spools.
LOOP AT l_i_old_spools
INTO l_wa_old_spool.
IF l_v_spoolid IS INITIAL.
* Create a new spool order for the PDF'S
CALL FUNCTION 'ADS_SR_OPEN'
EXPORTING
dest = l_v_prdest
append = ' '"append
doctype = l_c_doctype
titleline = 'Title line Test'
IMPORTING
handle = l_v_handle
spoolid = l_v_spoolid
partname = l_v_partname
EXCEPTIONS
device_missing = 1
no_such_device = 2
operation_failed = 3
wrong_doctype = 4
wrong_devicetype = 5
OTHERS = 6.
ELSE.
CALL FUNCTION 'ADS_SR_OPEN'
EXPORTING
dest = l_v_prdest
append = 'X'
doctype = l_c_doctype
usespoolid = l_v_spoolid
IMPORTING
handle = l_v_handle
spoolid = l_v_spoolid
partname = l_v_partname
EXCEPTIONS
device_missing = 1
no_such_device = 2
operation_failed = 3
wrong_doctype = 4
wrong_devicetype = 5
OTHERS = 6.
ENDIF.
CALL FUNCTION 'ADS_GET_PATH'
IMPORTING
ads_path = l_v_globaldir.
CALL FUNCTION 'FPCOMP_CREATE_PDF_FROM_SPOOL'
EXPORTING
i_spoolid = l_wa_old_spool-rqident
i_partnum = 1
IMPORTING
E_PDF = g_v_pdf1
E_RENDERPAGECOUNT = l_v_pages
* E_PDF_FILE =
EXCEPTIONS
ADS_ERROR = 1
USAGE_ERROR = 2
SYSTEM_ERROR = 3
INTERNAL_ERROR = 4
OTHERS = 5
.
l_v_data = g_v_pdf1.
*get list of part files
refresh file_list.
clear: file_list.
call function 'ADS_SR_READ_CONTENT_DIR'
exporting
RQIDENT = l_wa_old_spool-rqident
tables
FILE_LIST = file_list
exceptions
WRONG_DOCTYPE = 1
INTERNAL_ERROR = 2
NO_DIRECTORY = 3
others = 4.
*save every part file
LOOP AT file_list
into file.
partfilename = file-name.
CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'
EXPORTING
filename = partfilename
* UPPERCASE = 'X'
IMPORTING
EXTENSION = l_v_ext
.
call function 'ADS_SR_READ_CONTENT'
exporting
RQIDENT = l_wa_old_spool-rqident
PARTFILENAME = partfilename
importing
CONTENT_BIN = content
exceptions
CANNOT_OPEN_FILE = 1
OPEN_DATASET_NO_AUTHORITY = 2
OPEN_DATASET_TOO_MANY_FILES = 3
OPEN_DATASET_INTERNAL_ERROR = 4
WRONG_DOCTYPE = 5
others = 6.
clear l_v_dstfile.
* * Route to save part file
CONCATENATE l_v_globaldir
l_c_sptd
l_v_partname
'.'
l_v_ext
INTO l_v_dstfile.
OPEN DATASET l_v_dstfile
FOR OUTPUT IN BINARY MODE.
TRANSFER content
TO l_v_dstfile.
CLOSE DATASET l_v_dstfile.
ENDLOOP.
l_v_filesize = xstrlen( l_v_data ).
*confirm partfiles.
*"Add old spool content to new spool
CALL FUNCTION 'ADS_SR_CONFIRM'
EXPORTING
handle = l_v_handle
partname = l_v_partname
size = l_v_filesize
pages = l_v_pages
no_pdf = ' '
EXCEPTIONS
handle_not_valid = 1
operation_failed = 2
OTHERS = 3.
* Close the new spool order
CALL FUNCTION 'ADS_SR_CLOSE'
EXPORTING
handle = l_v_handle
EXCEPTIONS
handle_not_valid = 1
operation_failed = 2
OTHERS = 3.
ENDLOOP.