* 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.
Kategorien
-
Neueste Beiträge
- [ABAP] Verwendung von Common Table Expressions (CTE)
- [ABAP] Leistungsverzeichnis lesen (MS_READ_SERVICES_FOR_BAPI)
- [ABAP] SAPConnect: Kommunikationsknoten, Routing und Parameter auslesen
- [SAP] Business Document Service (BDS)
- [SAP] Generic Object Services (GOS)
- [SAP] MM-Berechtigungsobjekte
- [SAP] Steuerkennzeichen
- [ABAP] Prüfen, ob GUI UTF-8 unterstützt
- [ABAP] Fiori: Technische Kataloge lesen
- [ABAP] Fiori: Details zu techn. Katalogen lesen