SAP GUI界面展示PDF文件

该文章描述了如何在SAPABAP环境中将本地或FTP服务器上的PDF文件转换为二进制数据流,并在GUI中通过HTML控件显示。主要涉及文件上传、FTP服务器交互以及使用GUI函数和方法来处理PDF内容。
摘要由CSDN通过智能技术生成

思路:将PDF文件转为URL 跳转到网页显示

本地PDF文件转换为二进制数据流

*&---------------------------------------------------------------------*
*&      Form  PDF_UPLOAD
*&---------------------------------------------------------------------*
*       上传PDF文件
*----------------------------------------------------------------------*
FORM pdf_upload CHANGING p_xstring TYPE xstring.
  DATA: lt_files TYPE filetable,
        l_file   TYPE string,
        l_rc     TYPE i.
  DATA: lt_pdf_tab TYPE TABLE OF rspolpbi,
        ls_line    TYPE rspolpbi,
        l_filesize TYPE i,
        l_rest     TYPE i,
        l_chunk    TYPE i.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
      window_title = '选择打开文件'
      file_filter  = 'PDF (*.pdf)|*.pdf|'
    CHANGING
      file_table   = lt_files
      rc           = l_rc
    EXCEPTIONS
      OTHERS       = 1.

  READ TABLE lt_files INTO l_file INDEX 1.
  CHECK sy-subrc = 0.

  CALL FUNCTION 'GUI_UPLOAD'
    EXPORTING
      filename   = l_file
      filetype   = 'BIN'
    IMPORTING
      filelength = l_filesize
    TABLES
      data_tab   = lt_pdf_tab.

  l_rest = l_filesize.
  LOOP AT lt_pdf_tab INTO ls_line.
    IF l_rest < 128.
      l_chunk = l_rest.
    ELSE.
      l_chunk = 128.
    ENDIF.

    CONCATENATE p_xstring ls_line-data(l_chunk) INTO p_xstring IN BYTE MODE.
    l_rest = l_rest - l_chunk.
  ENDLOOP.
ENDFORM.                    " PDF_UPLOAD

获取FTP服务器PDF文件,转换为二进制数据流

DATA blob TYPE btc_t_xmlxtab.
*连接字符串定义本地文件具体路径
  CONCATENATE filepath filename INTO filepath.
  DATA lv_filepath TYPE rlgrap-filename.
  lv_filepath = filepath.

*将FTP文本类型文件数据读取到内表
*若所读FTP文件为非文本文件(*.txt,*.dat)时将出现错误
  CALL FUNCTION 'FTP_SERVER_TO_R3'
    EXPORTING
      handle        = thandle
      fname         = filename
    IMPORTING
      blob_length   = lv_blength
    TABLES
      blob          = blob
    EXCEPTIONS
      tcpip_error   = 1
      command_error = 2
      data_error    = 3
      OTHERS        = 4.

*读取文件失败时退出程序并回执错误
  IF sy-subrc <> 0.
    MESSAGE e001(00) WITH 'Read FTP File FAIL!'.
    EXIT.
  ENDIF.

示例代码

REPORT  ZSAP_PDF_VIEWER.
DATA: LT_PDF TYPE TABLE OF TLINE,
             LS_PDF LIKE LINE OF LT_PDF,
             LV_URL TYPE CHAR255,
            PDF_FSIZE TYPE  I,
            LV_CONTENT  TYPE XSTRING,
            LT_DATA TYPE STANDARD TABLE OF X255.
DATA : L_JOB_OUTPUT_INFO TYPE SSFCRESCL.
DATA : LS_CONTROL_PARAM  TYPE SSFCTRLOP.
DATA : G_HTML_CONTROL   TYPE REF TO CL_GUI_HTML_VIEWER.
DATA : LO_DOCKING_CONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER.
DATA : P_VBELN TYPE  VBELN_VL.
FIELD-SYMBOLS <FS_X> TYPE X.
INITIALIZATION.
LS_CONTROL_PARAM-GETOTF = 'X'.
LS_CONTROL_PARAM-NO_DIALOG = 'X'.
START-OF-SELECTION.
  CALL FUNCTION '/1BCDWB/SF00000034'
 EXPORTING
*    ARCHIVE_INDEX              =
*   ARCHIVE_INDEX_TAB          =
*   ARCHIVE_PARAMETERS         =
     CONTROL_PARAMETERS         = LS_CONTROL_PARAM
     P_VBELN                    = P_VBELN
*   MAIL_APPL_OBJ              =
*   MAIL_RECIPIENT             =
*   MAIL_SENDER                =
*   OUTPUT_OPTIONS             =
*   USER_SETTINGS              = 'X'
 IMPORTING
*      DOCUMENT_OUTPUT_INFO  = L_DOCUMENT_OUTPUT_INFO
       JOB_OUTPUT_INFO       = L_JOB_OUTPUT_INFO
*      JOB_OUTPUT_OPTIONS    = L_JOB OUTPUT_OPTIONS{_}
 EXCEPTIONS
    FORMATTING_ERROR           = 1
    INTERNAL_ERROR             = 2
    SEND_ERROR                 = 3
    USER_CANCELED              = 4
    OTHERS                     = 5
           .
  IF SY-SUBRC  <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      FORMAT                = 'PDF'
    IMPORTING
      BIN_FILESIZE          = PDF_FSIZE
    TABLES
      OTF                   = L_JOB_OUTPUT_INFO-OTFDATA
      LINES                 = LT_PDF
    EXCEPTIONS
      ERR_MAX_LINEWIDTH     = 1
      ERR_FORMAT            = 2
      ERR_CONV_NOT_POSSIBLE = 3
      OTHERS                = 4.
* convert pdf to xstring string
  LOOP AT LT_PDF INTO LS_PDF.
    ASSIGN LS_PDF TO <FS_X> CASTING.
    CONCATENATE LV_CONTENT <FS_X> INTO LV_CONTENT IN BYTE MODE.
  ENDLOOP.
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS '100'.
*  SET TITLEBAR 'xxx'.
CREATE OBJECT LO_DOCKING_CONTAINER
  EXPORTING
    REPID     = SY-REPID
    DYNNR     = '100'"SY-DYNNR
    SIDE      = LO_DOCKING_CONTAINER->DOCK_AT_LEFT
    EXTENSION = 1200.
CREATE OBJECT G_HTML_CONTROL
  EXPORTING
    PARENT = LO_DOCKING_CONTAINER.
* Convert xstring to binary table to pass to the LOAD_DATA method
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      BUFFER     = LV_CONTENT
    TABLES
      BINARY_TAB = LT_DATA.
* Load the HTML
  CALL METHOD G_HTML_CONTROL->LOAD_DATA(
     EXPORTING
       TYPE         = 'application'
       SUBTYPE      = 'pdf'
     IMPORTING
       ASSIGNED_URL         = LV_URL
     CHANGING
       DATA_TABLE           = LT_DATA
     EXCEPTIONS
       DP_INVALID_PARAMETER = 1
       DP_ERROR_GENERAL     = 2
       CNTL_ERROR           = 3
       OTHERS               = 4 ).
* Show it
  CALL METHOD G_HTML_CONTROL->SHOW_URL( URL = LV_URL
    IN_PLACE = 'X' ).
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  DATA ok_code LIKE sy-ucomm.
  MOVE sy-ucomm TO ok_code.
  CASE ok_code.
    WHEN 'BACK' OR 'EXIT'.
      CALL METHOD LO_DOCKING_CONTAINER->free.
*      CALL METHOD g_html_control->free.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT  

链接: PDF files in SAP - ABAP Development - Community Wikihttps://wiki.scn.sap.com/wiki/display/ABAP/PDF+files+in+SAP#PDFfilesinSAP-HowtodisplayaPDFinSAPGUIforWindows?

Read any OTF Data in Adobe Reader - ABAP Development - Community Wiki (sap.com)https://wiki.scn.sap.com/wiki/display/ABAP/Read+any+OTF+Data+in+Adobe+Reader?original_fqdn=wiki.sdn.sap.com

注意:对于本地PDF文件和FTP获取的PDF文件 只需将文件转化为二进制数据流 调用>LOAD_DATA即可

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖子写代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值