Standardtext ins PDF-Format konvertieren

Mithilfe eines Standardreports ist es möglich, einen SAP-Standardtext ins PDF-Format zu konvertieren und abzuspeichern.

Der Report RSTXPDFT konvertiert einen Standardtext ins PDF-Format. Die Datei wird auf dem Client gespeichert und kann dann mit dem AcrobatReader gelesen werden.

Mit Programm RSTXPDFT4 können Spoolaufträge ins PDF-Format kopiert werden.

Hilfreich ist auch der Funktionsbaustein “CONVERT_OTF”, dem man das Zielformat “PDF” mitgeben kann.

Folgendes kleines Programm liest alle Spoolaufträge eines Benutzers/ Datums ein und zeigt diese als Liste an. Markierte Einträge werden in als PDF-File in dem zuvor angegeben Verzeichnis gespeichert.


Programminfo

Der PF-Status muss noch angelegt werden! Machen Sie hierzu in der Zeile

  SET PF-STATUS ‘LIST’.

einen Doppelklick auf den Bezeichner ‘LIST’. Folgende Funktionen müssen eingetragen werden:

  • DISP  um den markierten Spoolauftrag anzuzeigen
    Passendes Icon: ICON_LAYOUT_CONTROL
  • EXPO um den markierten Spoolauftrag als PDF-Datei im angegebenen Verzeichnis zu speichern.
    Passendes Icon: ICON_EXPORT
  • Jeweils %EX für

Ordnen Sie den Funktionen Funktionstasten Ihrer Wahl zu. [F7] steht in den meisten Standardprogrammen für “Anzeige“.


Coding

REPORT zz_convert2pdf.
TYPE-POOLS sp01r.

DATA: t_otf    LIKE itcoo    OCCURS 0 WITH HEADER LINE,
      t_pdf    LIKE tline    OCCURS 0 WITH HEADER LINE,
      t_buf    LIKE soli     OCCURS 0 WITH HEADER LINE,
      pdf_size TYPE i,
      rqid(10),
      cb, “checkbox
      t_idlist TYPE sp01r_id_list,
      l_idlist TYPE sp01r_id,
      t_tsp01  LIKE tsp01sys OCCURS 0 WITH HEADER LINE.

SELECT-OPTIONS:
      s_owner FOR sy-uname DEFAULT sy-uname,
      s_datum FOR sy-datum DEFAULT sy-datum.
PARAMETERS:
      p_pfad(130) DEFAULT ‘c:temp’ LOWER CASE.

START-OF-SELECTION.

* Spoolaufträge zur Selektion lesen
  CALL FUNCTION ‘RSPO_ISELECT_SPOOLREQS’
       EXPORTING
            rfcsystem    = ‘NONE’
       TABLES
            s_rqowne     = s_owner
            s_rqcred     = s_datum
            result_tsp01 = t_tsp01
       EXCEPTIONS
            error        = 1
            OTHERS       = 2.

  IF sy-subrc = 0.
* List-Status muss die Funktionen “DISP” und “EXPO” enthalten
    SET PF-STATUS ‘LIST’.

    LOOP AT t_tsp01 WHERE rqdoctype = ‘OTF’
                       OR rqdoctype = ‘LIST’.

      WRITE: / cb AS CHECKBOX INPUT ON,
               t_tsp01-rqident,
               t_tsp01-rq0name,
               t_tsp01-rq1name,
               t_tsp01-rq2name,
               t_tsp01-rqtitle.
      HIDE: t_tsp01.

    ENDLOOP.
    CLEAR t_tsp01.

  ENDIF.

END-OF-SELECTION.

* Abfrage der Funktionscodes
AT USER-COMMAND.

  CASE sy-ucomm.
    WHEN ‘DISP’.
* Spoolauftrag, auf dem der Cursor steht, anzeigen
      CHECK t_tsp01-rqident <> space.
      REFRESH t_idlist.
      l_idlist-id = t_tsp01-rqident.
      APPEND l_idlist TO t_idlist.
      CALL FUNCTION ‘RSPO_RID_SPOOLREQ_DISP’
           EXPORTING
                id_list = t_idlist.
    WHEN ‘EXPO’.
* Markierte Einträge als PDF exportieren
      CLEAR cb.
      DO.
        READ LINE sy-index FIELD VALUE cb t_tsp01-rqident.
        IF sy-subrc > 0.
          EXIT.
        ELSEif cb = ‘X’.
          CASE t_tsp01-rqdoctype.
            WHEN ‘OTF’.
              PERFORM export_otf2pdf USING t_tsp01-rqident.
            WHEN ‘LIST’.
              PERFORM export_list2pdf USING t_tsp01-rqident.
          ENDCASE.
        ENDIF.
      ENDDO.
  ENDCASE.

  CLEAR t_tsp01.

*———————————————————————*
*       FORM export_otf2pdf                                           *
*———————————————————————*
FORM export_otf2pdf USING value(f_rqid).

  DATA file LIKE rlgrap-filename.

  REFRESH: t_buf, t_otf, t_pdf.

* Spoolauftrag lesen
  CALL FUNCTION ‘RSPO_RETURN_SPOOLJOB’
       EXPORTING
            rqident              = f_rqid
            desired_type         = ‘OTF’
       TABLES
            buffer               = t_buf
       EXCEPTIONS
            no_such_job          = 1
            job_contains_no_data = 2
            selection_empty      = 3
            no_permission        = 4
            can_not_access       = 5
            read_error           = 6
            type_no_match        = 7
            OTHERS               = 8.
  IF sy-subrc = 0.
    APPEND LINES OF t_buf TO t_otf.

* Spoolauftrag umwandeln nach PDF
    CALL FUNCTION ‘CONVERT_OTF’
         EXPORTING
              format                = ‘PDF’
              max_linewidth         = 132
              archive_index         = ‘ ‘
         IMPORTING
              bin_filesize          = pdf_size
         TABLES
              otf                   = t_otf
              lines                 = t_pdf
         EXCEPTIONS
              err_max_linewidth     = 1
              err_format            = 2
              err_conv_not_possible = 3
              OTHERS                = 4.
    IF sy-subrc = 0.
* Dateinamen basteln
      rqid = f_rqid.
      CONCATENATE t_tsp01-rqtitle ‘(‘ rqid ‘).PDF’
             INTO file separated by space.
      CONDENSE file.
      translate file using: ‘ _’, ‘/_’, ‘_’, ‘; ‘, ‘, ‘, ‘: ‘, ‘* ‘.
      shift file right deleting trailing ‘_’.
      shift file left deleting leading ‘ ‘.
      CONCATENATE p_pfad ” file INTO file.
* Datei speichern
      CALL FUNCTION ‘WS_DOWNLOAD’
           EXPORTING
                bin_filesize = pdf_size
                codepage     = ‘ ‘
                filename     = file
                filetype     = ‘BIN’
           TABLES
                data_tab     = t_pdf.
      IF sy-subrc = 0.
* Datei erfolgreich exportiert.
        MESSAGE s131(shdi) WITH space file.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.

*———————————————————————*
*       FORM export_list_2pdf                                         *
*———————————————————————*
FORM export_list2pdf USING value(f_rqid).

  DATA: file LIKE rlgrap-filename.
  DATA: pdf_size     type i.
  DATA: t_pdf    like tline occurs 0 with header line.
  CLEAR pdf_size.
  REFRESH: t_buf, t_otf, t_pdf.

* Spoolauftrag umwandeln nach PDF
  call function ‘CONVERT_ABAPSPOOLJOB_2_PDF’
    exporting
      src_spoolid                    = f_rqid
      no_dialog                      = space
    importing
      pdf_bytecount                  = pdf_size
    tables
      pdf                            = t_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
      others                         = 12.

    IF sy-subrc = 0.
* Dateinamen basteln
      rqid = f_rqid.
      CONCATENATE t_tsp01-rqtitle ‘(‘ rqid ‘).PDF’
             INTO file separated by space.
      CONDENSE file.
      translate file using: ‘ _’, ‘/_’, ‘_’, ‘; ‘, ‘, ‘, ‘: ‘, ‘* ‘.
      shift file right deleting trailing ‘_’.
      shift file left deleting leading ‘ ‘.
      CONCATENATE p_pfad ” file INTO file.
* Datei speichern
      CALL FUNCTION ‘WS_DOWNLOAD’
           EXPORTING
                bin_filesize = pdf_size
                codepage     = ‘ ‘
                filename     = file
                filetype     = ‘BIN’
           TABLES
                data_tab     = t_pdf.
      IF sy-subrc = 0.
* Datei erfolgreich exportiert.
        MESSAGE s131(shdi) WITH space file.
      ENDIF.
    ENDIF.

ENDFORM.

Enno Wulff