下载多页PDF(从Adobe Form)

2020-09-09 19:18发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我为一个国家/地区开发了...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我为一个国家/地区开发了Adobe税务证明。 所有员工证书都必须为1 PDF。

进行打印预览时,所有内容看起来都是100%,您可以看到第1、2页等。

问题是当我尝试下载此文件时,似乎几乎是不可能的。 我已经阅读了在论坛上可以找到的所有内容,但没有一种解决方法有效:

1)我的第一个选择是使用FP_CHECK_BATCH_PDF_RETURN中描述的逻辑。 使用函数" FP_GET_PDF_TABLE"时出现的问题是有两个XSTRING行。 我尝试使用以下命令将其转换为Binary:

呼叫功能'SCMS_XSTRING_TO_BINARY'
导出
缓冲区= ls_pdf
append_to_table ='X'
导入
output_length = lv_filelength
表格
binary_tab = lt_pdf_content。

DESCRIBE TABLE lt_pdf_content LINES林。

lv_filelength = lin * sy-tleng。

然后使用GUI_DOWNLOAD或OPEN DATASET lv_file在二进制模式消息lv_msg中输出以下载二进制文件,但继续收到一条消息,指出PDF文件已损坏且无法修复。

如果我仅添加1页,则可以使用。 如果我添加整个二进制表(多页),则字段长度与1页相同。 如何获得多个XSTRING来正确地将其转换为二进制文件,以便正确下载??

2)我已经尝试过FPCOMP_CREATE_PDF_FROM_SPOOL函数,但一次只能返回一页,这又给我留下了麻烦的XSTRING。

3)RSTXPDFT4不起作用

4)我不想安装第三方工具。 我肯定一定可以在ABAP中做到这一点。

任何建议或解决方案将不胜感激。 一定有人做过吗?

亲切问候

Deon

3条回答
shere_lin
2020-09-09 20:18

我们有一个要求,其中Adobe表单的数据必须超过1MB,因此我们必须根据订单项的数量拆分数据,并将Adobe表单称为 在一次do-while循环中,一次完成所有数据的处理后,我们必须合并为每个adobe表单调用生成的所有输出pdf。
1。 我们创建了一个本地结构,如下所示:
开始t_fileinfo,
文件名TYPE字符串,
数据TYPE xstring,
len TYPE i,
t_fileinfo的结尾。


2。 然后,我们创建了一个内部表(例如" gt_files"),其类型为" t_fileinfo",并为其创建了一个工作区" lwa_files"。


3。 我们将do-while每次迭代内的pdf文件(作为每个adobe表单调用的输出生成)分配给" gt_files"的数据。


4。 然后,在调用" FP_JOB_CLOSE"之后,我们创建了一个类" cl_rspo_pdf_merge"的对象(例如go_pdf_merger)。


5。 创建对象后,我们在包含所有pdf文档的表上循环,并使用上面创建的对象在名为" cl_rspo_pdf_merge"类的" add_document"方法的循环内循环使用:

循环gt_files INTO DATA( lwa_files)。
go_pdf_merger-> add_document(lwa_files-data)。
ENDLOOP。
6。 之后,我们将kernael方法merge_documents称为:


go_pdf_merger-> merge_documents(导入merged_document = gv_merged_document rc = rc)。
合并" gt_files"中所有可用的文档。


7。 然后,我们调用了'SCMS_XSTRING_TO_BINARY'函数,将合并的文档传递为:
CALL FUNCTION'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = gv_merged_document
TABLES
binary_tab = lt_data。
8。 然后,我们将方法称为" cl_gui_frontend_services => gui_download",如下所示:CONCATENATE'C:\ Users \'sy-uname'\ Desktop \''MergedPDF'sy-timlo c_file_ext_pdf INTO lv_file。
如果lt_data不是初始数据。
呼叫方法cl_gui_frontend_services => gui_download
导出
* bin_filesize = xstrlen(ls_result-content)
filename = lv_file"完整名称
文件类型='BIN '
更改
data_tab = lt_data
例外情况
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
分隔符--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 < br> 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
not_supported_by_gui = 22
error_no_gui = 23
其他=24。
如果sy-subrc不是INITIAL。
消息ID'ED'类型'E'数字'256'。
ENDIF。

调用方法cl_gui_frontend_services =>执行
导出
文档= lv_file
同步=空间"'X'
例外情况
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
ynchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10.
IF系统 subrc不是INITIAL。
消息ID" ED"类型" I"数字" 256"。
ENDIF。
ENDIF。

一周热门 更多>