Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
Home arrow Sample Code arrow ABAP Reports arrow Spool from SAP to Acrobat format
Spool from SAP to Acrobat format PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Carel Oberholzer   
Monday, 05 March 2007

Print any spool file from SAP in PDF format. Can be viewed/edited by using Acrobat. You need the full version of Acrobat to edit, but can view and print using the free version. This is a very simple but useful program and needs to be built on to make it into a real handy tool (put in your own code and change the SAPScript before downloading into PDF format). Valid up until 4.6X.
 

report ZPDFPRNT no standard page heading.

TABLES: TST05.

DATA: BEGIN OF ITAB OCCURS 0,
        TLINE(255),
      END OF ITAB.


DATA: BEGIN OF ITAB2 OCCURS 0,
        TLINE(255),
      END OF ITAB2.

DATA: BEGIN OF ITAB3 OCCURS 0,
        TLINE(255),
      END OF ITAB3.

DATA: BEGIN OF OTF_TAB OCCURS 0,
        TLINE(255),
      END OF OTF_TAB.

DATA: LEN_OUT LIKE  SOOD-OBJLEN.

DATA: LEN_IN LIKE  SOOD-OBJLEN.

DATA: BEGIN OF DATA_SET OCCURS 200,
        DATA_LENGTH(5),
        PRECOL(1),
        DATA_LINE(1000),
      END OF DATA_SET.

DATA: BEGIN OF OTF_PAGE OCCURS 200.
        INCLUDE STRUCTURE ITCOO.
DATA: END OF OTF_PAGE,
      OTF_PAGES TYPE P,
      OTF_MAX_PAGES TYPE P VALUE 10.
DATA: BEGIN OF OTF_CONTROL.
        INCLUDE STRUCTURE ITCPP.
DATA: END OF OTF_CONTROL,
      FORCE_RAW_OTF VALUE ' ',
      L100_EXCLUDE(4) VALUE 'OTFJ',
      BEGIN OF OTF_PAGE_INDEX OCCURS 20,
        LINE_NUM TYPE P,
      END OF OTF_PAGE_INDEX,
      CUR_OTF_PAGE VALUE 1.

DATA: DATA_SET_LINECOUNT TYPE P,
      DATA_SET_MAX_LINES TYPE P VALUE   100000,
      DATA_SET_VALID TYPE C VALUE ' ',
      DATA_SET_IS_OTF TYPE C VALUE ' ',
      DATA_SET_LENGTH(5) TYPE C,
      LINE_SPECIAL LIKE DATA_SET-DATA_LINE,
      NEED_LINE_SPECIAL TYPE C,
      DSN_TYPE(8) TYPE C.

DATA: FCODE(4) TYPE C,
      DATE TYPE D,
      TIME TYPE T,
      RC(10) TYPE C,
      ERRMSG(100) TYPE C,
      PRINTJOB_CREATED(1) TYPE C,
      PRINTJOB_CLEARED(1) TYPE C,
      PRINTJOB_LIST(1) TYPE C,
      DISPLAY_MODE(1) TYPE C,
      LINE_MAX TYPE P VALUE '100000',
      NEW_SCREEN_300(1) TYPE C,
      MULTI_PRINT_300(1) TYPE C,
      PRINT_ALL_300(1) TYPE C,
      PRINT_COUNT_300 TYPE I,
      SHOW_USER_100 TYPE C VALUE ' ',
      ERROR_DISPLAY_LEVEL TYPE C VALUE '9',
      NEXT_ERROR_DISPLAY_LEVEL TYPE C,
      PREV_ERROR_DISPLAY_LEVEL TYPE C,
      START_300(5) TYPE C, END_300(5) TYPE C,
      SEP LIKE SY-VLINE,
      DEFAULT_PRI,
      TSP01_BUF LIKE TSP01,
      TSP01_CURLINE LIKE SY-STARO,
      TSP01_CURCOL LIKE SY-CUCOL,
      TSP01_CURROW LIKE SY-CUROW.

DATA: BEGIN OF DATA_SET_LINE,
        DATA_LENGTH(5),
        PRECOL(1),
        DATA_LINE(1000),
      END OF DATA_SET_LINE.

DATA: STATUS LIKE SY-SUBRC.
DATA: WGF_MESSAGE(80).
DATA: H_PATH(20) TYPE  C.
DATA: H_MASK(20) TYPE  C VALUE   ',*.pdf ,*.pdf.     '.
DATA: FILE_NAME(20).
DATA: FILENAME LIKE RLGRAP-FILENAME.
DATA: IMPORT(132).

PARAMETERS: IDENT(5) TYPE C.


PERFORM GET_OTF_TAB.

LOOP AT OTF_PAGE.
  OTF_TAB-TLINE = OTF_PAGE.
  APPEND OTF_TAB.
ENDLOOP.


CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
     EXPORTING
          FORMAT_SRC      = 'OTF'
          FORMAT_DST      = 'PDF'
          DEVTYPE         = 'ASCIIPRI'
          LEN_IN          = LEN_IN
    IMPORTING
          LEN_OUT         = LEN_OUT
     TABLES
          CONTENT_IN      = OTF_TAB
          CONTENT_OUT     = ITAB2
     EXCEPTIONS
          ERR_CONV_FAILED = 1
          OTHERS          = 2.

PERFORM GET_PATH USING 'PDF_FILE'.

CALL FUNCTION 'WS_DOWNLOAD'
     EXPORTING
          FILENAME            = FILENAME
          FILETYPE            = 'BIN'
          BIN_FILESIZE        = LEN_OUT
     TABLES
          DATA_TAB            = ITAB2
     EXCEPTIONS
          FILE_OPEN_ERROR     = 1
          FILE_WRITE_ERROR    = 2
          INVALID_FILESIZE    = 3
          INVALID_TABLE_WIDTH = 4
          INVALID_TYPE        = 5
          NO_BATCH            = 6
          UNKNOWN_ERROR       = 7
          OTHERS              = 8.

*&---------------------------------------------------------------------*
*&      Form  GET_OTF_TAB
*&---------------------------------------------------------------------*
FORM GET_OTF_TAB.

  DATA: PART(4) VALUE '0001',
        BEGIN OF MSG,
          A(40),
          B(40),
          C(40),
        END OF MSG.

  REFRESH DATA_SET.
  DATA_SET_LINECOUNT = 0.
  DATA_SET_IS_OTF = ' '.
  OTF_PAGES = 0.
  REFRESH OTF_PAGE_INDEX.
  CALL 'RSPOACSD'.

  SELECT * FROM TST05 WHERE DTHREAD = 'X'.

    CALL 'RSPOAOSD'
      ID 'ID'     FIELD IDENT
      ID 'TYPE'   FIELD TST05-DTYPE
      ID 'RECTYP' FIELD 'VYL----'
      ID 'RC'     FIELD RC
      ID 'ERRMSG' FIELD ERRMSG.

    STATUS = SY-SUBRC.
    IF STATUS = 0.
      DSN_TYPE = TST05-DTYPE.
      IF DSN_TYPE(3) = 'OTF'.
        DATA_SET_IS_OTF = 'X'.
      ENDIF.

    ENDIF.

    IF STATUS <> 24.  EXIT. ENDIF.
  ENDSELECT.

  DATA_SET_VALID = 'X'.
  DATA_SET_MAX_LINES = ( LINE_MAX * '1.1' ) + 100.
  DO.
    CLEAR: DATA_SET_LINE, DATA_SET_LENGTH.
    CALL 'RSPOARSD'
      ID 'BUFF'   FIELD DATA_SET_LINE+5
      ID 'DATALEN' FIELD DATA_SET_LENGTH
      ID 'RC'     FIELD RC
      ID 'ERRMSG' FIELD ERRMSG.
    STATUS = SY-SUBRC.
    IF STATUS = 36.

      WHILE STATUS = 36.
        CALL 'RSPOACSD'
          ID 'RC'     FIELD RC
          ID 'ERRMSG' FIELD ERRMSG.
        ADD 1 TO PART.
        IF DATA_SET_IS_OTF = ' '.
          CALL 'RSPOAOSD'
            ID 'ID'     FIELD IDENT
            ID 'TYPE'   FIELD DSN_TYPE
            ID 'PART'   FIELD PART
            ID 'RECTYP' FIELD 'VYL----'
            ID 'RC'     FIELD RC
            ID 'ERRMSG' FIELD ERRMSG.
        ELSE.
          CALL 'RSPOAOSD'
            ID 'ID'     FIELD IDENT
            ID 'PART'   FIELD PART
            ID 'TYPE'   FIELD DSN_TYPE
            ID 'RECTYP' FIELD 'VYL----'
            ID 'RC'     FIELD RC
            ID 'ERRMSG' FIELD ERRMSG.
        ENDIF.
        IF SY-SUBRC NE 0. EXIT. ENDIF.

        CLEAR: DATA_SET_LINE, DATA_SET_LENGTH.
        CALL 'RSPOARSD'
          ID 'BUFF'   FIELD DATA_SET_LINE+5
          ID 'DATALEN' FIELD DATA_SET_LENGTH
          ID 'RC'     FIELD RC
          ID 'ERRMSG' FIELD ERRMSG.
        STATUS = SY-SUBRC.
      ENDWHILE.
    ENDIF.
    IF STATUS <> 0 AND STATUS <> 40. EXIT. ENDIF.

    DATA_SET = DATA_SET_LINE.
    IF NOT ( DATA_SET_LENGTH IS INITIAL ).
      DATA_SET-DATA_LENGTH = DATA_SET_LENGTH - 1.
    ENDIF.
    APPEND DATA_SET.
    ADD 1 TO DATA_SET_LINECOUNT.
    IF DATA_SET_IS_OTF = ' '.
      IF DATA_SET_LINECOUNT >= DATA_SET_MAX_LINES.
        CLEAR DATA_SET.
        APPEND DATA_SET.
        MOVE '----------' TO DATA_SET-DATA_LINE.
        APPEND DATA_SET.
        CLEAR DATA_SET.
        APPEND DATA_SET.
        WRITE: 'Abbruch nach'(029) TO MSG-A.
        WRITE: DATA_SET_MAX_LINES TO MSG-B.
        WRITE: 'Zeilen.'(030) TO MSG-C.
        CONDENSE MSG.
        DATA_SET-DATA_LINE = MSG.
        APPEND DATA_SET.
        EXIT.
      ENDIF.
    ELSE.
      MOVE DATA_SET_LINE-DATA_LINE TO OTF_PAGE.
      APPEND OTF_PAGE.
      IF OTF_PAGE(2) = 'EP'.
        ADD 1 TO OTF_PAGES.
        IF OTF_PAGES  >= OTF_MAX_PAGES.
          MESSAGE S229(PO) WITH OTF_MAX_PAGES.
          EXIT.
        ENDIF.
      ELSEIF OTF_PAGE(2) = 'OP'.
        OTF_PAGE_INDEX-LINE_NUM = DATA_SET_LINECOUNT.
        APPEND OTF_PAGE_INDEX.
      ENDIF.
    ENDIF.
  ENDDO.
  IF STATUS <> 0 AND STATUS <> 12.
    CALL 'RSPOACSD'.
    MESSAGE E112(PO) WITH STATUS RC ERRMSG.
  ENDIF.
  CALL 'RSPOACSD'.
  STATUS = SY-SUBRC.
  IF STATUS <> 0.
    MESSAGE E112(PO) WITH STATUS RC ERRMSG.
  ENDIF.
ENDFORM.                               " GET_OTF_TAB
*&---------------------------------------------------------------------*
*&      Form  GET_PATH
*&---------------------------------------------------------------------*
FORM GET_PATH USING P_FILENAME.

  CLEAR: H_PATH, FILE_NAME.

  FILE_NAME = P_FILENAME.
  CALL FUNCTION 'WS_QUERY'
       EXPORTING
            QUERY  = 'CD'              "// Current Directory
       IMPORTING
            RETURN = H_PATH.

  CONCATENATE FILE_NAME '.pdf' INTO FILE_NAME.

  CALL FUNCTION 'WS_FILENAME_GET'
       EXPORTING
            DEF_FILENAME     = FILE_NAME
            DEF_PATH         = H_PATH
            MASK             = H_MASK
            MODE             = 'O'
       IMPORTING
            FILENAME         = FILENAME"dbname
       EXCEPTIONS
            INV_WINSYS       = 1
            NO_BATCH         = 2
            SELECTION_CANCEL = 3
            SELECTION_ERROR  = 4
            OTHERS           = 5.

ENDFORM.                    " GET_PATH
-------------------------------------------------

Related Items:

 
< Prev   Next >

Google Search

Statistics

Contribution Activity
Utilities: 38
Tips and Tricks: 333
Sample Code: 164
Total Contributions: 550

Member Activity
Members: 6198 since 2/1/2007!
New: 6 since yesterday!
Visitors: 1024308

Newest Members

Welcome our newest members:

Google Ads

Shared Bottom Border

Contact Us | Polls | Add URL | Contribute | Privacy | Terms | Feedback

Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
GenieHoldings.COM, Inc. | Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks | SAP Solutions Database

EDIGenie | Searching Survivor