Quantcast
Channel: SCN: Message List - ABAP Development
Viewing all articles
Browse latest Browse all 10425

Re: How to merge multiple spools into single PDF file?

$
0
0

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.


Viewing all articles
Browse latest Browse all 10425

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>