SAP ABAP 直接把内表转换成PDF格式(smartform的打印函数输出OTF格式数据)
直接上代码:
REPORT zcycle055.DATA: lt_tab TYPE TABLE OF zpps001.
DATA: ls_tab TYPE zpps001.ls_tab-werks = '1001'.
ls_tab-gamng = '150.00'.
ls_tab-gstrp = '20201202'.
ls_tab-aufnr = '000010000246'.
ls_tab-auart = '标准生产'.
ls_tab-gltrp = '20201205'.
ls_tab-matnr = '04-r02a000-00005'.
ls_tab-maktx = 'Cycle is handsome!'.
ls_tab-ernam = 'lf002'.
ls_tab-erdat = '20201202'.
ls_tab-zcwb = 'MO20120003'.
ls_tab-zdddw = '盒'.
ls_tab-ftrmi = '20201210'.
ls_tab-zzczgsmc = 'Cycle有限责任公司'.APPEND ls_tab TO lt_tab.
CLEAR ls_tab.PERFORM export_pdf.FORM export_pdf.DATA:zsmart_name TYPE rs38l_fnam.CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'EXPORTINGformname = 'ZPP001'IMPORTINGfm_name = zsmart_nameEXCEPTIONSno_form = 1no_function_module = 2OTHERS = 3.DATA: w_ctrlop TYPE ssfctrlop, "Smart Forms: 控制结构 "W_CONTROLw_compop TYPE ssfcompop, "SAP Smart Forms: 智能写作器 (传输) 选项"W_OUTPUT.w_return TYPE ssfcrescl. "Smart Forms: 表格打印结束时返回值DATA: len TYPE i,w_filesize TYPE i,g_pdf_xstring TYPE xstring,l_lines TYPE TABLE OF tline WITH HEADER LINE.DATA doctab TYPE TABLE OF docs WITH HEADER LINE.DATA itab LIKE tline OCCURS 0 WITH HEADER LINE.DATA: file_name TYPE string,fullpath TYPE string,path TYPE string,p_sefile LIKE rlgrap-filename VALUE 'D:\'. "'/usr/sap/tmp/'.w_ctrlop-getotf = 'X'."OTF 表的返回w_ctrlop-no_dialog = 'X'."关闭打印对话框"w_ctrlop-no_open = 'X'."no dialog box"w_ctrlop-no_close = 'X'."no*&W_COMPOP-TDNOPRINT = 'X'.w_compop-tdnoprev = 'X'."没有打印预览"W_COMPOP用来设置打印参数弹出对话框中的值,下面这几个参数不必要
* W_COMPOP-TDNEWID = 'X'. "New Spoolw_compop-tdimmed = 'X'.w_compop-tddelete = ''. "Delete Spool After Printw_compop-tdfinal = 'X'.w_compop-tdiexit = 'X'. "Exit after printing in print previeww_compop-tddest = 'lp01'. "设备名称w_compop-xdf2outdev = 'lp01'.w_compop-tdarmod = '1'.w_compop-tdnoprev = 'X'. "隐藏报表预览功能,默认为空*&smartforms打印 ,将打印的值输入到W_RETURN-OTFDATA[]中CALL FUNCTION zsmart_nameEXPORTINGcontrol_parameters = w_ctrlopoutput_options = w_compop
* totalpages = totalpages
* zbukrs = p_bukrs
* zcb = cb"gth_header = gth_alv_selIMPORTINGjob_output_info = w_returnTABLESt_item = lt_tab "传所选行项目明细内表 传到sfEXCEPTIONSformatting_error = 1internal_error = 2send_error = 3user_canceled = 4OTHERS = 5."CONVERT_OTF函数取不到lines的返回值
"但是可以直接获取到PDF数据的XSTRING数据,可以用于后台直接OPEN DATASET 生成文件CALL FUNCTION 'CONVERT_OTF'EXPORTINGformat = 'PDF'IMPORTINGbin_filesize = lenbin_file = g_pdf_xstringTABLESotf = w_return-otfdata[]lines = itabEXCEPTIONSerr_max_linewidth = 1err_format = 2err_conv_not_possible = 3err_bad_otf = 4OTHERS = 5."后台OPEN DATASET 直接生成PDF文件CONCATENATE p_sefile sy-uname '-' sy-uzeit '.pdf' INTO file_name. "addrssOPEN DATASET file_name FOR OUTPUT IN BINARY MODE." MESSAGE L_MESSAGE_DB.IF sy-subrc EQ 0.TRANSFER g_pdf_xstring TO file_name.CLOSE DATASET file_name.ELSE.MESSAGE 'OPEN ERROR!!' TYPE 'E'.STOP.ENDIF."CONVERT_OTF_2_PDF 可以生成PDF格式的内表CALL FUNCTION 'CONVERT_OTF_2_PDF' "转换otf数据为二进制PDF文件,可以用于前台直接下载PDF文件
* EXPORTING
* use_otf_mc_cmd = 'X'
* archive_index = archive_indexIMPORTINGbin_filesize = lenTABLESotf = w_return-otfdata[]doctab_archive = doctablines = l_lines[]EXCEPTIONSerr_conv_not_possible = 1err_otf_mc_noendmarker = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF."前台下载PDF文件CONCATENATE 'D:\' sy-uname '-' sy-uzeit ' FFF.pdf' INTO file_name."定义文件名"这一段不屏蔽, 在打印的时候会有显示选择路径的对话框,屏蔽则直接保存在上面的文件名"file_name 指定的路径CALL METHOD cl_gui_frontend_services=>file_save_dialog "保存文件窗口(选择路径)EXPORTINGdefault_extension = 'PDF'file_filter = '*.PDF'default_file_name = file_nameCHANGINGfilename = file_namepath = pathfullpath = fullpath
* user_action = uaEXCEPTIONScntl_error = 1error_no_gui = 2not_supported_by_gui = 3OTHERS = 4.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.CALL FUNCTION 'GUI_DOWNLOAD' "保存文件在本地EXPORTINGbin_filesize = lenfilename = file_namefiletype = 'BIN'IMPORTINGfilelength = w_filesizeTABLESdata_tab = l_lines[]EXCEPTIONSfile_write_error = 1no_batch = 2gui_refuse_filetransfer = 3invalid_type = 4no_authority = 5unknown_error = 6header_not_allowed = 7separator_not_allowed = 8filesize_not_allowed = 9header_too_long = 10dp_error_create = 11dp_error_send = 12dp_error_write = 13unknown_dp_error = 14access_denied = 15dp_out_of_memory = 16disk_full = 17dp_timeout = 18file_not_found = 19dataprovider_exception = 20control_flush_error = 21OTHERS = 22.IF sy-subrc <> 0.MESSAGE 'File not downloaded' TYPE 'I' .ENDIF.ENDIF.ENDFORM. "export_pdf
效果:
直接把文件下载到桌面

打开文件

更多细节可以参考大佬的文章:https://www.cnblogs.com/buduzhiren/p/10754617.html
相关文章:
SAP ABAP 直接把内表转换成PDF格式(smartform的打印函数输出OTF格式数据)
直接上代码: REPORT zcycle055.DATA: lt_tab TYPE TABLE OF zpps001. DATA: ls_tab TYPE zpps001.ls_tab-werks 1001. ls_tab-gamng 150.00. ls_tab-gstrp 20201202. ls_tab-aufnr 000010000246. ls_tab-auart 标准生产. ls_tab-gltrp 20201205. ls_tab-matn…...
侯捷 C++ part2 兼谈对象模型笔记——7 reference、const、new/delete
7 reference、const、new/delete 7.1 reference x 是整数,占4字节;p 是指针占4字节(32位);r 代表x,那么r也是整数,占4字节 int x 0; int* p &x; // 地址和指针是互通的 int& r x;…...
C++学习笔记总结练习:primer 学习日志
文章目录 针对自己的引言学习内容c语言基础知识1.为什么要声明变量2.cout ,cin3.c 不容许一个函数定义嵌套到另一个函数的定义中。4.编译指令using5.c基本类型长度6.在定义常量时尽可能使用const 关键字而不用#define9.前缀递增符与后缀递增符的区别10.c中的cctype库11.c 中的s…...
发布一个开源的新闻api(整理后就开源)
目录 说明: 基础说明 其他说明: 通用接口: 登录: 注册: 更改密码(需要token) 更换头像(需要token) 获取用户列表(需要token): 上传文件(5000端口): 获取文件(5000端口)源码文件,db文件均不能获取: 验证token(需要token): 获取系统时间: 文件…...
3d max省时插件CG MAGIC功能中的材质参数可一键优化!
渲染的最终结果就是为了让渲染效果更加真实的体现。 对于一些操作上,可能还是费些时间,VRay可以说是在给材质做加法的路上越走越远,透明度、凹凸、反射等等参数细节越做越多。 对于材质参数调节的重要性大家都心里有数的。 VRay材质系统的每…...
什么是变量提升(hoisting)?它在JavaScript中是如何工作的?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量提升(Hoisting)⭐ 变量提升的示例:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…...
.git内存清理方式
查看前15个大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk {print$1})"删除文件夹(public/housimg文件夹目录) git filter-branch --tree-filter rm -rf publ…...
i.MX6ULL开发板无法进入NFS挂载文件系统的解决办法
问题 使用NFS网络挂载文件系统后卡住无法进入系统。 解决办法 此处不详细讲述NFS安装流程 查看板卡挂载在/home/etc/rc.init下的自启动程序 进入到../../home/etc目录下,查看rc.init文件,首先从第一行排查,查看/home/etc/netcfg文件代码内容&…...
七夕特辑——3D爱心(可监听鼠标移动)
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄ÿ…...
C++函数模板和类模板
C另一种编程思想称为泛型编程,主要利用的技术是模板 C提供两种模板机制:函数模板和类模板 C提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类, 其类内部的类型和函数的形参类型不具体指定, 用…...
【Unity】编辑器下查找制定文件下的所有特定资源
需求上很简单,就是在编辑器下,找到某个制定文件下的所有特定资源(UnityEngine.Object)。Unity 没有提供专门的 API,我一开始想在网上搜索代码,发现没有现成可以直接用的。 功能实现本身并不复杂,…...
分布式唯一ID实战
目录 一、UUID二、数据库方式1、数据库生成之简单方式2、数据库生成 - 多台机器和设置步长,解决性能问题3、Leaf-segment 方案实现4、双 buffer 优化5、Leaf高可用容灾 三、基于Redis实现分布式ID四、雪花算法1、雪花算法介绍2、 雪花算法生产环境架构:3…...
el-element日期时间组件限制可选时间范围
<el-date-pickerv-model"formData.meetingTime"type"datetime"value-format"yyyy-MM-dd HH:mm:ss"style"width: 100%"placeholder"请选择日期"clearable:picker-options"pickerOptions"></el-date-picke…...
【李沐】3.3线性回归的简洁实现
1、生成数据集 import numpy as np import torch from torch.utils import data from d2l import torch as d2l true_w torch.tensor([2, -3.4]) # 定义真实权重 true_w,其中 [2, -3.4] 表示两个特征的权重值 true_b 4.2 # 定义真实偏差 true_b,表示…...
Ghost-free High Dynamic Range Imaging withContext-aware Transformer
Abstract 高动态范围(HDR)去鬼算法旨在生成具有真实感细节的无鬼HDR图像。 受感受野局部性的限制,现有的基于CNN的方法在大运动和严重饱和度的情况下容易产生重影伪影和强度畸变。 本文提出了一种新的上下文感知视觉转换器(CA-VIT)用于高动态…...
过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!
[原文连接:来自给点知识](过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!) 再唱不出那样的歌曲 听到都会红着脸躲避 虽然会经常忘了我依然爱着你 …...
Cadence+硬件每日学习十个知识点(38)23.8.18 (Cadence的使用,界面介绍)
文章目录 1.Cadence有共享数据库的途径2.Cadence启动3.Cadence界面菜单简介(file、edit、view、place、options)4.Cadence界面的图标简介5.我的下载资源有三本书 1.Cadence有共享数据库的途径 答: AD缺少共享数据库的途径,目前我…...
React Native Expo项目,复制文本到剪切板
装包: npx expo install expo-clipboard import * as Clipboard from expo-clipboardconst handleCopy async (text) > {await Clipboard.setStringAsync(text)Toast.show(复制成功, {duration: 3000,position: Toast.positions.CENTER,})} 参考链接:…...
React源码解析18(5)------ 实现函数组件【修改beginWork和completeWork】
摘要 经过之前的几篇文章,我们实现了基本的jsx,在页面渲染的过程。但是如果是通过函数组件写出来的组件,还是不能渲染到页面上的。 所以这一篇,主要是对之前写得方法进行修改,从而能够显示函数组件,所以现…...
vscode ssh 远程 gdb 调试
一、点运行与调试,生成launch.json 文件 二、点添加配置,选择GDB 三、修改启动程序路径...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
