Application Development and Automation 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: 
Read only

Create a PDF file

Former Member
0 Likes
3,201

Dear all,

I need to create a file as type pdf and put some contents on it based on the requirement through ABAP program. To give a try, i started off with this.

FORM WRITE_FILE .

DATA: G_FILE(150),

WA_L.

vfile = 'test.pdf'.

CONCATENATE GFILE '\' VFILE INTO G_FILE.

OPEN DATASET G_FILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT IGNORING

CONVERSION ERRORS.

CONCATENATE 'Test' 'File' INTO RECORD.

TRANSFER RECORD TO G_FILE.

CLOSE DATASET G_FILE.

WA_L = 'X'.

IF WA_L = 'X'.

MESSAGE S038 WITH VFILE.

ENDIF.

ENDFORM.

When i execute this pgm, a file is been created with type pdf but when i try to open this file , it gives me an error like this: Acrobat reader cannot open 'test.pdf' because it is either not a supported file type or because the file has been damaged.

Any help ????

TIA,

sinthu

1 ACCEPTED SOLUTION
Read only

athavanraja
Active Contributor
0 Likes
3,081

what you could do is

1. write a normal abap report program to fetch the report details.

2. after fetching the data and before using write statement

do the following

select single spld into usr01-spld from usr01 where bname eq sy-uname .

if sy-subrc eq 0 .

move: usr01-spld to loc_dest .

endif .

*move: 'RFAX' to loc_dest .

call function 'GET_PRINT_PARAMETERS'

exporting

destination = loc_dest

copies = wf_copies

list_name = wf_listname

list_text = wf_listtext

immediately = ' '

release = ' '

new_list_id = 'X'

expiration = wf_days

line_size = 200

line_count = 65

layout = 'X_65_200'

sap_cover_page = 'X'

receiver = 'SAP*'

department = ''

no_dialog = 'X'

importing

out_parameters = wf_params

valid = wf_valid.

if wf_valid <> space.

new-page print on parameters wf_params no dialog.

perform write_summary .

new-page print off.

endif .

form write_summary.

  • here loop thru your itab and use write:/ to write itab content.

endform. " write_summary

This will create a spool and sy-spono will contain the spool number

now use FM

CONVERT_ABAPSPOOLJOB_2_PDF to convert the spool content to Pdf and

use

GUI_download to download the pdf content to local machine.

Regards

Raja

15 REPLIES 15
Read only

Former Member
0 Likes
3,081

Hi sinthu,

1. We cannot open a .pdf file

in binary format,

and put our own contents in it.

2. It is not like a normal TEXT file.

3. PDF has got its own PRE-DEFINED

RAW format, which only, pdf software

can understand.

4. If we try to put our own data,

the whole pdf gets corrupted

(bcos the format/raw data gets disturbed)

5. and hence, the error !!!

6. Same is the case with word/excel files.

regards,

amit m.

Read only

0 Likes
3,081

So, what is the solution for this??? The user wants the details in the pdf format.

Thanks,

-sinthu

Read only

0 Likes
3,081

Hi again,

1. One solution is

2. Emailing the report

in .pdf format.

3. Using SCOT settings (take help from basis team)

scot can be configured so that

when we try to send mail (sapscript/smartform)

it will AUTOMATICALLY CONVERT INTO PDF FORMAT,

and send it as attachment.

regards,

amit m.

Read only

Former Member
0 Likes
3,081

Hi Sinthu,

Can you specify what the "requirement" is...?

You can convert a Smartform or SAPScript output to a PDF file..

If that is the requirement, you can make use of standard program RSTXPDFT4 or using the Function Module

CONVERT_OTF_2_PDF.

Regards,

SP.

Read only

0 Likes
3,081

Hi SP,

This is not a sapscript or a smart form. Well, the requirement is, based on the customer performance, a report has to get generated in the .pdf format with the details of teh customers performance and send it to the hod's.

Hope u understand.

Thanks,

sinthu

Read only

Former Member
0 Likes
3,081

Sinthu,

There are few standard Function Module available in sap to make pdf format. You can use either of there for making pdf files.

CONVERT_OTF ==> put data in STRUCTURE itcoo and pass and mention fromat as PDF.

You can use the function module SX_OBJECT_CONVERT_OTF_PDF also for convertion.

Believe this will help you. If the reply found helpful, feed points for that.

Thanks,

Thomas Mann.

Read only

Former Member
0 Likes
3,081

HI

GOOD

GO THROUGH THIS REPORT

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

THANKS

MRUTYUN

Read only

0 Likes
3,081

Hi MRUTYUN

Thnks for the info. btw, what shud i enter in the parameter field. ????

I am new to all these... just started abap programing.

Thanks,

sinthu

Read only

athavanraja
Active Contributor
0 Likes
3,082

what you could do is

1. write a normal abap report program to fetch the report details.

2. after fetching the data and before using write statement

do the following

select single spld into usr01-spld from usr01 where bname eq sy-uname .

if sy-subrc eq 0 .

move: usr01-spld to loc_dest .

endif .

*move: 'RFAX' to loc_dest .

call function 'GET_PRINT_PARAMETERS'

exporting

destination = loc_dest

copies = wf_copies

list_name = wf_listname

list_text = wf_listtext

immediately = ' '

release = ' '

new_list_id = 'X'

expiration = wf_days

line_size = 200

line_count = 65

layout = 'X_65_200'

sap_cover_page = 'X'

receiver = 'SAP*'

department = ''

no_dialog = 'X'

importing

out_parameters = wf_params

valid = wf_valid.

if wf_valid <> space.

new-page print on parameters wf_params no dialog.

perform write_summary .

new-page print off.

endif .

form write_summary.

  • here loop thru your itab and use write:/ to write itab content.

endform. " write_summary

This will create a spool and sy-spono will contain the spool number

now use FM

CONVERT_ABAPSPOOLJOB_2_PDF to convert the spool content to Pdf and

use

GUI_download to download the pdf content to local machine.

Regards

Raja

Read only

0 Likes
3,081

Hi Raja,

Its me again with the doubt regarding creating a pdf file.

I have 2 problems.

1. I dont want a print out of the output. When i execute my program, its generating a print.

2. The output is getting generated in the pdf format but when i try to open, it gives me the same error

"could not open testa.pdf because it is either not supported etc....

Kindly have a luk at my code and pls advice.

REPORT ZSDFILE MESSAGE-ID ZZS.

tables: usr01.

TYPES: BEGIN OF TY_TAB,

SRNO(1),

NAME(3),

NO(2),

END OF TY_TAB.

DATA: IT_TAB TYPE FILETABLE,

IT_TAB_H TYPE FILETABLE WITH HEADER LINE,

GD_SUBRC TYPE I.

DATA: I_TAB TYPE STANDARD TABLE OF TY_TAB WITH HEADER LINE.

DATA: GFILE(250).

DATA: VFILE TYPE STRING,

PATH(100),

RECORD TYPE STRING.

data: loc_dest(4) type c,

COUNT(3) TYPE N VALUE 1,

PARAMS LIKE PRI_PARAMS,

ARPARAMS LIKE ARC_PARAMS,

VALID TYPE C,

gd_spool_nr LIKE tsp01-rqident.

data: gd_buffer TYPE string.

data: it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_pdf_output OCCURS 0.

INCLUDE STRUCTURE tline.

DATA: END OF it_pdf_output.

START-OF-SELECTION.

I_TAB-SRNO = '1'.

I_TAB-NAME = 'ABC'.

I_TAB-NO = '21'.

APPEND I_TAB.

select single spld into usr01-spld from usr01 where bname eq sy-uname .

if sy-subrc eq 0 .

move: usr01-spld to loc_dest .

endif .

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

DESTINATION = loc_dest

COPIES = COUNT

LIST_NAME = 'TEST'

LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'

IMMEDIATELY = 'X'

  • RELEASE = 'X'

  • NEW_LIST_ID = 'X'

  • EXPIRATION = DAYS

  • LINE_SIZE = 79

  • LINE_COUNT = 23

  • LAYOUT = 'X_PAPER'

  • SAP_COVER_PAGE = 'X'

  • COVER_PAGE = 'X'

    • RECEIVER = 'SAP*'

  • DEPARTMENT = 'System'

  • SAP_OBJECT = 'RS'

  • AR_OBJECT = 'TEST'

  • ARCHIVE_ID = 'XX'

  • ARCHIVE_INFO = 'III'

  • ARCHIVE_TEXT = 'Description'

  • NO_DIALOG = ' '

IMPORTING

OUT_PARAMETERS = PARAMS

OUT_ARCHIVE_PARAMETERS = ARPARAMS

VALID = VALID.

*IF SY-SUBRC <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*ENDIF.

if valid <> space.

new-page print on parameters params no dialog.

perform write_summary .

new-page print off.

endif .

gd_spool_nr = SY-SPONO.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

SRC_SPOOLID = GD_SPOOL_NR

  • NO_DIALOG =

  • DST_DEVICE =

  • PDF_DESTINATION =

  • IMPORTING

  • PDF_BYTECOUNT = gd_bytecount

  • PDF_SPOOLID =

  • LIST_PAGECOUNT =

  • BTC_JOBNAME =

  • BTC_JOBCOUNT =

TABLES

PDF = it_pdf_output

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

.

CHECK sy-subrc = 0.

  • Transfer the 132-long strings to 255-long strings

LOOP AT it_pdf_output.

TRANSLATE it_pdf_output USING ' ~'.

CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.

ENDLOOP.

TRANSLATE gd_buffer USING '~ '.

DO.

it_mess_att = gd_buffer.

APPEND it_mess_att.

SHIFT gd_buffer LEFT BY 255 PLACES.

IF gd_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = 'C:\TESTA.PDF'

FILETYPE = 'ASC'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

  • DAT_MODE = ' '

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = it_mess_att

  • FIELDNAMES =

  • 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

  • OTHERS = 22

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

form write_summary.

LOOP AT I_TAB.

WRITE:/ I_TAB-SRNO,I_TAB-NAME,I_TAB-NO.

ENDLOOP.

  • here loop thru your itab and use write:/ to write itab content.

endform.

TIA,

Sinthu

Read only

0 Likes
3,081

Hi sinthu,

1. Now it will generate the pdf

2. just minor modifications (bold)

3. Just copy paste

4.

REPORT ZSDFILE MESSAGE-ID ZZS.

tables: usr01.

TYPES: BEGIN OF TY_TAB,

SRNO(1),

NAME(3),

NO(2),

END OF TY_TAB.

DATA: IT_TAB TYPE FILETABLE,

IT_TAB_H TYPE FILETABLE WITH HEADER LINE,

GD_SUBRC TYPE I.

DATA: I_TAB TYPE STANDARD TABLE OF TY_TAB WITH HEADER LINE.

DATA: GFILE(250).

DATA: VFILE TYPE STRING,

PATH(100),

RECORD TYPE STRING.

data: loc_dest(4) type c,

COUNT(3) TYPE N VALUE 1,

PARAMS LIKE PRI_PARAMS,

ARPARAMS LIKE ARC_PARAMS,

VALID TYPE C,

gd_spool_nr LIKE tsp01-rqident.

data: gd_buffer TYPE string.

data: it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_pdf_output OCCURS 0.

INCLUDE STRUCTURE tline.

DATA: END OF it_pdf_output.

START-OF-SELECTION.

I_TAB-SRNO = '1'.

I_TAB-NAME = 'ABC'.

I_TAB-NO = '21'.

APPEND I_TAB.

select single spld into usr01-spld from usr01 where bname eq sy-uname .

if sy-subrc eq 0 .

move: usr01-spld to loc_dest .

endif .

CALL FUNCTION 'GET_PRINT_PARAMETERS'

EXPORTING

DESTINATION = loc_dest

COPIES = COUNT

LIST_NAME = 'TEST'

LIST_TEXT = 'SUBMIT ... TO SAP-SPOOL'

IMMEDIATELY = 'X'

  • RELEASE = 'X'

  • NEW_LIST_ID = 'X'

  • EXPIRATION = DAYS

  • LINE_SIZE = 79

  • LINE_COUNT = 23

  • LAYOUT = 'X_PAPER'

  • SAP_COVER_PAGE = 'X'

  • COVER_PAGE = 'X'

    • RECEIVER = 'SAP*'

  • DEPARTMENT = 'System'

  • SAP_OBJECT = 'RS'

  • AR_OBJECT = 'TEST'

  • ARCHIVE_ID = 'XX'

  • ARCHIVE_INFO = 'III'

  • ARCHIVE_TEXT = 'Description'

<b>NO_DIALOG = 'X'</b>

IMPORTING

OUT_PARAMETERS = PARAMS

OUT_ARCHIVE_PARAMETERS = ARPARAMS

VALID = VALID.

*IF SY-SUBRC <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*ENDIF.

if valid <> space.

new-page print on parameters params no dialog.

perform write_summary .

new-page print off.

endif .

gd_spool_nr = SY-SPONO.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

SRC_SPOOLID = GD_SPOOL_NR

  • NO_DIALOG =

  • DST_DEVICE =

  • PDF_DESTINATION =

  • IMPORTING

  • PDF_BYTECOUNT = gd_bytecount

  • PDF_SPOOLID =

  • LIST_PAGECOUNT =

  • BTC_JOBNAME =

  • BTC_JOBCOUNT =

TABLES

PDF = it_pdf_output

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

.

CHECK sy-subrc = 0.

*----


  • PDF

*----


<b>CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = 'c:\mypdf.pdf'

FILETYPE = 'BIN'

TABLES

DATA_TAB = it_pdf_output

.</b>*----


EXIT.

  • Transfer the 132-long strings to 255-long strings

LOOP AT it_pdf_output.

TRANSLATE it_pdf_output USING ' ~'.

CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.

ENDLOOP.

TRANSLATE gd_buffer USING '~ '.

DO.

it_mess_att = gd_buffer.

APPEND it_mess_att.

SHIFT gd_buffer LEFT BY 255 PLACES.

IF gd_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE =

FILENAME = 'C:\TESTA.PDF'

FILETYPE = 'ASC'

  • APPEND = ' '

  • WRITE_FIELD_SEPARATOR = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = ' '

  • WRITE_LF = 'X'

  • COL_SELECT = ' '

  • COL_SELECT_MASK = ' '

  • DAT_MODE = ' '

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = it_mess_att

  • FIELDNAMES =

  • 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

  • OTHERS = 22

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

form write_summary.

LOOP AT I_TAB.

WRITE:/ I_TAB-SRNO,I_TAB-NAME,I_TAB-NO.

ENDLOOP.

  • here loop thru your itab and use write:/ to write itab content.

endform.

regards,

amit m.

Read only

0 Likes
3,081

thanks a lot Amit... The problem is solved....

-sinthu

Read only

0 Likes
3,081

Hi Amit ,

I am going thru your answer to the question of PDF Creation,

I have done all the things you have said in your answer but the problem still lies the file is downloaded as a PDF file but it is not able to show the data when i open it it just prompts me the msg tht it cannot display the data as it is not converted properly what can i do , i m new to this field so please help me.

I have seen your solution from this URL.

Please help me.

Read only

Former Member
0 Likes
3,081

Hi sinthu,

i did it on this way. The Formular ZS_ITAB is very simple and has only as output &ITAB-TEXT&. As Charformat i set Courier 10.

Hope i can help you.

Regards, Dieter

REPORT ZGRO_TEST3.

*

DATA: BEGIN OF ITAB OCCURS 0,

TEXT(72),

END OF ITAB.

*

  • Druckparameter

DATA: BEGIN OF DR_PARAM.

INCLUDE STRUCTURE ITCPO.

DATA: END OF DR_PARAM.

*

  • Tabellenausgabe

DATA: OTFDATA LIKE SOLI OCCURS 0 WITH HEADER LINE.

DATA: PDFDATA LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.

DATA: PDF_FILESIZE LIKE SOOD-OBJLEN.

DATA: BIN_FILESIZE TYPE I.

*

************************************************************************

*

READ REPORT 'ZGRO_TEST' INTO ITAB.

*

DR_PARAM-TDDEST = 'LOCAL'. "Ausgabegerät

DR_PARAM-TDIMMED = ' '. "Sofort ausgeben

DR_PARAM-TDPREVIEW = 'X'. "Druckvoschau

DR_PARAM-TDGETOTF = 'X'. "Ausgabe in Tabelle

*

CALL FUNCTION 'OPEN_FORM'

EXPORTING

DEVICE = 'PRINTER'

DIALOG = ' '

OPTIONS = DR_PARAM

FORM = 'ZS_ITAB'

LANGUAGE = SY-LANGU.

*

LOOP AT ITAB.

*

CALL FUNCTION 'WRITE_FORM'

EXPORTING

WINDOW = 'MAIN'

ELEMENT = 'AUSGABE'.

*

ENDLOOP.

*

CALL FUNCTION 'CLOSE_FORM'

TABLES

OTFDATA = OTFDATA.

*

CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'

EXPORTING

FORMAT_SRC = 'OTF'

FORMAT_DST = 'PDF'

DEVTYPE = ''

LEN_IN = ''

IMPORTING

LEN_OUT = PDF_FILESIZE

TABLES

CONTENT_IN = OTFDATA

CONTENT_OUT = PDFDATA.

*

BIN_FILESIZE = PDF_FILESIZE.

*

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

BIN_FILESIZE = BIN_FILESIZE

FILENAME = 'D:TEST.PDF'

FILETYPE = 'BIN'

TABLES

DATA_TAB = PDFDATA

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6.

*

************************************************************************

  • Programmende *

Read only

Former Member
0 Likes
3,081

Hai sinthu

report zabap_2_pdf.

*-- Enhancements: only allow to be run with variant. Then called

*-- program will be transparent to users

*-- TABLES

tables:

tsp01.

*-- STRUCTURES

data:

mstr_print_parms like pri_params,

mc_valid(1) type c,

mi_bytecount type i,

mi_length type i,

mi_rqident like tsp01-rqident.

*-- INTERNAL TABLES

data:

mtab_pdf like tline occurs 0 with header line,

mc_filename like rlgrap-filename.

*-- SELECTION SCREEN

parameters:

p_repid like sy-repid, " Report to execute

p_linsz like sy-linsz default 132, " Line size

p_paart like sy-paart default 'X_65_132'. " Paper Format

start-of-selection.

concatenate 'c:\'

p_repid

'.pdf'

into mc_filename.

*-- Setup the Print Parmaters

call function 'GET_PRINT_PARAMETERS'

exporting

authority= space

copies = '1'

cover_page = space

data_set = space

department = space

destination = space

expiration = '1'

immediately = space

in_archive_parameters = space

in_parameters = space

layout = space

mode = space

new_list_id = 'X'

no_dialog= 'X'

user = sy-uname

importing

out_parameters = mstr_print_parms

valid = mc_valid

exceptions

archive_info_not_found = 1

invalid_print_params = 2

invalid_archive_params = 3

others = 4.

*-- Make sure that a printer destination has been set up

*-- If this is not done the PDF function module ABENDS

if mstr_print_parms-pdest = space.

mstr_print_parms-pdest = 'LOCL'.

endif.

*-- Explicitly set line width, and output format so that

*-- the PDF conversion comes out OK

mstr_print_parms-linsz = p_linsz.

mstr_print_parms-paart = p_paart.

submit (p_repid) to sap-spool without spool dynpro

spool parameters mstr_print_parms

via selection-screen

and return.

*-- Find out what the spool number is that was just created

perform get_spool_number using sy-repid

sy-uname

changing mi_rqident.

*-- Convert Spool to PDF

call function 'CONVERT_ABAPSPOOLJOB_2_PDF'

exporting

src_spoolid= mi_rqident

no_dialog = space

dst_device = mstr_print_parms-pdest

importing

pdf_bytecount = mi_bytecount

tables

pdf = mtab_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.

call function 'DOWNLOAD'

exporting

bin_filesize = mi_bytecount

filename = mc_filename

filetype = 'BIN'

importing

act_filename = mc_filename

tables

data_tab = mtab_pdf.

----


  • FORM get_spool_number *

----


  • Get the most recent spool created by user/report *

----


  • --> F_REPID *

  • --> F_UNAME *

  • --> F_RQIDENT *

----


form get_spool_number using f_repid

f_uname

changing f_rqident.

data:

lc_rq2name like tsp01-rq2name.

concatenate f_repid+0(8)

f_uname+0(3)

into lc_rq2name separated by '_'.

select * from tsp01 where rq2name = lc_rq2name

order by rqcretime descending.

f_rqident = tsp01-rqident.

exit.

endselect.

if sy-subrc ne 0.

clear f_rqident.

endif.

endform." get_spool_number

Thanks & regards

Sreeni