Kategorien
-
Neueste Beiträge
- [SQL] Bedingung bei JOIN vs. WHERE
- [CDS-Views] Übersicht zu nützlichen CDS-Views
- [ABAP] Pivot-Darstellung von Feldwerten eines CDS-Views / SELECT-Statements (CASE, SUM, STRING_AGG, substring_regexpr, RegEx, PCRE, UNION, COLLECT)
- [ABAP] Zu einem Datum spezielle Kalenderwerte ausgeben
- [SAP] Buchungsbelege
- Informatik
- KI
- [ABAP] SALV: Selektierte Zeilen (selected rows) eines SALV-Gitters auswerten
- [ABAP] SALV: Button-Separator in der SALV-Toolbar einfügen
- [ABAP] CDS-Views: Alle Spaltenbezeichner eines CDS-Views ausgeben
Schlagwort: PDF
[ABAP] Attachements zu einem PDF hinzufügen
[ABAP] PDFs mittels Klasse CL_RSPO_PDF_MERGE zusammenfügen (mergen)
* siehe auch RSPO_TEST_MERGE_PDF_FILES (Beispielreport zum Aufruf des PDF-Merge ABAP-Interfaces)
* benötigt KEIN ADS (Adobe Document Service)
TRY.
DATA: lv_rc TYPE i.
DATA: it_files TYPE filetable.
DATA: lv_action TYPE i.
* FileOpen-Dialog aufrufen
cl_gui_frontend_services=>file_open_dialog( EXPORTING
file_filter = |pdf (*.pdf)\|*.pdf\|{ cl_gui_frontend_services=>filetype_all }|
multiselection = abap_true
CHANGING
file_table = it_files
rc = lv_rc
user_action = lv_action ).
IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn mind. zwei Dateien ausgewählt worden sind
IF lines( it_files ) > 1.
* PDF-Merge Objekt
DATA(o_pdf_merger) = NEW cl_rspo_pdf_merge( ).
* Dateiliste durchgehen
LOOP AT it_files ASSIGNING FIELD-SYMBOL(<f>).
DATA(lv_filesize) = CONV w3param-cont_len( '0' ).
DATA(it_bin_data) = VALUE w3mimetabtype( ).
* Datei auf Appl. Server hochladen (binary)
cl_gui_frontend_services=>gui_upload( EXPORTING
filename = |{ it_files[ sy-tabix ]-filename }|
filetype = 'BIN'
IMPORTING
filelength = lv_filesize
CHANGING
data_tab = it_bin_data ).
* solix -> xstring
DATA(lv_bin_data) = cl_bcs_convert=>solix_to_xstring( it_solix = it_bin_data ).
* Binärdaten der PDF-Datei als xstring zum Merger-Objekt hinzufügen
o_pdf_merger->add_document( lv_bin_data ).
WRITE: / |Hinzugefügt: { it_files[ sy-tabix ]-filename } ({ lv_filesize } Bytes)|.
ENDLOOP.
* PDF-Dokumente mergen
o_pdf_merger->merge_documents( IMPORTING merged_document = DATA(lv_merged_pdf)
rc = lv_rc ).
IF lv_rc = 0.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
* SaveDialog
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_extension = 'pdf'
default_file_name = 'merged.pdf'
file_filter = |pdf (*.pdf)\|*.pdf\|{ cl_gui_frontend_services=>filetype_all }|
prompt_on_overwrite = abap_true
CHANGING
filename = lv_filename " Dateiname
path = lv_path " Pfad
fullpath = lv_fullpath " Pfad + Dateiname
user_action = lv_action ). " Benutzeraktion
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* xstring -> solix
DATA(it_bin_data_merged) = cl_bcs_convert=>xstring_to_solix( lv_merged_pdf ).
DATA(lv_size_merged) = xstrlen( lv_merged_pdf ).
* Datei lokal speichern
cl_gui_frontend_services=>gui_download( EXPORTING
filename = lv_fullpath
filetype = 'BIN'
bin_filesize = lv_size_merged
CHANGING
data_tab = it_bin_data_merged ).
WRITE: / |Gespeichert: { lv_fullpath } ({ lv_size_merged } Bytes)|.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.
Links
[ABAP] PDF-Dokument per ADS (Adobe Document Service) in XML konvertieren
* https://www.berater-wiki.de/XML_aus_PDF_extrahieren_mit_Testprogramm_FP_PDF_TEST_03
* http://sapfirst.blogspot.com/2014/05/inbound-abap-proxy-with-pdf-attachment.html
* Paket: SAFP
* Programme: FP_PDF_TEST_01 (PDF erzeugen)
* FP_PDF_TEST_03 (Datenextraktion)
* XFD (XML Form Data): https://www.berater-wiki.de/XFD-Datei_(Values_of_PDF_form_fields_in_XML)
* XFT (XML Form Template)
* XDC (XML Printer Definitions)
TRY.
DATA: lv_rc TYPE i.
DATA: it_files TYPE filetable.
DATA: lv_action TYPE i.
* FileOpen-Dialog aufrufen
cl_gui_frontend_services=>file_open_dialog( EXPORTING
file_filter = |pdf (*.pdf)\|*.pdf\|{ cl_gui_frontend_services=>filetype_all }|
CHANGING
file_table = it_files
rc = lv_rc
user_action = lv_action ).
IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn mind. zwei Dateien ausgewählt worden sind
IF lines( it_files ) > 0.
DATA(lv_filesize) = CONV w3param-cont_len( '0' ).
DATA(it_bin_data) = VALUE w3mimetabtype( ).
* Datei auf Appl. Server hochladen (binary)
cl_gui_frontend_services=>gui_upload( EXPORTING
filename = |{ it_files[ 1 ]-filename }|
filetype = 'BIN'
IMPORTING
filelength = lv_filesize
CHANGING
data_tab = it_bin_data ).
* solix -> xstring
DATA(lv_bin_data) = cl_bcs_convert=>solix_to_xstring( it_solix = it_bin_data ).
* Form Processor erzeugen
DATA(o_form_processor) = cl_fp=>get_reference( ).
* PDF-Objekt erzeugen
DATA(o_pdf) = o_form_processor->create_pdf_object( ).
* Binärdaten an PDF-Objekt übergeben
o_pdf->set_document( pdfdata = lv_bin_data ).
* PDF-Daten extrahieren
o_pdf->set_extractdata( ).
* ADS-Server rufen
o_pdf->execute( ).
* extrahierte Daten holen (xstring)
o_pdf->get_data( IMPORTING formdata = DATA(lv_pdf_formdata) ).
* xstring (binary) -> XML-string (UTF-8)
DATA(lv_pdf_xml_str) = ||.
DATA(o_conv) = cl_abap_conv_in_ce=>create( input = lv_pdf_formdata
encoding = 'UTF-8' ).
o_conv->read( IMPORTING data = lv_pdf_xml_str ).
* XML-Zugriff
DATA(o_ixml) = cl_ixml=>create( ).
DATA(o_sf) = o_ixml->create_stream_factory( ).
DATA(o_doc) = o_ixml->create_document( ).
DATA(o_stream) = o_sf->create_istream_string( lv_pdf_xml_str ).
* XML-Parser
DATA(o_parser) = o_ixml->create_parser( stream_factory = o_sf
istream = o_stream
document = o_doc ).
* XML parsen
IF o_parser->parse( ) = 0.
DATA(o_root) = o_doc->get_root_element( ).
...
ELSE.
* Fehlerauswertung
DO o_parser->num_errors( ) TIMES.
DATA(o_err) = o_parser->get_error( index = sy-index - 1 ).
IF o_err IS BOUND.
WRITE: / o_err->get_column( ), o_err->get_line( ), o_err->get_reason( ).
ENDIF.
ENDDO.
ENDIF.
ENDIF.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.
[ABAP] CONVERT_OTF: OTF-Format als PDF speichern und anzeigen (Beispiel Smart Forms-Formular)
* https://www.tutorialspoint.com/sap_smart_forms/
* https://www.berater-wiki.de/Smart_Forms_Generierter_Funktionsbaustein
* https://mind-forms.de/sap-formulartechnologien/sapscript/sapscript-formulare-in-pdf-umwandeln/
* Tabelle STXFADM
PARAMETERS: p_form TYPE stxfadm-formname DEFAULT 'SF_EXAMPLE_01'.
PARAMETERS: p_open TYPE abap_bool DEFAULT abap_true.
START-OF-SELECTION.
DATA(lv_control_parameters) = VALUE ssfctrlop( no_dialog = abap_true
preview = space
getotf = abap_true
langu = sy-langu ).
DATA: lv_devtype TYPE rspoptype.
* Smart Forms: Gerätetyp nach Sprache ermitteln
CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
EXPORTING
i_language = lv_control_parameters-langu
IMPORTING
e_devtype = lv_devtype
EXCEPTIONS
no_language = 1
language_not_installed = 2
no_devtype_found = 3
system_error = 4
OTHERS = 5.
IF sy-subrc = 0.
DATA(lv_output_options) = VALUE ssfcompop( tddest = 'LOCL'
tdprinter = lv_devtype ).
* FuBa Name ermitteln
DATA: lv_fm_name TYPE rs38l_fnam.
* Smart Forms: Name des Funktionsbausteins bestimmen
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form
IMPORTING
fm_name = lv_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc = 0.
DATA: lv_document_output_info TYPE ssfcrespd.
DATA: lv_job_output_info TYPE ssfcrescl.
DATA: lv_job_output_options TYPE ssfcresop.
* Zusatzparameter für Fuba für Formular 'SF_EXAMPLE_01'
DATA: lv_customer TYPE scustom.
DATA: it_bookings TYPE ty_bookings.
DATA: it_connections TYPE ty_connections.
* FuBa der Form aufrufen und OTF-Daten erzeugen
CALL FUNCTION lv_fm_name
EXPORTING
control_parameters = lv_control_parameters
output_options = lv_output_options
user_settings = space
customer = lv_customer
bookings = it_bookings
connections = it_connections
IMPORTING
document_output_info = lv_document_output_info
job_output_info = lv_job_output_info
job_output_options = lv_job_output_options
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
IF sy-subrc = 0.
DATA(lv_bin_filesize) = 0.
DATA: lv_pdf_xstring TYPE xstring.
DATA: it_lines TYPE tline_t.
* Konvertieren von OTF-Format in verschiedene Formate (TLINE Tabelle)
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF' " ASCII, PDF
IMPORTING
bin_filesize = lv_bin_filesize
* bin_file = lv_pdf_xstring " PDF Binärdaten -> einkommentieren, wenn benötigt, sonst it_lines leer!
TABLES
otf = lv_job_output_info-otfdata " Input OTF
lines = it_lines " Output
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
OTHERS = 5.
IF sy-subrc = 0.
DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
TRY.
* Speichern-Dialog
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_file_name = |{ p_form }.pdf|
default_extension = 'pdf'
file_filter = '(*.pdf)|*.pdf|'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_action ).
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* Daten lokal speichern
cl_gui_frontend_services=>gui_download( EXPORTING
bin_filesize = lv_bin_filesize
filename = lv_fullpath
filetype = 'BIN'
CHANGING
data_tab = it_lines ).
WRITE: / |Datei erfolgreich unter { lv_fullpath } gespeichert.|.
IF abap_true = p_open.
* Datei anzeigen
cl_gui_frontend_services=>execute( document = lv_fullpath ).
ENDIF.
ENDIF.
CATCH cx_root INTO DATA(e_text).
WRITE: / e_text->get_text( ).
ENDTRY.
ENDIF.
ELSE.
DATA: it_sf_errors TYPE tsferror.
* Smart Forms: Lesen der Fehlertabelle nach Aufruf
CALL FUNCTION 'SSF_READ_ERRORS'
IMPORTING
errortab = it_sf_errors.
cl_demo_output=>display( it_sf_errors ).
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
[ABAP] PDF im Browserfenster anzeigen
TRY.
DATA: it_sel_filetab TYPE filetable.
DATA: ret_code TYPE i.
DATA: lv_action TYPE i.
* FileOpen-Dialog für Dateiauswahl anzeigen
cl_gui_frontend_services=>file_open_dialog( EXPORTING
window_title = 'PDF-Datei öffnen'
multiselection = abap_false
CHANGING
file_table = it_sel_filetab
rc = ret_code " Anzahl ausgewählte Dateien, -1 bei Fehler
user_action = lv_action ).
IF lv_action = cl_gui_frontend_services=>action_ok.
* Browserfenster erzeugen
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* PDF im ABAP-Fenster anzeigen
o_html->show_url( url = it_sel_filetab[ 1 ]-filename
in_place = abap_true ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
WRITE: / space.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
WRITE: / e_txt->get_text( ).
ENDTRY.
[ABAP] Listenausgabe in Spool umleiten und als PDF ausgeben
DATA: it_print_params TYPE pri_params.
* Spool Druckparameter und Archivparameter lesen, bestimmen, ändern
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
no_dialog = abap_true
IMPORTING
out_parameters = it_print_params
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
IF sy-subrc = 0.
* Liste -> Spool (ID)
NEW-PAGE PRINT ON PARAMETERS it_print_params NO DIALOG.
WRITE: / 'Hello World'.
NEW-PAGE PRINT OFF.
COMMIT WORK.
DATA: lv_bin_length TYPE i.
DATA: lv_xstring_pdf TYPE xstring.
* Spool (ID) -> PDF
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = CONV tsp01-rqident( sy-spono )
no_dialog = abap_true
pdf_destination = 'X' " xstring
get_size_from_format = abap_true
IMPORTING
pdf_bytecount = lv_bin_length
bin_file = lv_xstring_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.
IF sy-subrc = 0.
DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
TRY.
* SaveDialog aufrufen
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_extension = 'pdf'
default_file_name = 'ListOutput'
file_filter = |PDF (*.pdf)\|*.pdf\|{ cl_gui_frontend_services=>filetype_all }|
prompt_on_overwrite = abap_true
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_action ).
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* xstring -> solix
DATA(it_raw_data) = cl_bcs_convert=>xstring_to_solix( lv_xstring_pdf ).
* iTab (bytes) -> lokale Datei
cl_gui_frontend_services=>gui_download( EXPORTING
filename = lv_fullpath
filetype = 'BIN'
bin_filesize = lv_bin_length
CHANGING
data_tab = it_raw_data ).
* Browserfenster erzeugen
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* PDF im ABAP-Fenster anzeigen
o_html->show_url( url = CONV skwf_url( lv_fullpath )
in_place = abap_true ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
WRITE: / |Datei erfolgreich unter { lv_fullpath } gespeichert.|.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
MESSAGE e_txt->get_text( ) TYPE 'S'.
ENDTRY.
ENDIF.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Links
[ABAP] Spoolaufträge (OTF, OTFHPL2, SMART, LIST, TEXT) in PDF wandeln
Variante 1 (cl_rspo_spoolid_to_pdf)
* Nr. des Spoolauftrags
PARAMETERS: p_spool TYPE rspoid OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_spool.
SELECT rqident, rqtitle, rqdest, rqpaper, rqdoctype
INTO TABLE @DATA(it_spool)
FROM tsp01
ORDER BY rqident.
DATA: it_return TYPE TABLE OF ddshretval.
* eigene Suuchhilfe für Auswahl der Spooljobs anzeigen
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'RQIDENT' " Spalte der internen Tabelle bei value_tab
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_SPOOL' " Name des Dynpro-Feldes für die automatische Werterückgabe
value_org = 'S' " Werteübergabe: C: zellenweise, S: strukturiert
window_title = 'Auswahl'
TABLES
value_tab = it_spool " Übergabe-Tabelle mit Werten für die Anzeige und Auswahl
return_tab = it_return " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
IF lines( it_return ) > 0.
MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
ENDIF.
ENDIF.
START-OF-SELECTION.
TRY.
DATA: lv_xstring_pdf TYPE xstring.
DATA: lv_size TYPE int4.
DATA: lv_jobname TYPE btcjob.
DATA: lv_jobcount TYPE btcjobcnt.
* SPOOL-ID -> PDF
cl_rspo_spoolid_to_pdf=>get_spool_pdf( EXPORTING
iv_rqident = p_spool
iv_no_background = abap_true
IMPORTING
ev_pdf = lv_xstring_pdf
ev_size = lv_size
ev_jobname = lv_jobname
ev_jobcount = lv_jobcount
).
WRITE: / 'Size:', lv_size.
WRITE: / 'Jobname:', lv_jobname.
WRITE: / 'Jobcount', lv_jobcount.
DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
* SaveDialog
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_file_name = 'test.pdf'
default_extension = 'pdf'
file_filter = '(*.pdf)|*.pdf|'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_action ).
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* xstring -> solix
DATA(it_raw_data) = cl_bcs_convert=>xstring_to_solix( lv_xstring_pdf ).
* PDF lokal speichern
cl_gui_frontend_services=>gui_download( EXPORTING
filename = lv_fullpath
filetype = 'BIN'
bin_filesize = lv_size
CHANGING
data_tab = it_raw_data ).
* Browserfenster erzeugen
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* PDF im ABAP-Fenster anzeigen
o_html->show_url( url = CONV skwf_url( lv_fullpath )
in_place = abap_true ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
WRITE: / |Datei erfolgreich unter { lv_fullpath } gespeichert.|.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
ENDTRY.
Variante 2 (CONVERT_OTFSPOOLJOB_2_PDF, CONVERT_ABAPSPOOLJOB_2_PDF)
* Nr. des Spoolauftrags
PARAMETERS: p_spool TYPE rspoid OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_spool.
DATA: it_return TYPE TABLE OF ddshretval.
SELECT rqident, rqtitle, rqdest, rqpaper, rqdoctype
INTO TABLE @DATA(it_spool)
FROM tsp01
ORDER BY rqident.
* eigene Suuchhilfe für Auswahl der Spooljobs anzeigen
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'RQIDENT' " Spalte der internen Tabelle bei value_tab
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_SPOOL' " Name des Dynpro-Feldes für die automatische Werterückgabe
value_org = 'S' " Werteübergabe: C: zellenweise, S: strukturiert
window_title = 'Auswahl'
TABLES
value_tab = it_spool " Übergabe-Tabelle mit Werten für die Anzeige und Auswahl
return_tab = it_return " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
IF lines( it_return ) > 0.
MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
ENDIF.
ENDIF.
START-OF-SELECTION.
SELECT SINGLE rqclient, rqo1name
INTO @DATA(lv_tsp01_sel)
FROM tsp01
WHERE rqident = @p_spool.
IF sy-subrc = 0.
* Dummys für Aufruf von RSPO_RETURN_SPOOLJOB
DATA: it_otf TYPE STANDARD TABLE OF soli.
DATA: it_pdf TYPE STANDARD TABLE OF tline.
* Beispiel: Spooljob als iTabs holen
CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'
EXPORTING
rqident = p_spool
desired_type = 'RAW' " RAW, ALI, OTF, PDF
TABLES
buffer = it_otf
buffer_pdf = it_pdf
EXCEPTIONS
no_such_job = 1
job_contains_no_data = 2
selection_empty = 3
no_permission = 4
can_not_access = 5
read_error = 6
type_no_match = 7
OTHERS = 8.
IF sy-subrc <> 0.
WRITE: 'Spoolauftrag nicht vorhanden: ', sy-subrc.
ELSE.
SELECT SINGLE rqdoctype FROM tsp01 INTO @DATA(lv_objtype) WHERE rqident = @p_spool.
IF sy-subrc <> 0.
WRITE: 'Fehler beim Lesen des Doctypes.', sy-subrc.
ELSE.
DATA: lv_numbytes TYPE i.
DATA: lv_pdfspoolid LIKE tsp01-rqident.
DATA: lv_jobname TYPE tbtcjob-jobname.
DATA: lv_jobcount TYPE tbtcjob-jobcount.
DATA: lv_xstring_pdf TYPE xstring.
* Konvertierung anhand des Typs vornehmen
* OTF, SMART
CASE lv_objtype.
WHEN 'OTF' OR 'OTFHPL2' OR 'SMART'.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = p_spool
no_dialog = abap_true
pdf_destination = 'X' " xstring
no_background = abap_false
IMPORTING
pdf_bytecount = lv_numbytes
pdf_spoolid = lv_pdfspoolid
btc_jobname = lv_jobname
btc_jobcount = lv_jobcount
bin_file = lv_xstring_pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 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.
IF sy-subrc <> 0.
WRITE: / 'Fehler bei der OTF->PDF Konvertierung:', sy-subrc.
ELSE.
ENDIF.
* ALI
WHEN 'LIST' OR 'TEXT'.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = p_spool
no_dialog = abap_true
pdf_destination = 'X' " xstring
no_background = abap_false
IMPORTING
pdf_bytecount = lv_numbytes
pdf_spoolid = lv_pdfspoolid
btc_jobname = lv_jobname
btc_jobcount = lv_jobcount
bin_file = lv_xstring_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.
IF sy-subrc <> 0.
WRITE: / 'Fehler bei der TEXT->PDF Konvertierung: ', sy-subrc.
ELSE.
ENDIF.
WHEN 'ADSP'.
WRITE: / 'Adobe Forms derzeit nicht implementiert.'.
WHEN OTHERS.
WRITE: / 'Verarbeitungsschritt derzeit nicht implementiert:', lv_objtype.
ENDCASE.
* wenn erfolgreich -> PDF speichern
IF lv_numbytes > 0 AND xstrlen( lv_xstring_pdf ) > 0.
DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
TRY.
* SaveDialog
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_file_name = |{ p_spool }|
default_extension = 'pdf'
file_filter = '(*.pdf)|*.pdf|'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_action ).
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* xstring -> solix
DATA(it_raw_data) = cl_bcs_convert=>xstring_to_solix( lv_xstring_pdf ).
* PDF lokal speichern
cl_gui_frontend_services=>gui_download( EXPORTING
filename = lv_fullpath
filetype = 'BIN'
bin_filesize = lv_numbytes
CHANGING
data_tab = it_raw_data ).
* Browserfenster erzeugen
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* PDF im ABAP-Fenster anzeigen
o_html->show_url( url = CONV skwf_url( lv_fullpath )
in_place = abap_true ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
WRITE: / |Datei erfolgreich unter { lv_fullpath } gespeichert.|.
ENDIF.
CATCH cx_root INTO DATA(e_text). " Oberklasse für Exceptions abfangen und Kurztext übergeben
WRITE: / e_text->get_text( ).
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
ELSE.
WRITE: / |Spoolauftrag { p_spool } nicht vorhanden.|.
ENDIF.