ABAP PDF预览

news2025/3/19 18:32:08

画个屏幕
在这里插入图片描述
PDF JPG TXT都可以参考预览,把二进制流传递给标准函数就行

*&---------------------------------------------------------------------*
*& Report YDEMO2
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ydemo2.

DATA: gr_viewer TYPE REF TO cl_gui_html_viewer,
      gr_ctn    TYPE REF TO cl_gui_custom_container.


CALL SCREEN '9001' STARTING AT 5 5 ENDING  AT  120 30 .

*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9001 OUTPUT.

  DATA: lt_solix TYPE solix_tab,
        lv_size  TYPE i,
        lv_url   TYPE c LENGTH 255.

  SET PF-STATUS 'STATUS_9001'.

  " 初始化容器对象
  gr_ctn    = NEW #( container_name = 'CC_VIEWER' ).
  gr_viewer = NEW #( parent = gr_ctn ).

  " 读取数据流
  PERFORM frm_download_data CHANGING lt_solix lv_size.

  gr_viewer->load_data(
    EXPORTING
      size = lv_size
      type = 'APPLICATION'
      subtype = 'TXT'
*      subtype = 'JPG'
*      subtype = 'PDF'
    IMPORTING
      assigned_url = lv_url
    CHANGING
      data_table   = lt_solix
   ).

  gr_viewer->show_data( url = lv_url ).

ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.

  CASE sy-ucomm.
    WHEN 'ZEXIT'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.

*&---------------------------------------------------------------------*
*& Form frm_download_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LT_SOLIX
*&---------------------------------------------------------------------*
FORM frm_download_data  CHANGING pt_solix TYPE solix_tab
                                 pv_size  TYPE i.

  DATA: lv_error     TYPE c VALUE 'X',
        lv_name      TYPE string,
        lv_path      TYPE string,
        lv_fullpath  TYPE string,
        lv_extension TYPE string,
        lv_filename  TYPE string,
        lt_result    TYPE match_result_tab,
        ls_result    TYPE match_result.

  DATA: lt_solix         TYPE solix_tab,
        ls_solix         TYPE solix,
        lv_file_length   TYPE i,
        lv_content       TYPE xstring,
        lv_max_length    TYPE i VALUE 255,
        lv_actual_length TYPE i.

  FIELD-SYMBOLS: <fs_server_path> TYPE string.
*  FIELD-SYMBOLS: <fs_server_path> TYPE any.

  lv_name = '/mnt/smbshare/DS4/GTS/1000000000_海关审批单20250225171352.txt'.
*  lv_name = '/mnt/smbshare/DS4/GTS/1000000000_通关单20250225171400.jpg'.
*  lv_name = '/mnt/smbshare/DS4/GTS/1000000000_报关单20250225171404.pdf'.
  ASSIGN lv_name TO <fs_server_path>.
  IF <fs_server_path> IS ASSIGNED AND <fs_server_path> IS NOT INITIAL.

    " 文件名提取
    FIND ALL OCCURRENCES OF REGEX '[^/\\]+[/\\]*$' IN <fs_server_path> RESULTS lt_result.
    IF sy-subrc = 0.
      READ TABLE lt_result INTO ls_result INDEX 1.
      lv_filename  = <fs_server_path>+ls_result-offset(ls_result-length).
      lv_extension = lv_filename.
      REPLACE ALL OCCURRENCES OF REGEX '\.\w*' IN lv_filename  WITH ''.  " 正则删除后缀,取文件名
      REPLACE ALL OCCURRENCES OF REGEX '.+\.'  IN lv_extension WITH ''.  " 正则删除文件名,取后缀

      " 选择文件保存路径
*      cl_gui_frontend_services=>file_save_dialog(
*        EXPORTING
*          default_extension = lv_extension
*          default_file_name = lv_filename
*        CHANGING
*          filename          = lv_filename
*          path              = lv_path
*          fullpath          = lv_fullpath
*        EXCEPTIONS
*          OTHERS            = 1 ).
*      IF sy-subrc <> 0 OR lv_fullpath IS INITIAL.
*        MESSAGE s028(zgts001) DISPLAY LIKE 'E'. " 未选择文件保存路径
*        RETURN.
*      ENDIF.

      " 下载文件
      OPEN DATASET <fs_server_path> FOR INPUT IN BINARY MODE.
      IF sy-subrc = 0.

        DO.
          CLEAR: ls_solix, lv_actual_length.
          READ DATASET <fs_server_path> INTO ls_solix-line MAXIMUM LENGTH lv_max_length ACTUAL LENGTH lv_actual_length.
          IF lv_actual_length IS INITIAL.
            EXIT.
          ELSE.
            APPEND ls_solix TO lt_solix.
            lv_file_length += lv_actual_length.
          ENDIF.

        ENDDO.

        CLOSE DATASET <fs_server_path>.

        " 转换二进制
        IF lt_solix IS NOT INITIAL.
*
*          " 下载本地
*          CALL FUNCTION 'GUI_DOWNLOAD'
*            EXPORTING
*              filename = lv_fullpath
*              filetype = 'BIN'
*            TABLES
*              data_tab = lt_solix.
*          IF sy-subrc = 0.
            CLEAR lv_error.
*          ENDIF.
*
        ENDIF.

      ENDIF.

    ENDIF.

  ENDIF.

  IF lv_error = 'X'.
    MESSAGE s027(zgts001) DISPLAY LIKE 'E'. " 根据屏幕路径下载服务器文件失败
    RETURN.
  ENDIF.

  pv_size  = lv_file_length.
  pt_solix = lt_solix.

ENDFORM.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络爬虫【爬虫库urllib】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库&#xff0c;无须安装&#xff0c;直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包&#xff0c;大致具备以下功能。 ● urlli…

卷积神经网络 - 卷积层

卷积神经网络一般由卷积层、汇聚层和全连接层构成&#xff0c;本文我们来学习卷积层。 卷积层&#xff08;Convolutional Layer&#xff09;是卷积神经网络&#xff08;CNN&#xff09;的核心组件&#xff0c;专门用于处理具有网格结构的数据&#xff08;如图像、音频、时间序…

玩转 Tailwind CSS:深入解析函数与指令

玩转 Tailwind CSS&#xff1a;深入解析函数与指令 如果你正在使用 Tailwind CSS&#xff0c;可能已经习惯了各种 text-center、mt-4 这样的类名&#xff0c;但你知道吗&#xff1f;Tailwind 其实还隐藏着一套 强大的函数与指令系统&#xff0c;可以让你的代码更加优雅、可维护…

Axure设计之下拉多选框制作教程C(中继器)

利用Axure制作下拉多选器组件可以极大地提升原型制作的效率和效果。以下是基于你提供的详细步骤的详细指导&#xff0c;帮助你在Axure中实现一个功能完善、高保真且可复用的下拉多选器组件。 一、案例预览 预览地址&#xff1a;https://pghy0i.axshare.com 实现效果包括&#…

Java基础语法练习42(基本绘图-基本的事件处理机制-小坦克的绘制-键盘控制坦克移动)

目录 一、图形的基本绘制 1.基本介绍&#xff1a; 2.入门代码如下&#xff1a; 3.常用图形的绘制, 示例代码如下&#xff1a; 二、坦克的绘制 三、事件处理机制 四、坦克的移动 一、图形的基本绘制 1.基本介绍&#xff1a; Component 类提供了两个和绘图相关最重要的方…

RabbitMQ 入门

RabbitMQ 入门 1RabbitMQ 介绍 RabbitMQ 是信息传输的中间者。本质上&#xff0c;他从生产者&#xff08;producers&#xff09;接收消息&#xff0c;转发这些消息给消费者&#xff08;consumers&#xff09;.换句话说&#xff0c;他能够按根据你指定的规则进行消息转发、缓冲…

yolo环境 pytorch环境配置 CUDA安装

我的成功案例&#xff1a;首先安装python 3.12.9的conda虚拟环境 &#xff08;如果不安装3.12的会报错误ModuleNotFoundError&#xff1a;没有名为“numpy._core”的模块&#xff09; 然后安装11.8cuda &#xff08;其实我是可以最高安装12.6的cuda但我实测&#xff0c;太高版…

ESP32(4)TCP通信

本章重点讲解 lwIP 的 Socket接口如何配置 TCP客户端&#xff0c;并在此基础上实现收发功能。 TCP Client 连接流程 在实现 TCP 协议之前&#xff0c;用户需要按照以下步骤配置结构体 sockaddr_in 的成员变量&#xff0c;以便建立 TCPClient 连接&#xff1a; ①&#xff1a;…

数学建模:MATLAB循环神经网络

一、简述 1.循环神经网络 循环神经网络&#xff08;RNN&#xff09;是一种用于处理序列数据的神经网络。不同于传统的前馈神经网络&#xff0c;RNN在隐藏层中加入了自反馈连接&#xff0c;使得网络能够对序列中的每个元素执行相同的操作&#xff0c;同时保持一个“记忆”状态…

EagleTrader为何重申重要数据前后2分钟禁止交易?

3月12日&#xff0c;美国公布了2月份的CPI数据。 美国2月未季调CPI年率录得2.8%&#xff0c;为去年11月来新低&#xff0c;低于市场预期的2.9%。 美国2月季调后CPI月率录得0.2%&#xff0c;为去年10月来新低&#xff0c;预期值为0.3%&#xff0c;前值为0.5%。 数据公布后&#…

个人blog系统 前后端分离 前端js后端go

系统设计&#xff1a; 1.使用语言&#xff1a;前端使用vue&#xff0c;并使用axios向后端发送数据。后端使用的是go的gin框架&#xff0c;并使用grom连接数据库实现数据存储读取。 2.设计结构&#xff1a; 最终展示&#xff1a;仅展示添加模块&#xff0c;其他模块基本相似 前…

单元测试mock

一、背景 现在有A类,B类,C类&#xff0c;A类依赖B类,依赖C类&#xff0c;如果想要测试A类中的某个方法的业务逻辑。A类依赖其他类&#xff0c;则把其他类给mock&#xff0c;然后A类需要真实对象。这样就可以测试A类中的方法。 举例&#xff1a;Ticket类需要调用Flight类和Pas…

GreenKGC: A Lightweight Knowledge Graph Completion Method(论文笔记)

CCF等级&#xff1a;A 发布时间&#xff1a;2023年7月 代码位置 25年3月17日交 目录 一、简介 二、原理 1.整体 2.表示学习 3.特征修剪 4.决策学习 三、实验性能 1.主要结果 2.消融实验 四、结论和未来工作 一、简介 传统知识图谱补全方法中&#xff0c;嵌入维度…

SSM基础专项复习5——Maven私服搭建(2)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架&#xff08;1&#xff09;-CSDN博客 3、SSM基础专项复习3——Spring框架&#xff08;2&#xff09;-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具&#xff08;1&#xff…

ASP4644四通道降压稳压器的工业高效电源管理方案

ASP4644工业级型号&#xff08;ASP4644I6B&#xff09;是一款专为工业场景设计的四通道降压稳压器&#xff0c;支持-40C至85C工作温度。其核心特性包括&#xff1a; 宽输入电压范围&#xff1a;4V–14V&#xff0c;适配工业现场多变的电源环境。 高负载能力&#xff1a;单通道…

RabbitMq C++客户端的使用

1.RabbitMq介绍 RabbitMQ 是一款开源的消息队列中间件&#xff0c;基于 AMQP&#xff08;高级消息队列协议&#xff09;实现&#xff0c;支持多种编程语言和平台。以下是其核心特点和介绍&#xff1a; 核心特点 多语言支持 提供 Java、Python、C#、Go、JavaScript 等语言的客…

用通义大模型写爬虫程序,汇总各科成绩

需求&#xff1a;根据各科网址&#xff0c;输入学号、姓名查询成绩。 中间反反复复很多次&#xff0c;本文只记下重点的几次和大模型的沟通历史。 输入界面 查询界面 round0&#xff08;最初的问题&#xff09; 请在windows下&#xff0c;使用python的selenium库&#xff0…

电商项目Ts版本

文章目录 项目地址一、环境安装1.1 配置作为导入1.2 文件目录 二、路由2.1 publicRoutes 项目地址 教程作者&#xff1a;教程地址&#xff1a; 代码仓库地址&#xff1a; 所用到的框架和插件&#xff1a; dbt airflow一、环境安装 1.1 配置作为导入 vite.config.ts impor…

HarmonyOS Next中的弹出框使用

HarmonyOS Next弹出框概述及分类 弹出框是一种模态窗口&#xff0c;通常用于在保持当前上下文环境的同时&#xff0c;临时展示用户需关注的信息或待处理的操作。用户需在模态弹出框内完成相关交互任务之后&#xff0c;才能退出模态模式。弹出框可以不与任何组件绑定&#xff0…

FPGA中级项目4——DDS实现

FPGA中级项目4——DDS实现 DDS简介 DDS&#xff08;直接数字频率合成器&#xff0c;Direct Digital Frequency Synthesis&#xff09;是一种基于数字信号处理技术的频率合成方法&#xff0c;广泛应用于通信、雷达、仪器仪表等领域。在 FPGA中实现 DDS 具有灵活性高、集成度强、…