SMARTFORMS转换成PDF,下载到本地

"打印相关参数
  DATA: l_output_info TYPE ssfcrescl.
  DATA: ctrl_param TYPE ssfctrlop,
        out_option TYPE ssfcompop.  
"调用打印函数
  DATA: gwa_result     TYPE ssfcrescl,
        gwa_output     TYPE ssfcompop,
        g_filename     TYPE string,
        g_bin_filesize TYPE i,
        git_lines      TYPE STANDARD TABLE OF tline,
        gwa_control    TYPE ssfctrlop.

  DATA pdf_content   TYPE solix_tab.
  DATA pdf_xstring   TYPE xstring.
  DATA pdf_size      TYPE so_obj_len.
  DATA bin_size TYPE i.
  DATA: lt_lines TYPE TABLE OF tline,
        ls_line  TYPE tline.
"smartforms
    ctrl_param-no_dialog = 'X'.             "必要
    ctrl_param-getotf    = 'X'.             "必要
    ctrl_param-preview   = 'X'.

    out_option-tddest = 'LP01'. "设备名称
    out_option-tdnewid   = 'X'.

    out_option-tdimmed = 'X'.
    out_option-tddelete = 'X'.
    out_option-tdlifetime = 'X'.
    out_option-tdprinter = 'CNSAPWIN'.
    out_option-xsfformat = 'X'.

    CALL FUNCTION lf_fm_name
      EXPORTING
        control_parameters = ctrl_param
        output_options     = out_option
      IMPORTING
        job_output_info    = gwa_result
      EXCEPTIONS
        formatting_error   = 1    
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        format                = 'PDF' "ASCII
*       max_linewidth         = 132
      IMPORTING
        bin_filesize          = bin_size             "字节数
        bin_file              = pdf_xstring          "十六进制
      TABLES
        otf                   = gwa_result-otfdata
        lines                 = lt_lines
      EXCEPTIONS
        err_max_linewidth     = 1
        err_format            = 2
        err_conv_not_possible = 3
        err_bad_otf           = 4
        OTHERS                = 5.

    DATA: lv_filename  TYPE string,
          lv_path      TYPE string,
          lv_full_path TYPE string,
          lv_time      TYPE sy-datum.
    lv_filename =  '&1_&2.pdf'.
    lv_time = sy-datum.
    REPLACE '&1' WITH pono INTO lv_filename.
    REPLACE '&2' WITH lv_time INTO lv_filename.
    CONDENSE lv_filename NO-GAPS.

*    CALL METHOD cl_gui_frontend_services=>get_desktop_directory
*      CHANGING
*        desktop_directory    = lv_path
*      EXCEPTIONS
*        cntl_error           = 1
*        error_no_gui         = 2
*        not_supported_by_gui = 3
*        OTHERS               = 4.
*
*    IF sy-subrc = 0.
*      CALL METHOD cl_gui_cfw=>flush .
*      " 用户选择名称、路径
*      CALL METHOD cl_gui_frontend_services=>file_save_dialog
*        EXPORTING
**         window_title         = '指定保存文件名'
**         default_extension    = 'XLSX'
*          default_file_name    = lv_filename
**         file_filter          = filetype
*          initial_directory    = lv_path
*          prompt_on_overwrite  = 'X'
*        CHANGING
*          filename             = lv_filename
*          path                 = lv_path
*          fullpath             = lv_full_path
**         USER_ACTION          =
**         FILE_ENCODING        =
*        EXCEPTIONS
*          cntl_error           = 1
*          error_no_gui         = 2
*          not_supported_by_gui = 3
*          OTHERS               = 4.
*
*      IF sy-subrc <> 0.
*        MESSAGE | 获取文件路径失败!| TYPE 'S' DISPLAY LIKE 'E'.
*      ENDIF.
*    ELSE.
*      MESSAGE | 用户取消操作!| TYPE 'S' DISPLAY LIKE 'E'.
*    ENDIF.

   "CONVERT_OTF函数输出表lt_lines无数据(笔者也不知道什么原因)
   "故用cl_document_bcs=>xstring_to_solix将十六进制转换成二进制

    pdf_content = cl_document_bcs=>xstring_to_solix( pdf_xstring ).    

    lv_full_path = 'C:\SAPPDF\'.
    CONCATENATE lv_full_path lv_filename INTO lv_full_path.

    CALL FUNCTION 'GUI_DOWNLOAD'
          EXPORTING
            bin_filesize            = bin_size
            filename                = lv_full_path
            filetype                = 'BIN'
          TABLES
            data_tab                = pdf_content "lt_lines
          EXCEPTIONS
            file_write_error        = 1
            no_batch                = 2
            gui_refuse_filetransfer = 3
            invalid_type            = 4
            no_authority            = 5
            unknown_error           = 6
            header_not_allowed      = 7
            separator_not_allowed   = 8
            filesize_not_allowed    = 9
            header_too_long         = 10
            dp_error_create         = 11
            dp_error_send           = 12
            dp_error_write          = 13
            unknown_dp_error        = 14
            access_denied           = 15
            dp_out_of_memory        = 16
            disk_full               = 17
            dp_timeout              = 18
            file_not_found          = 19
            dataprovider_exception  = 20
            control_flush_error     = 21
            OTHERS                  = 22.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值