SAP 打印自动导出PDF本地文件(自己做的例子)
smartforms导出PDF:
常用函数有;
convert_otf
convert_otfspooljob_2_pdf
convert_abapspooljob_2_pdf
CONVERT_OTF_2_PDF;
SX_OBJECT_CONVER_OTF_PDF;
HRHAP_DOC_CONVERT_SMF_TO_PDF
实例:
FORM export_pdf.
DATA:zsmart_name TYPE rs38l_fnam.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZLE_SHIP_BMEPR'
IMPORTING
fm_name = zsmart_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
DATA: w_ctrlop TYPE ssfctrlop, "Smart Forms: 控制结构 "W_CONTROL
w_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 Spool
w_compop-tdimmed = 'X'.
w_compop-tddelete = ''. "Delete Spool After Print
w_compop-tdfinal = 'X'.
w_compop-tdiexit = 'X'. "Exit after printing in print preview
w_compop-tddest = 'LP02'. "设备名称
w_compop-xdf2outdev = 'LP02'.
w_compop-tdarmod = '1'.
*&smartforms打印 ,将打印的值输入到W_RETURN-OTFDATA[]中
CALL FUNCTION zsmart_name
EXPORTING
control_parameters = w_ctrlop
output_options = w_compop
* totalpages = totalpages
* zbukrs = p_bukrs
* zcb = cb
gth_header = gth_alv_sel
IMPORTING
job_output_info = w_return
TABLES
gtd_item = gtd_item
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
*"CONVERT_OTF函数取不到lines的返回值,所以注释掉,用CONVERT_OTF_2_PDF
* CALL FUNCTION 'CONVERT_OTF'
* EXPORTING
* format = 'PDF'
* IMPORTING
* bin_filesize = len
* bin_file = g_pdf_xstring
* TABLES
* otf = w_return-otfdata[]
* lines = itab
* EXCEPTIONS
* err_max_linewidth = 1
* err_format = 2
* err_conv_not_possible = 3
* err_bad_otf = 4
* OTHERS = 5.
CALL FUNCTION 'CONVERT_OTF_2_PDF' "转换otf数据为二进制PDF文件
* EXPORTING
* use_otf_mc_cmd = 'X'
* archive_index = archive_index
IMPORTING
bin_filesize = len
TABLES
otf = w_return-otfdata[]
doctab_archive = doctab
lines = l_lines[]
EXCEPTIONS
err_conv_not_possible = 1
err_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.
* CONCATENATE p_sefile sy-uname '-' sy-uzeit '.pdf' INTO file_name. "addrss
* OPEN 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.
CONCATENATE 'D:\' sy-uname '-' sy-uzeit ' FFF.pdf' INTO file_name.
"定义文件名
"这一段不屏蔽, 在打印的时候会有显示选择路径的对话框,屏蔽则直接保存在上面的文件名
"file_name 指定的路径
CALL METHOD cl_gui_frontend_services=>file_save_dialog "保存文件窗口(选择路径)
EXPORTING
default_extension = 'PDF'
file_filter = '*.PDF'
default_file_name = file_name
CHANGING
filename = file_name
path = path
fullpath = fullpath
* user_action = ua
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CALL FUNCTION 'GUI_DOWNLOAD' "保存文件在本地
EXPORTING
bin_filesize = len
filename = file_name
filetype = 'BIN'
IMPORTING
filelength = w_filesize
TABLES
data_tab = l_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 'File not downloaded' TYPE 'I' .
ENDIF.
ENDIF.
ENDFORM. "export_pdf
新浪博客兔兄博文里提到了动态的方式获取ScriptForm数据转PDF:http://blog.sina.com.cn/s/blog_55c871720102wevc.html
(转PDF应该还可以使用此函数:SX_OBJECT_CONVERT_OTF_PDF)
data: gt_otfdata like itcoo occurs 0 with header line.
以动态的方式获取ScriptForm数据(没有试过,可能获取不到):
field-symbols: type any.
data: l_tab_otfdata(30) value '(SAPLSTXC)OTF[]'.
assign (l_tab_otfdata) to .
if sy-subrc = 0.
gt_otfdata[] = .
endif.
如果上面这种方式取不到Form表单数据,则可以在CLOSEForm时得到:
call function 'CLOSE_FORM'
importing
result = result
tables
otfdata = gt_otfdata
exceptions
others = 1.
CLOSE_FORM 的otfdata 作用:当调用PRINT_TEXT 或者 OPEN_FORM时,如果参数OPTIONS(结构类型为ITCPO)中的字段TDGETOTF值为'X' 时,将会通过参数OTFDATA以OTF的格式输出,在这种情况下,打印输出、屏幕显示、传真将不会被执行。
itcpo-tdnoprint = ' '.No printing from print preview
itcpo-tdnoprev = 'X'.No print preview
itcpo-tdgetotf = 'X'.Return of OTF table. No printing, display, or faxing
下面开始将ScriptForm数据转换成PDF格式的数据:
data: binfilesize type i.
data: i_tline type table of tline with header line,
* convert OTF to PDF
call function 'CONVERT_OTF'
exporting
format = 'PDF'
importing
bin_filesize = binfilesize
tables
otf = gt_otfdata
lines = i_tline
exceptions
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
err_bad_otf = 4
others = 5.
经过上面的PDF的转换,我们就可以将以上的PDF格式的数据直接存储到文本中(此时下载或写入文件时需要以二进制的方式进行传输),这个文本就是PDF。但如果还需要将这个PDF以附件的形式发送邮件,则还需要下一步转换(其实就是将两列的i_tline内表合并成一列的内表i_objbin):
data:i_objbin like solisti1 occurs 0 with header line.
call function 'QCE1_CONVERT'
tables
t_source_tab = i_tline
t_target_tab = i_objbin
exceptions
convert_not_possible = 1
others = 2.
最后以附件的形式将i_objbin发送出去
1、对于scriptform或者smartform已经ABAP list都可以通过SAP标准程序RSTXPDFT4进行本地保存。
使用本方法需要获得要打印内容的假脱机请求号,可以通过事务码SP02获得。
2、通过自己书写代码实现:
①对于scriptform:首先要设置 函数 OPEN_FORM 的参数 OPTIONS ,OPTIONS中的参数 tdgetotf 设置为'X'.
通过函数 CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT = RESULT
tables
otfdata = otfdata.
取得otfdata数据,用于下面的函数:
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = bin_size
TABLES
otf = otfdata
lines = pdf_lines .
调用文件保存对话框:
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'PDF'
file_filter = '*.PDF'
CHANGING
filename = filename
path = path
fullpath = fullpath .
将数据保存到本地:
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bin_size
filename = fullpath
filetype = 'BIN'
codepage = '4110'
IGNORE_CERR = ABAP_TRUE
TABLES
data_tab = pdf_lines.
②对于smartform:调用的时候需要设置参数control_parameters,getotf 值设置为'X'.
在打开smartform时候,通过importing参数job_output_info获得'CONVERT_OTF'函数的tables参数OTF的值。job_output_info-otfdata[],,可以通过SSFCOMP_PDF_PREVIEW函数预览smartform的内容:
call function ‘SSFCOMP_PDF_PREVIEW’
exporting
i_otf = t_otf[].
或者通过下面代码下载PDF文件到本地:
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = bin_size
TABLES
otf = otfdata
lines = pdf_lines .
调用文件保存对话框:
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'PDF'
file_filter = '*.PDF'
CHANGING
filename = filename
path = path
fullpath = fullpath .
将数据保存到本地:
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
bin_filesize = bin_size
filename = fullpath
filetype = 'BIN'
codepage = '4110'
IGNORE_CERR = ABAP_TRUE
TABLES
data_tab = pdf_lines.
SAP 打印自动导出PDF本地文件(自己做的例子)的更多相关文章
- 个人永久性免费-Excel催化剂功能第50波-批量打印、导出PDF、双面打印功能
在倡导无纸化办公的今天,是否打印是一个碍眼的功能呢,某些时候的确是,但对于数据的留存,在现在鼓吹区块链技术的今天,仍然不失它的核心价值,数据报表.单据打印出来留存,仍然是一种不可或缺的数据存档和防篡改 ...
- JSP页面导出PDF格式文件
JSP页面导出PDF格式文件基本在前端页面可以全部完成 <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/ ...
- confluence导出PDF格式文件不显示中文解决
由于confluence导出PDF格式文件需要应用字体文件,下载字体文件在confluence管理员界面安装即可. 我这里使用从simhei.ttf楷体,可以从windowns主机里下载(c:/win ...
- java根据模板导出PDF详细教程
原文:https://blog.csdn.net/pengyufight/article/details/75305128 题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word ...
- 爬虫任务二:爬取(用到htmlunit和jsoup)通过百度搜索引擎关键字搜取到的新闻标题和url,并保存在本地文件中(主体借鉴了网上的资料)
采用maven工程,免着到处找依赖jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&quo ...
- 史上最全的springboot导出pdf文件
最近项目有一个导出报表文件的需求,我脑中闪过第一念头就是导出pdf(产品经理没有硬性规定导出excel还是pdf文件),于是赶紧上网查看相关的资料,直到踩了无数的坑把功能做出来了才知道其实导出exce ...
- php 查询mysql数据批量转为PDF文件二(批量使用wkhtmltopdf html导出PDF)
上节讲到配置wkhtmltopdf,这节讲下如何批量操作 首先讲下wkhtmltopdf如何使用 直接命令行输入: wkhtmltopdf http://www.baidu.com/ baidu.p ...
- 自动将本地文件保存到GitHub
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 这篇文章主要讲讲如何自动将本地文件保存到GitH ...
- 网页中Office和pdf相关文件导出
最近被派去维护和开发一些做了一半.年久失修的项目.有一部分内容是关于word文件导出,顺带着把excel.pdf文件的导出也调研下吧,我想未来开发我应该会遇到的,遂做了下笔记分享给需要的人. 由于项目 ...
随机推荐
- CQL语句
CQL中默认忽略大小写,若需要大小写敏感,可使用双引号将对象包起来,引用的时候也要用双引号包住 tips: 使用CQL需要预装Python环境 Ⅰ.基本知识点 1.1 数据类型 这边和关系型数据库相近 ...
- vue中打包后vendor文件包过大
vue中webpack打包后vendor.xxx.js文件一般都特别大,其原因是因为我们引用的依赖都被压缩成一个js文件,这样会导致vendor文件过大.页面加载速度过慢,影响用户体验.所以我们就要把 ...
- [dev][dpdk][crypto] dpdk加解密设备与IPSEC
概述 分三部分,加解密框架(crypto framework),加解密设备(crypto dev),安全协议(Security Framework) × API,设计思路等,都在加解密框架里:见文档 ...
- SQL Server 主库DML操作慢故障处理过程
从某个时间开始,Cat监控到的数据发现,正式环境的Insert 表很慢,数据库用了AlwasON高可用(1个备库做了实时同步),特别是每天早上9:00--11:00,做活动的时候,下单的insert需 ...
- MPLS的模拟学习过程
1.场景拓扑 使用小凡模拟器搭建了如下网络拓扑,使用的镜像为:c3640-jk9o3s-mz.122-15.T9.bin 相关的配置在下方 如果重复实验,需要清空设备的配置,知道路由器的密码,操作步骤 ...
- 创建存储过程 in,out,inout
in: 输入参数,存储过程如果修改了参数值,那么不能被返回. out:输出参数,存储过程中修改了参数值,可以被返回.inout:输入参数,存储过程如果修改了参数值,可以被返回 注意参数格式: in ...
- 【心得】-NO.114.面试.1 -【To HR And Interviewer】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- java快排思想
1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 }
- 华为AR-111S路由器GRE协议设置
一.GRE的定义: gre(generic routing encapsulation,通用路由封装)协议是对某些网络层协议(如ip 和ipx)的数据报进行封装,使这些被封装的数据报能够在另一个网络层 ...
- spring boot jpa 整合
1,Eclipse JPA Tool配置 https://www.cnblogs.com/wgslucky/p/10109300.html 2,项目地址 https://gitee.com/wgslu ...