PDF nelle Web-Dynpro – parte 1

Come utilizzare le Web-Dynpro per visualizzare PDF, che possono provenire da smartforms oppure da file salvati nel server?
Lo vedremo ora.
Come prima cosa è necessario ricavare il sorgente esadecimale del PDF. Nel context costruiamo un nodo di cardinalità 1 che chiamiamo PDF, con un attributo SOURCE di tipo XSTRING.
Se non abbiamo a disposizione il sorgente del PDF, utilizziamo lo smartform nel seguente modo:

 DATA:
 lv_function_name        TYPE rs38l_fnam,
 ls_control_parameters   TYPE ssfctrlop,
 ls_output_options       TYPE ssfcompop,
 ls_document_output_info TYPE ssfcrespd,
 ls_job_output_info      TYPE ssfcrescl,
 ls_job_output_options   TYPE ssfcresop.
DATA:
 lt_pdf_lines             TYPE TABLE OF tline,
 lv_bin_filesize          TYPE i,
 lv_mimetype(30)          TYPE c.
ls_control_parameters-getotf = 'X'.
 ls_output_options-tdimmed = space.
 ls_output_options-tdnewid = space.
 ls_control_parameters-no_dialog = 'X'.
CALL FUNCTION lv_function_name
 EXPORTING
 control_parameters   = ls_control_parameters
 output_options       = ls_output_options
 *     ... = ...
 IMPORTING
 document_output_info = ls_document_output_info
 job_output_info      = ls_job_output_info
 job_output_options   = ls_job_output_options
 EXCEPTIONS
 FORMATTING_ERROR     = 1
 INTERNAL_ERROR       = 2
 SEND_ERROR           = 3
 USER_CANCELED        = 4
 OTHERS               = 5.
CALL FUNCTION 'CONVERT_OTF'
 EXPORTING
 format                = 'PDF'
 IMPORTING
 bin_filesize          = lv_bin_filesize
 bin_file              = lv_source
 TABLES
 otf                   = ls_job_output_info-otfdata
 lines                 = lt_pdf_lines
 EXCEPTIONS
 err_max_linewidth     = 1
 err_format            = 2
 ERR_CONV_NOT_POSSIBLE = 3
 ERR_BAD_OTF           = 4.

A questo punto in LV_SOURCE abbiamo il sorgente del PDF (sempre che non ci siano stati errori, che è meglio gestire… ma ne parleremo un’altra volta)

Alla prossima puntata per vedere come visualizzare l’anteprima…

Posted under ABAP, web dynpro

This post was written by Alberto on ottobre 10, 2008

2 Comments so far

  1. andre luglio 5, 2009 15:02

    lo stesso principio si può applicare ad uno spool? ossia se la sorgente è uno spool che si voglia esportare in pdf?
    esiste un limite del numero di pagine del pdf? con lo standard la conversione in pdf non sembra possibile oltre un certo numero di pagine e lo spool di cui parlo ne ha più di 10000…

  2. Alberto luglio 9, 2009 15:15

    Si può fare la stessa cosa per uno spool, basta creare un job di stampa con OPEN_JOB e CLOSE_JOB, generando il file otf, poi da convertire in pdf.
    Se però il numero di pagine è troppo grande, non è fattibile, mi pare che ci sia una nota, che a seconda della memoria disponibile fissa a circa 1000 il numero di pagine possibili…

Leave a Comment

Name

Email

Sito web

Commenti

More Blog Post

Next Post:
Previose Post: