Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Spool to PDF - Problems with downloading PDF file when converting with job

Former Member
0 Kudos
1,104

Hi all!

I've got a problem. I've got a program that writes a smartform into the spool. After that, I am using the function modules RSTS_GET_ATTRIBUTES and CONVERT_OTFSPOOLJOB_2_PDF to convert it into PDF. I retrieve a internal table with the binary content for the PDF file. Now i can download the file to the desktop by using the method cl_gui_frontend_services=>gui_download.

But there is a problem: when the spool excesses 99 pages, the function module CONVERT_OTFSPOOLJOB_2_PDF asks the user via popup if the PDF should be created in background. If the user commits, the internal tables that should contain the binary PDF data is emtpy. A background job writes the binary data into the spool. The user has got an empty file that will be generated by cl_gui_frontend_services=>gui_download.

So, is it possible to suppress the popup to create the PDF allways online? Or how can I write the PDF file if there will be create any spool id in background? You'll find my current code below.


* Prüfen ob es die übergebene Spoolnummer überhaupt gibt
  SELECT SINGLE * FROM tsp01 INTO ls_tsp01 WHERE rqident = id_spoolid.
  IF ( sy-subrc <> 0 ).
    cf_error = 'X'.
    EXIT.
  ENDIF.


* TemSe-Objekte speichern sequentielle Daten. Ein TemSe-Objekt kann aus
* mehreren Teilen bestehen. Dieser FB ermittelt die wichtigsten Attribute
* eines TemSe-Objekts. Falls das Objekt aus mehreren Teilen besteht, werden
* die Attribute entsprechend zusammengefaßt.
  CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
    EXPORTING
      client        = ls_tsp01-rqclient
      name          = ls_tsp01-rqo1name
      part          = 1
    IMPORTING
      objtype       = ld_objtype
    EXCEPTIONS
      fb_error      = 1
      fb_rsts_other = 2
      no_object     = 3
      no_permission = 4
      OTHERS        = 5.

  IF ( sy-subrc <> 0 ).
    cf_error = 'X'.
    EXIT.
  ENDIF.

  IF ld_objtype(3) = 'OTF'.
    lf_is_otf = 'X'.
  ELSE.
    lf_is_otf = ' '.
  ENDIF.

  IF ( lf_is_otf = 'X' ).
*   Konvertiere OTF-Spoolauftrag nach PDF
    CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid              = id_spoolid
        no_dialog                = ' '
*        pdf_destination          = 'T'
      IMPORTING
        pdf_bytecount            = ld_numbytes
        pdf_spoolid              = ld_pdfspoolid
        btc_jobname              = ld_jobname
        btc_jobcount             = ld_jobcount
      TABLES
        pdf                      = lt_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 <> 0 ).
      cf_error = 'X'.
      EXIT.
    ENDIF.
  ELSE.
*   Konvertiere ABAP-Liste-Spoolauftrag nach PDF
    CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid              = id_spoolid
        no_dialog                = ' '
      IMPORTING
        pdf_bytecount            = ld_numbytes
        pdf_spoolid              = ld_pdfspoolid
        btc_jobname              = ld_jobname
        btc_jobcount             = ld_jobcount
      TABLES
        pdf                      = lt_pdf
      EXCEPTIONS
        err_no_abap_spooljob     = 1
        err_no_spooljob          = 2
        err_no_permission        = 3
        err_conv_not_possible    = 4
        err_bad_destdevice       = 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 <> 0 ).
      cf_error = 'X'.
      EXIT.
    ENDIF.
  ENDIF.

  WHILE ( lf_file_ok = '' ).

*   Die in der Tabelle lt_pdf enthaltenen Binärdaten werden nun in eine
*   Datei geschrieben. Da alle übergebenen Tickets in die gleiche Datei
*   geschrieben werden, kann der im Speicher gehaltente Protokolleintrag
*   gelesen werden
    CALL METHOD cl_gui_frontend_services=>gui_download
      EXPORTING
        bin_filesize              = ld_numbytes
        filename                  = cd_filename
        filetype                  = 'BIN'
*    append                    = SPACE
*    write_field_separator     = SPACE
*    header                    = '00'
*    trunc_trailing_blanks     = SPACE
*    write_lf                  = 'X'
*    col_select                = SPACE
*    col_select_mask           = SPACE
*    dat_mode                  = SPACE
      confirm_overwrite         = 'X'
*    no_auth_check             = SPACE
*    codepage                  = SPACE
*    ignore_cerr               = ABAP_TRUE
*    replacement               = '#'
*    write_bom                 = SPACE
*    trunc_trailing_blanks_eol = 'X'
*    wk1_n_format              = SPACE
*    wk1_n_size                = SPACE
*    wk1_t_format              = SPACE
*    wk1_t_size                = SPACE
*  IMPORTING
*    filelength                =
      CHANGING
        data_tab                  = lt_pdf
      EXCEPTIONS
        file_write_error          = 1
        no_batch                  = 2
        gui_refuse_filetransfer   = 3
        invalid_type              = 4
        no_authority              = 5
        unknown_error             = 6
        header_not_allowed        = 7
        separator_not_allowed     = 8
        filesize_not_allowed      = 9
        header_too_long           = 10
        dp_error_create           = 11
        dp_error_send             = 12
        dp_error_write            = 13
        unknown_dp_error          = 14
        access_denied             = 15
        dp_out_of_memory          = 16
        disk_full                 = 17
        dp_timeout                = 18
        file_not_found            = 19
        dataprovider_exception    = 20
        control_flush_error       = 21
        not_supported_by_gui      = 22
        error_no_gui              = 23
        OTHERS                    = 24.

2 REPLIES 2

Jelena_Perfiljeva
Active Contributor
0 Kudos
169

Creating a PDF file with over 99 pages through SAP seems rather unreasonable to me. What are you printing - Encyclopedia Britannica? For cripes sake... Have you thought about creating more than one spool request or using something completely different? Why do you have to do this through spool? You can get Smartform output directly into PDF, there are a lot of example out there.

The only solution that comes to mind is rather brutal - create a copy of the function module and get rid of the popup. Although it just might time out after that...

Former Member
0 Kudos
169

hi

try this RSTXPDFT4 program

cheers

uday