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 三、修改启动程序路径...
Polars 2.0清洗故障率下降92%的关键:schema-on-read预检 + 自定义error-handling策略(金融级数据治理标准)
第一章:Polars 2.0清洗故障率下降92%的关键洞察Polars 2.0 通过重构执行引擎与引入零拷贝数据验证机制,显著降低了ETL清洗阶段的运行时异常。核心改进在于将传统基于Python对象的列类型推断,替换为编译期静态Schema校验,并在LazyF…...
从仿真到实物:音频功率放大器PCB设计前的Proteus验证全流程
从仿真到实物:音频功率放大器PCB设计前的Proteus验证全流程 在硬件开发领域,音频功率放大器的设计往往需要经历多次迭代才能达到理想性能。传统开发流程中,工程师们常常需要反复制作PCB原型并进行实测,这不仅耗时耗力,…...
从‘大胖老师’到‘小学霸’:用动态蒸馏拯救被剪枝‘剪残’的小模型
从‘大胖老师’到‘小学霸’:动态蒸馏如何拯救剪枝后的模型性能 想象一下,你有一位知识渊博的"大胖老师"——一个经过精心训练的大型神经网络模型。为了让它更轻便、更高效,你决定给它"减肥"(结构化剪枝&…...
告别卡顿与路径混乱:手把手教你配置ArcMap 10.x的个性化工作环境
告别卡顿与路径混乱:手把手教你配置ArcMap 10.x的个性化工作环境 ArcMap作为GIS领域的经典工具,其功能强大但默认配置往往无法满足专业用户的效率需求。许多GIS从业者都经历过这样的困扰:软件启动缓慢、数据路径杂乱无章、常用工具隐藏过深。…...
SDMatte处理动物与宠物图像效果展示:毛发级精度的自然抠图
SDMatte处理动物与宠物图像效果展示:毛发级精度的自然抠图 1. 为什么宠物抠图这么难 给宠物照片抠图可能是设计师最头疼的任务之一。想象一下,一只金毛犬站在浅色地毯上,毛发边缘几乎和背景融为一体;或者一只黑猫蜷缩在深色沙发…...
ChatGLM-6B生产级部署:Supervisor配置文件结构与自定义参数说明
ChatGLM-6B生产级部署:Supervisor配置文件结构与自定义参数说明 1. 引言 在生产环境中部署AI服务时,稳定性是首要考虑的因素。ChatGLM-6B作为一款优秀的开源对话模型,如何确保其7x24小时稳定运行成为了关键问题。本镜像采用了Supervisor进程…...
一天一个开源项目(第56篇):人人都能用英语 - AI 时代的外语学习开源项目
引言 “其实一个字就够了:用。” 这是「一天一个开源项目」系列的第 56 篇文章。今天介绍的项目是 人人都能用英语(GitHub)。 学英语的核心是什么?李笑来在 2010 年的著作里用一个字概括:用。如今,这个经典…...
RealityCapture从点云到精模:手把手教你用内置工具修模型、减面、展UV
RealityCapture模型精修实战:从点云到生产级资产的完整工作流 当你完成照片对齐和初步重建后,摆在面前的往往是一个"毛坯房"般的3D模型——面数爆炸、孔洞遍布、UV混乱。这才是真正挑战的开始。作为从业7年的三维重建专家,我将分享…...
DAMOYOLO-S在复杂遮挡下的实例分割效果展示:精准勾勒物体轮廓
DAMOYOLO-S在复杂遮挡下的实例分割效果展示:精准勾勒物体轮廓 最近在测试各种目标检测和分割模型时,我遇到了一个挺头疼的问题:当画面里的物体挤在一起、相互遮挡,或者只露出一小部分时,很多模型就“犯迷糊”了。检测…...
FedProto:跨异构客户端的原型联邦学习实践指南
1. 从零理解FedProto的核心思想 第一次听说FedProto时,我正被一个医疗影像分析项目搞得焦头烂额。五家医院的数据就像五个方言区——同样的病症在CT影像上呈现的特征分布天差地别。传统联邦学习就像让这些医院用各自的方言写报告,再强行翻译成标准语&…...
