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

How to generate a PDF document from ABAP program

Former Member
0 Likes
13,431

Hi experts,

I have arequirement where in i need to create a PDF document using program. I have all the data collected into tables and i have used the calss CL_FP_PDF_OBJECT.

A pdf document is successfully created, but unable to open it because of some error. I guess some encryption is missing.

As an alternative I have created a smartform and generated its OTF data in my program and created a PDF. This is working fine.

But as per my requirement, i cannot go for a smart form.

Any help to resolve this issue will be highly appreciated.

Thanks & regards,

Asrar Ahamed MA

Infosys Tech. Ltd. INDIA

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
5,783

Hi Asrar ,

create a report with this Copy and give your program name in the selection screen whose output need to be in PDF.

*report zanusha_spool_to_pdf.

---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.

*-- 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.

*-- 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.

*-- 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.

submit (p_repid) to sap-spool without spool dynpro

spool parameters mstr_print_parms

via selection-screen

and return.

*-- Find out the spool number

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.

*-- Download the file

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(9)

f_uname+0(3)

into lc_rq2name.

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

Thanx

Anusha.

Hi Asrar ,

create a report with this Copy and give your program name in the selection screen whose output need to be in PDF.

*report zanusha_spool_to_pdf.

---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.

*-- 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.

*-- 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.

*-- 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.

submit (p_repid) to sap-spool without spool dynpro

spool parameters mstr_print_parms

via selection-screen

and return.

*-- Find out the spool number

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.

*-- Download the file

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(9)

f_uname+0(3)

into lc_rq2name.

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

Thanx

Anusha.

5 REPLIES 5
Read only

GauthamV
Active Contributor
0 Likes
5,783

Use this program.

RSTXPDFT4

Read only

Former Member
0 Likes
5,783

Hi

REfer this link and ans provided by SAP USER, it may solve ur prob.

Read only

Former Member
0 Likes
5,784

Hi Asrar ,

create a report with this Copy and give your program name in the selection screen whose output need to be in PDF.

*report zanusha_spool_to_pdf.

---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.

*-- 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.

*-- 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.

*-- 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.

submit (p_repid) to sap-spool without spool dynpro

spool parameters mstr_print_parms

via selection-screen

and return.

*-- Find out the spool number

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.

*-- Download the file

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(9)

f_uname+0(3)

into lc_rq2name.

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

Thanx

Anusha.

Read only

Former Member
0 Likes
5,783

Hi,

follow this thread

Regards,

Manish

Read only

Former Member
0 Likes
5,783

Hi Asrar,

Here is one more approch. Write data in ABAP Spool and then Use Function module CONVERT_ABAPSPOOLJOB_2_PDF to create PDF form the SPOOL.

Therer is lot of code online as to how to use CONVERT_ABAPSPOOLJOB_2_PDF.

Hope it helps!

Regards

Shital