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

Generate a pdf file WITHOUT using the spool

Former Member
0 Likes
2,702

Hi All,

I need to generate a PDF file WITHOUT taking the file from the spool ie i need to generate it directly.

Please let me know how do i go about doing this.

Thanks and Regards,

Amit

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,898

Hi Amit,

what exactly is your requirement...?What is the content of PDF file..?Is it the output of a smartform...?

Then you can convert the smartform output , which is internally stored in OTF format, to PDF format using CONVERT_OTF Function Module. Now you can generate a PDF file in your local system using GUI_DOWNLOAD FUnction Module.

This doesn't need the use of spool request.

<u>Sample code and explaination</u>

REPORT yshail_smartform1_new .

***************************DECLARATIONS*******************************

TABLES: zshail_t1,sflight.

DATA: cparam TYPE ssfctrlop,

outop TYPE ssfcompop,

fm_name TYPE rs38l_fnam,

my_tabix TYPE sy-tabix,

file_size TYPE i,

bin_filesize TYPE i.

DATA: tab_otf_data TYPE ssfcrescl,

pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,

itab LIKE TABLE OF zshail_t1 WITH HEADER LINE,

otab TYPE TABLE OF sflight WITH HEADER LINE,

tab_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.

start-of-selection.

                                  • suppressing the dialog box****************************

outop-tddest = 'LP01'.

cparam-no_dialog = 'X'.

cparam-preview = space.

cparam-getotf = 'X'.

****************for the first smartform*******************************

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZSHAIL_SMFORM2'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

fm_name = fm_name

EXCEPTIONS

no_form = 1

no_function_module = 2

OTHERS = 3

.

IF sy-subrc <> 0.

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

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

ENDIF.

SELECT my_id my_income my_name FROM zshail_t1 INTO TABLE itab.

CALL FUNCTION fm_name

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

control_parameters = cparam

  • MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

output_options = outop

user_settings = space

IMPORTING

  • DOCUMENT_OUTPUT_INFO =

job_output_info = tab_otf_data

  • JOB_OUTPUT_OPTIONS =

TABLES

it_tab = itab[]

EXCEPTIONS

formatting_error = 1

internal_error = 2

send_error = 3

user_canceled = 4

OTHERS = 5

.

IF sy-subrc <> 0.

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

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

ENDIF.

********tab_otf_data will be contain the smartform output in OTF format.

*********appending the otf data into the final table*********************

tab_otf_final[] = tab_otf_data-otfdata[].

                        • converting OTF data into pdf data**************************

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

  • ARCHIVE_INDEX = ' '

  • COPYNUMBER = 0

  • ASCII_BIDI_VIS2LOG = ' '

IMPORTING

bin_filesize = bin_filesize

  • BIN_FILE =

TABLES

otf = tab_otf_final

lines = pdf_tab

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 4

OTHERS = 5

.

IF sy-subrc <> 0.

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

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

ENDIF.

************downloading the converted PDF data to your local PC*******

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = bin_filesize

filename = 'D:\TEST.PDF'

filetype = 'BIN'

  • 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'

IMPORTING

filelength = file_size

TABLES

data_tab = pdf_tab

  • 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

.

<b>Award points if found useful.</b>

Regards,

Inder.

Hi,

perhaps it will help to you. The hint is the following: create the pdf as usual, and then put the getpdf parameter to "X".


DATA:
       lv_params TYPE sfpoutputparams.
lv_params-getpdf = 'X'.
CALL FUNCTION 'FP_JOB_OPEN'
  CHANGING
    ie_outputparams = lv_params
  EXCEPTIONS
    cancel          = 1
    usage_error     = 2
    system_error    = 3
    internal_error  = 4
    OTHERS          = 5.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

call the printing and get back the pdf as a rawstring.

CALL FUNCTION fm_name
  EXPORTING
    /1bcdwb/docparams  = fp_docparams
  IMPORTING
    /1bcdwb/formoutput = lv_output
  EXCEPTIONS
    usage_error        = 1
    system_error       = 2
    internal_error     = 3.

IF sy-subrc <> 0.
  WRITE 'ERE0R'.
ENDIF.

close the spool..

thats all.

I hope I could help to you.

8 REPLIES 8
Read only

Former Member
0 Likes
1,898

Amit,

You can call a smartform and get the data back in OTF format. OTF data format can be converted to PDF data format using FM 'CONVERT_OTF'.

Thanks,

Sandeep

Read only

0 Likes
1,898

thanks Sandeep.

I have no idea about smart forms . can you please elaborate

Read only

Former Member
0 Likes
1,899

Hi Amit,

what exactly is your requirement...?What is the content of PDF file..?Is it the output of a smartform...?

Then you can convert the smartform output , which is internally stored in OTF format, to PDF format using CONVERT_OTF Function Module. Now you can generate a PDF file in your local system using GUI_DOWNLOAD FUnction Module.

This doesn't need the use of spool request.

<u>Sample code and explaination</u>

REPORT yshail_smartform1_new .

***************************DECLARATIONS*******************************

TABLES: zshail_t1,sflight.

DATA: cparam TYPE ssfctrlop,

outop TYPE ssfcompop,

fm_name TYPE rs38l_fnam,

my_tabix TYPE sy-tabix,

file_size TYPE i,

bin_filesize TYPE i.

DATA: tab_otf_data TYPE ssfcrescl,

pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE,

itab LIKE TABLE OF zshail_t1 WITH HEADER LINE,

otab TYPE TABLE OF sflight WITH HEADER LINE,

tab_otf_final TYPE itcoo OCCURS 0 WITH HEADER LINE.

start-of-selection.

                                  • suppressing the dialog box****************************

outop-tddest = 'LP01'.

cparam-no_dialog = 'X'.

cparam-preview = space.

cparam-getotf = 'X'.

****************for the first smartform*******************************

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZSHAIL_SMFORM2'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

fm_name = fm_name

EXCEPTIONS

no_form = 1

no_function_module = 2

OTHERS = 3

.

IF sy-subrc <> 0.

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

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

ENDIF.

SELECT my_id my_income my_name FROM zshail_t1 INTO TABLE itab.

CALL FUNCTION fm_name

EXPORTING

  • ARCHIVE_INDEX =

  • ARCHIVE_INDEX_TAB =

  • ARCHIVE_PARAMETERS =

control_parameters = cparam

  • MAIL_APPL_OBJ =

  • MAIL_RECIPIENT =

  • MAIL_SENDER =

output_options = outop

user_settings = space

IMPORTING

  • DOCUMENT_OUTPUT_INFO =

job_output_info = tab_otf_data

  • JOB_OUTPUT_OPTIONS =

TABLES

it_tab = itab[]

EXCEPTIONS

formatting_error = 1

internal_error = 2

send_error = 3

user_canceled = 4

OTHERS = 5

.

IF sy-subrc <> 0.

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

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

ENDIF.

********tab_otf_data will be contain the smartform output in OTF format.

*********appending the otf data into the final table*********************

tab_otf_final[] = tab_otf_data-otfdata[].

                        • converting OTF data into pdf data**************************

CALL FUNCTION 'CONVERT_OTF'

EXPORTING

format = 'PDF'

max_linewidth = 132

  • ARCHIVE_INDEX = ' '

  • COPYNUMBER = 0

  • ASCII_BIDI_VIS2LOG = ' '

IMPORTING

bin_filesize = bin_filesize

  • BIN_FILE =

TABLES

otf = tab_otf_final

lines = pdf_tab

EXCEPTIONS

err_max_linewidth = 1

err_format = 2

err_conv_not_possible = 3

err_bad_otf = 4

OTHERS = 5

.

IF sy-subrc <> 0.

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

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

ENDIF.

************downloading the converted PDF data to your local PC*******

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

bin_filesize = bin_filesize

filename = 'D:\TEST.PDF'

filetype = 'BIN'

  • 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'

IMPORTING

filelength = file_size

TABLES

data_tab = pdf_tab

  • 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

.

<b>Award points if found useful.</b>

Regards,

Inder.

Read only

Former Member
0 Likes
1,898

hi ,

After filling NAST and TNAPR table. call following function modules.

1. CALL FUNCTION 'READ_OTF_FROM_MEMORY'

EXPORTING

memory_key = nast-objky

TABLES

otf = lt_otf

EXCEPTIONS

memory_empty = 1

OTHERS = 2.

2. CALL FUNCTION 'CONVERT_OTF_2_PDF'

EXPORTING

use_otf_mc_cmd = 'X'

IMPORTING

bin_filesize = v_bin

TABLES

otf = lt_otf

doctab_archive = it_doctab

lines = lt_pdfdata

EXCEPTIONS

err_conv_not_possible = 1

err_otf_mc_noendmarker = 2

OTHERS = 3.

  • Converting pdf data to raw data

CALL FUNCTION 'QCE1_CONVERT'

TABLES

t_source_tab = lt_pdfdata

t_target_tab = it_pdf

EXCEPTIONS

convert_not_possible = 1

OTHERS = 2.

Reards

Ashok P

Message was edited by: Ashok Parupalli

Read only

0 Likes
1,898

thanks ashok...

sorry but how to fill the NAST and tnapr table

Thanks in advance

Read only

0 Likes
1,898

May be you can use .doc too, see code bellow:


REPORT zole_tutor_example_ms_word .
*--Include for OLE-enabling definitions
INCLUDE ole2incl .
*--Global variables
*--Variables to hold OLE object and entity handles
DATA gs_word TYPE ole2_object . "OLE object handle
DATA gs_documents TYPE ole2_object . "Documents
DATA gs_actdoc TYPE ole2_object . "Active document
DATA gs_application TYPE ole2_object . "Application
DATA gs_options TYPE ole2_object . "Application options
DATA gs_actwin TYPE ole2_object . "Active window
DATA gs_actpan TYPE ole2_object . "Active pane
DATA gs_view TYPE ole2_object . "View
DATA gs_selection TYPE ole2_object . "Selection
DATA gs_font TYPE ole2_object . "Font
DATA gs_parformat TYPE ole2_object . "Paragraph format
DATA gs_tables TYPE ole2_object . "Tables
DATA gs_range TYPE ole2_object . "Range handle for various ranges
DATA gs_table TYPE ole2_object . "One table
DATA gs_table_border TYPE ole2_object . "Table border
DATA gs_cell TYPE ole2_object . "One cell of a table
DATA gs_paragraph TYPE ole2_object . "Paragraph
DATA gv_pos(5) TYPE n . "Position information for table

START-OF-SELECTION .
*--Creating OLE object handle variable
  CREATE OBJECT gs_word 'WORD.APPLICATION' .
  IF sy-subrc NE 0 .
    MESSAGE s000(su) WITH 'Error while creating OLE object!'.
    LEAVE PROGRAM .
  ENDIF .



*--Setting object's visibility property
  SET PROPERTY OF gs_word 'Visible' = '1' .
*--Opening a new document
  GET PROPERTY OF gs_word 'Documents' = gs_documents .
  CALL METHOD OF gs_documents 'Add' .
*--Getting active document handle
  GET PROPERTY OF gs_word 'ActiveDocument' = gs_actdoc .
*--Getting applications handle
  GET PROPERTY OF gs_actdoc 'Application' = gs_application .



*--Setting the measurement unit
  GET PROPERTY OF gs_application 'Options' = gs_options .
  SET PROPERTY OF gs_options 'MeasurementUnit' = '1' . "CM


*--Getting handle for the selection which is here the character at the
*--cursor position
  GET PROPERTY OF gs_application 'Selection' = gs_selection .
  GET PROPERTY OF gs_selection 'Font' = gs_font .
  GET PROPERTY OF gs_selection 'ParagraphFormat' = gs_parformat .
*--Setting font attributes
  SET PROPERTY OF gs_font 'Name' = 'Arial' .
  SET PROPERTY OF gs_font 'Size' = '10' .
  SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
  SET PROPERTY OF gs_font 'Italic' = '1' . "Italic
  SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
*--Setting paragraph format attribute
  SET PROPERTY OF gs_parformat 'Alignment' = '2' . "Right-justified
  CALL METHOD OF gs_selection 'TypeText'
  EXPORTING
  #1 = 'This is an OLE example!'.
*--Setting the view to the main document again
*  SET PROPERTY OF gs_view 'SeekView' = '0' . "Main document view
*--Advancing cursor to the new line
  CALL METHOD OF gs_selection 'TypeParagraph' .

*--Reseting font attributes for the title
  SET PROPERTY OF gs_font 'Name' = 'Times New Roman' .
  SET PROPERTY OF gs_font 'Size' = '16' .
  SET PROPERTY OF gs_font 'Bold' = '1' . "Bold
  SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
  SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
*--Setting paragraph format attribute
  SET PROPERTY OF gs_parformat 'Alignment' = '1' . "Centered
  CALL METHOD OF gs_selection 'TypeText'
  EXPORTING
  #1 = text-000.
*--Advancing cursor to the new line
  CALL METHOD OF gs_selection 'TypeParagraph' .


*--Reseting font attributes for ordinary text
  SET PROPERTY OF gs_font 'Name' = 'Times New Roman' .
  SET PROPERTY OF gs_font 'Size' = '12' .
  SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
  SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
  SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
*--Setting paragraph format attribute
  SET PROPERTY OF gs_parformat 'Alignment' = '3' . "Justified
  CALL METHOD OF gs_selection 'TypeText'
  EXPORTING
  #1 = text-001.
*--Skip some lines
  DO 4 TIMES .
    CALL METHOD OF gs_selection 'TypeParagraph' .
  ENDDO.


*--Getting entity handles for the entities on the way
    GET PROPERTY OF gs_actdoc 'Tables' = gs_tables .
    GET PROPERTY OF gs_selection 'Range' = gs_range .
*--Adding a table with 3 rows and 2 columns
    CALL METHOD OF gs_tables 'Add' = gs_table
    EXPORTING
    #1 = gs_range " Handle for range entity
    #2 = '3' "Number of rows
    #3 = '2'. "Number of columns
*--Setting border attribute for the table
    GET PROPERTY OF gs_table 'Borders' = gs_table_border .
    SET PROPERTY OF gs_table_border 'Enable' = '1' . "With border
*--Filling the table with dummy data
*--Reseting font attributes for table content
    SET PROPERTY OF gs_font 'Name' = 'Garamond' .
    SET PROPERTY OF gs_font 'Size' = '11' .
    SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
    SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
    SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
*--Getting cell coordinates
    CALL METHOD OF gs_table 'Cell' = gs_cell
    EXPORTING
    #1 = '1' "first row
    #2 = '1'. "first column
*--Getting the range handle to write the text
    GET PROPERTY OF gs_cell 'Range' = gs_range .
*--Filling the cell
    SET PROPERTY OF gs_range 'Text' = 'OLE' .
*--Getting cell coordinates
    CALL METHOD OF gs_table 'Cell' = gs_cell
    EXPORTING
    #1 = '3' "third row
    #2 = '2'. "second column
*--Getting the range handle to write the text
    GET PROPERTY OF gs_cell 'Range' = gs_range .
*--Filling the cell
    SET PROPERTY OF gs_range 'Text' = 'OLE' .
*--Advancing the cursor to the end of the table
    GET PROPERTY OF gs_table 'Range' = gs_range .
    GET PROPERTY OF gs_range 'End' = gv_pos .
    SET PROPERTY OF gs_range 'Start' = gv_pos .
    CALL METHOD OF gs_range 'Select' .
*--Skip some lines
    DO 3 TIMES .
      CALL METHOD OF gs_selection 'TypeParagraph' .
    ENDDO .



*--Reseting font attributes for ordinary text
    SET PROPERTY OF gs_font 'Name' = 'Times New Roman' .
    SET PROPERTY OF gs_font 'Size' = '12' .
    SET PROPERTY OF gs_font 'Bold' = '0' . "Not bold
    SET PROPERTY OF gs_font 'Italic' = '0' . "Not Italic
    SET PROPERTY OF gs_font 'Underline' = '0' . "Not underlined
*--Setting paragraph format attribute
    SET PROPERTY OF gs_parformat 'Alignment' = '3' . "Justified
*--Indent the paragraph once
    GET PROPERTY OF gs_selection 'Paragraphs' = gs_paragraph .
    CALL METHOD OF gs_paragraph 'Indent' .
    CALL METHOD OF gs_selection 'TypeText'
    EXPORTING
    #1 = text-002.
    FREE OBJECT gs_word .

Read only

Former Member
0 Likes
1,898

Hi,

perhaps it will help to you. The hint is the following: create the pdf as usual, and then put the getpdf parameter to "X".


DATA:
       lv_params TYPE sfpoutputparams.
lv_params-getpdf = 'X'.
CALL FUNCTION 'FP_JOB_OPEN'
  CHANGING
    ie_outputparams = lv_params
  EXCEPTIONS
    cancel          = 1
    usage_error     = 2
    system_error    = 3
    internal_error  = 4
    OTHERS          = 5.
IF sy-subrc <> 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

call the printing and get back the pdf as a rawstring.

CALL FUNCTION fm_name
  EXPORTING
    /1bcdwb/docparams  = fp_docparams
  IMPORTING
    /1bcdwb/formoutput = lv_output
  EXCEPTIONS
    usage_error        = 1
    system_error       = 2
    internal_error     = 3.

IF sy-subrc <> 0.
  WRITE 'ERE0R'.
ENDIF.

close the spool..

thats all.

I hope I could help to you.