* 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