<b><u>Solution:</u></b><br>
<br>
The target output device must support PDF print, this is only one limitation.<br>
<br>
REPORT z_print_pdf. TYPE-POOLS: abap, srmgs. PARAMETERS: p_prnds LIKE tsp01-rqdest OBLIGATORY DEFAULT 'LOCL', p_fname TYPE file_table-filename OBLIGATORY LOWER CASE, p_ncopi TYPE rspocopies OBLIGATORY DEFAULT '1', p_immed AS CHECKBOX. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname. DATA: lv_rc TYPE i, lv_filter TYPE string. DATA: lt_files TYPE filetable. FIELD-SYMBOLS: <fs_file> LIKE LINE OF lt_files. CONCATENATE 'PDF (*.pdf)|*.pdf|' cl_gui_frontend_services=>filetype_all INTO lv_filter. CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING file_filter = lv_filter CHANGING file_table = lt_files rc = lv_rc EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0 AND lv_rc EQ 0. MESSAGE 'Error' TYPE 'E' DISPLAY LIKE 'S'. ENDIF. READ TABLE lt_files ASSIGNING <fs_file> INDEX 1. IF sy-subrc EQ 0. p_fname = <fs_file>-filename. ENDIF. AT SELECTION-SCREEN. DATA: lv_name TYPE string, lv_result TYPE boolean. lv_name = p_fname. CALL METHOD cl_gui_frontend_services=>file_exist EXPORTING file = lv_name RECEIVING result = lv_result EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. MESSAGE 'Bad file!' TYPE 'E' DISPLAY LIKE 'S'. ENDIF. IF lv_result NE abap_true. MESSAGE 'Bad file!' TYPE 'E' DISPLAY LIKE 'S'. ENDIF. START-OF-SELECTION. END-OF-SELECTION. PERFORM process. FORM process. DATA: lv_name TYPE string, lv_size TYPE i, lv_data TYPE xstring, lv_retcode TYPE i. DATA: lt_file TYPE srmgs_bin_content. lv_name = p_fname. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = lv_name filetype = 'BIN' IMPORTING filelength = lv_size CHANGING data_tab = lt_file EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. MESSAGE 'Read file error!' TYPE 'E' DISPLAY LIKE 'S'. ENDIF. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' EXPORTING input_length = lv_size IMPORTING buffer = lv_data TABLES binary_tab = lt_file EXCEPTIONS failed = 1 OTHERS = 2. IF sy-subrc NE 0. MESSAGE 'Binary conversion error!' TYPE 'E' DISPLAY LIKE 'S'. ENDIF. PERFORM print USING p_prnds lv_data CHANGING lv_retcode. IF lv_retcode EQ 0. WRITE: / 'Print OK' COLOR COL_POSITIVE. ELSE. WRITE: / 'Print ERROR' COLOR COL_NEGATIVE. ENDIF. ENDFORM. " PROCESS FORM print USING iv_prndst TYPE rspopname iv_content TYPE xstring CHANGING ev_retcode TYPE i. DATA: lv_handle TYPE sy-tabix, lv_spoolid TYPE rspoid, lv_partname TYPE adspart, lv_globaldir TYPE text1024, lv_dstfile TYPE text1024, lv_filesize TYPE i, lv_pages TYPE i. CLEAR: ev_retcode. CALL FUNCTION 'ADS_SR_OPEN' EXPORTING dest = iv_prndst doctype = 'ADSP' copies = p_ncopi immediate_print = p_immed auto_delete = 'X' IMPORTING handle = lv_handle spoolid = lv_spoolid partname = lv_partname EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. ev_retcode = 4. RETURN. ENDIF. CALL FUNCTION 'ADS_GET_PATH' IMPORTING ads_path = lv_globaldir. CONCATENATE lv_globaldir '/' lv_partname '.pdf' INTO lv_dstfile. OPEN DATASET lv_dstfile FOR OUTPUT IN BINARY MODE. IF sy-subrc NE 0. ev_retcode = 4. RETURN. ENDIF. TRANSFER iv_content TO lv_dstfile. IF sy-subrc NE 0. ev_retcode = 4. RETURN. ENDIF. CLOSE DATASET lv_dstfile. IF sy-subrc NE 0. ev_retcode = 4. RETURN. ENDIF. CALL FUNCTION 'ZBAP_RM_PDF_GET_PAGES' EXPORTING iv_content = iv_content IMPORTING ev_pages = lv_pages. lv_filesize = XSTRLEN( iv_content ). CALL FUNCTION 'ADS_SR_CONFIRM' EXPORTING handle = lv_handle partname = lv_partname size = lv_filesize pages = lv_pages no_pdf = ' ' EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. ev_retcode = 4. RETURN. ENDIF. CALL FUNCTION 'ADS_SR_CLOSE' EXPORTING handle = lv_handle EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. ev_retcode = 4. RETURN. ENDIF. ENDFORM. " PRINT
thank you for your coding,
but to use your report , we need the called fm 'ZBAP_RM_PDF_GET_PAGES' too!
grx
Andreas
Hello Thomas,
your Coding helped me, I could generate a spool with the right pdf-File. But I also have problems with printing the spool, this point doesn't work. There was the advice, to install a pdf-printer, in order to print (in background as well as online).
But how? Can you give me an hint? By the way, the adobe document server is installed.
Thanks in advance
Andreas
Hi, thank you for your post. Cause of the ADS FM's. Is it necessary mandatory to have ADS (which means also JAVA Stack)?
Add a comment