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

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