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 三、修改启动程序路径...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

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&…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...