Code:
REPORT zr_spool_pdf LINE-SIZE 80.
*
* Read spool job contents (OTF or ABAP list) and convert
* to PDF, download PDF
TABLES: tsp01.
PARAMETERS:
spoolno LIKE tsp01-rqident,
p_dele AS CHECKBOX.
DATA otf LIKE itcoo OCCURS 100 WITH HEADER LINE.
DATA cancel.
DATA pdf LIKE tline OCCURS 100 WITH HEADER LINE.
DATA: numbytes TYPE i,
arc_idx LIKE toa_dara,
pdfspoolid LIKE tsp01-rqident,
jobname LIKE tbtcjob-jobname,
jobcount LIKE tbtcjob-jobcount,
is_otf,
txt(80) TYPE c.
DATA: client LIKE tst01-dclient,
name LIKE tst01-dname,
objtype LIKE rststype-type,
type LIKE rststype-type,
spoolid TYPE rspoid,
pages TYPE i,
pdfstr TYPE string,
pdfxstr TYPE xstring.
START-OF-SELECTION.
SELECT SINGLE * FROM tsp01 WHERE rqident = spoolno.
IF sy-subrc <> 0.
MESSAGE 'Spool not available' TYPE 'E' .
EXIT.
ENDIF.
client = tsp01-rqclient.
name = tsp01-rqo1name.
CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
EXPORTING
authority = 'SP01'
client = client
name = name
part = 1
IMPORTING
type = type
objtype = objtype
EXCEPTIONS
fb_error = 1
fb_rsts_other = 2
no_object = 3
no_permission = 4.
IF objtype(3) = 'OTF' OR objtype+1(3) = 'OTF'. "Script OTF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolno
no_dialog = ' '
* DST_DEVICE =
* PDF_DESTINATION =
IMPORTING
pdf_bytecount = numbytes
pdf_spoolid = pdfspoolid
* OTF_PAGECOUNT =
btc_jobname = jobname
btc_jobcount = jobcount
TABLES
pdf = pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11.
IF sy-subrc NE 0 .
MESSAGE 'Spool OTF to PDF Conversion errro' TYPE 'E' .
ENDIF.
ENDIF.
* ->Convert PDF output to XSTRING
FIELD-SYMBOLS:<p> TYPE x. " <p> type any.
LOOP AT pdf .
ASSIGN pdf TO <p> CASTING TYPE x.
CONCATENATE pdfxstr <p> INTO pdfxstr IN BYTE MODE.
ENDLOOP.
pages = tsp01-rqapprule .
CALL FUNCTION 'ADS_CREATE_PDF_SPOOLJOB'
EXPORTING
* printer = 'ZMAIL' "tsp03d-patype should be PDF use any one
dest = 'ZMAI' "tsp03d-patype should be PDF use any one
pages = pages
pdf_data = pdfxstr
IMPORTING
spoolid = spoolid
EXCEPTIONS
no_data = 1
not_pdf = 2
wrong_devtype = 3
operation_failed = 4
cannot_write_file = 5
device_missing = 6
no_such_device = 7
OTHERS = 8.
WRITE: 'Old spool : ', spoolno .
WRITE: 'NEW spool : ', spoolid .
IF p_dele = 'X'.
CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
EXPORTING
spoolid = spoolno
allow_commit = 'X' .
ENDIF.
*
* Read spool job contents (OTF or ABAP list) and convert
* to PDF, download PDF
TABLES: tsp01.
PARAMETERS:
spoolno LIKE tsp01-rqident,
p_dele AS CHECKBOX.
DATA otf LIKE itcoo OCCURS 100 WITH HEADER LINE.
DATA cancel.
DATA pdf LIKE tline OCCURS 100 WITH HEADER LINE.
DATA: numbytes TYPE i,
arc_idx LIKE toa_dara,
pdfspoolid LIKE tsp01-rqident,
jobname LIKE tbtcjob-jobname,
jobcount LIKE tbtcjob-jobcount,
is_otf,
txt(80) TYPE c.
DATA: client LIKE tst01-dclient,
name LIKE tst01-dname,
objtype LIKE rststype-type,
type LIKE rststype-type,
spoolid TYPE rspoid,
pages TYPE i,
pdfstr TYPE string,
pdfxstr TYPE xstring.
START-OF-SELECTION.
SELECT SINGLE * FROM tsp01 WHERE rqident = spoolno.
IF sy-subrc <> 0.
MESSAGE 'Spool not available' TYPE 'E' .
EXIT.
ENDIF.
client = tsp01-rqclient.
name = tsp01-rqo1name.
CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
EXPORTING
authority = 'SP01'
client = client
name = name
part = 1
IMPORTING
type = type
objtype = objtype
EXCEPTIONS
fb_error = 1
fb_rsts_other = 2
no_object = 3
no_permission = 4.
IF objtype(3) = 'OTF' OR objtype+1(3) = 'OTF'. "Script OTF
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = spoolno
no_dialog = ' '
* DST_DEVICE =
* PDF_DESTINATION =
IMPORTING
pdf_bytecount = numbytes
pdf_spoolid = pdfspoolid
* OTF_PAGECOUNT =
btc_jobname = jobname
btc_jobcount = jobcount
TABLES
pdf = pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11.
IF sy-subrc NE 0 .
MESSAGE 'Spool OTF to PDF Conversion errro' TYPE 'E' .
ENDIF.
ENDIF.
* ->Convert PDF output to XSTRING
FIELD-SYMBOLS:<p> TYPE x. " <p> type any.
LOOP AT pdf .
ASSIGN pdf TO <p> CASTING TYPE x.
CONCATENATE pdfxstr <p> INTO pdfxstr IN BYTE MODE.
ENDLOOP.
pages = tsp01-rqapprule .
CALL FUNCTION 'ADS_CREATE_PDF_SPOOLJOB'
EXPORTING
* printer = 'ZMAIL' "tsp03d-patype should be PDF use any one
dest = 'ZMAI' "tsp03d-patype should be PDF use any one
pages = pages
pdf_data = pdfxstr
IMPORTING
spoolid = spoolid
EXCEPTIONS
no_data = 1
not_pdf = 2
wrong_devtype = 3
operation_failed = 4
cannot_write_file = 5
device_missing = 6
no_such_device = 7
OTHERS = 8.
WRITE: 'Old spool : ', spoolno .
WRITE: 'NEW spool : ', spoolid .
IF p_dele = 'X'.
CALL FUNCTION 'RSPO_R_RDELETE_SPOOLREQ'
EXPORTING
spoolid = spoolno
allow_commit = 'X' .
ENDIF.