SAP ABAP 解析XML,PDF二进制BIN文件流

SAP ABAP 解析PDF二进制BIN文件流

1.解析XML CALL FUNCTION ‘SMUM_XML_PARSE’
2.BASE64解码 CALL FUNCTION ‘SCMS_BASE64_DECODE_STR’
3.将xstring转换为SAP内表 CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’

*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_download USING ls_alv TYPE ty_alv11.

 
  CLEAR xml_str.
  CONCATENATE
      c_head
      c_head_b2e
      '<requestHeader>'
        '<dtClient>' sy-datum sy-uzeit '</dtClient>'      "客户端时间"
      '</requestHeader>'
      '<xDataBody>'
           '<insId>'  gv_trnid '</insId>'
      '</xDataBody>'
      '</CMBC>'
      INTO xml_str.

  CLEAR return_xstr.
  "---获取XML数据"
  CALL FUNCTION 'Z_HTTP_BANK_GETXML'
    EXPORTING
      input    = xml_str
      urlname  = 'B2E'
    IMPORTING
      output   = return_xstr
      lv_msgtx = msgtx
      lv_msgty = msgty.

  IF msgty = 'S'.
  "---解析XML"
    CLEAR: result_xml.
    CALL FUNCTION 'SMUM_XML_PARSE'
      EXPORTING
        xml_input = return_xstr
      TABLES
        xml_table = result_xml
        return    = return.

    DATA: l_str  TYPE string,
          l_name TYPE string.

 
    READ TABLE result_xml INTO wa_xml WITH KEY cname = 'code' .
    IF sy-subrc = 0 AND wa_xml-cvalue = '0'.
      LOOP AT result_xml INTO wa_xml .

        l_char = wa_xml-cname.
        CONDENSE l_char NO-GAPS .
        TRANSLATE l_char TO UPPER CASE.
        IF l_char = 'FILENAME'."pdf名称
          l_name = wa_xml-cvalue.
        ELSEIF l_char = 'FILECONTENT'."文件  base64 "
          CONCATENATE l_str wa_xml-cvalue INTO l_str."获得PDF二进制流数据"
        ENDIF.

      ENDLOOP.

		"---解析XML并下载"
      PERFORM frm_decode_pdf USING l_str l_name.

    ELSE.
 
    ENDIF.

  ELSE.
 
    MESSAGE message TYPE 'E'.
 
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DECODE_PDF
*&---------------------------------------------------------------------*
*& text   解密pdf,并下载本地
*&---------------------------------------------------------------------*
*&      --> L_STR
*&      --> L_NAME
*&---------------------------------------------------------------------*
FORM frm_decode_pdf  USING  p_str p_name.

  DATA : b_xstr   TYPE xstring,"二进制文件解码后数据"
         bin_size TYPE i.
  DATA : path     TYPE string,
         fullpath TYPE string.
"BASE64解码"
  CALL FUNCTION 'SCMS_BASE64_DECODE_STR'
    EXPORTING
      input    = p_str  "pdf字符串
      unescape = 'X'
    IMPORTING
      output   = b_xstr "xstring
    EXCEPTIONS
      failed   = 1
      OTHERS   = 2.
  IF sy-subrc <> 0.
* implement suitable error handling here
  ENDIF.
 

  DATA:pdf_tab TYPE STANDARD TABLE OF tabl1024.
  DATA:length TYPE i.
*--&--*	"将xstring转换为SAP内表"
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = b_xstr
    IMPORTING
      output_length = length
    TABLES
      binary_tab    = pdf_tab.


*--&--*   调用文件保存对话框:
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title      = '导出pdf'
      default_file_name = p_name
      default_extension = 'PDF'
      file_filter       = '*.PDF'
    CHANGING
      filename          = p_name  "在对话框输入
      path              = path
      fullpath          = fullpath.

  CHECK fullpath IS NOT INITIAL.
*--&--*   将数据保存到本地:
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize = bin_size
      filename     = fullpath
      filetype     = 'BIN'
      codepage     = '8450' "gb2312"
      ignore_cerr  = abap_true
    TABLES
      data_tab     = pdf_tab. "type x

ENDFORM.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值