以pdf格式显示smartform而不是"打印机"视图

2020-09-13 19:23发布

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

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


嗨,专家们,我有一个要求,以PDF格式显示Smartform,并且我写了一个Pice,其中显示了打印机视图,以便可以通过它查看pdf文档,这不是我所需要的。 需要停用此打印机视图并将文档直接显示为PDF。

示例:运行报告后,您将获得打印或预览报告的选项。 当您点击预览时,表单应在Adobe中打开。 我已经在门户网站中看到了此功能,但要求是在SAP GUI中显示它。

为此我已经使用

 wa_control_parameters-no_dialog ='X'。

在wa_job_output_info-otfdata INTO w_otf中循环。
     将w_otf附加到it_itcoo。
   结局。
    通话功能'HR_IT_DISPLAY_WITH_PDF'
     桌子
       otf_table = it_itcoo。
 

但是我只收到了一张黑色照片?

有什么方法可以满足此要求,还是应该继续将表单下载到本地硬盘上?

(17.8 kB)

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

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


嗨,专家们,我有一个要求,以PDF格式显示Smartform,并且我写了一个Pice,其中显示了打印机视图,以便可以通过它查看pdf文档,这不是我所需要的。 需要停用此打印机视图并将文档直接显示为PDF。

示例:运行报告后,您将获得打印或预览报告的选项。 当您点击预览时,表单应在Adobe中打开。 我已经在门户网站中看到了此功能,但要求是在SAP GUI中显示它。

为此我已经使用

 wa_control_parameters-no_dialog ='X'。

在wa_job_output_info-otfdata INTO w_otf中循环。
     将w_otf附加到it_itcoo。
   结局。
    通话功能'HR_IT_DISPLAY_WITH_PDF'
     桌子
       otf_table = it_itcoo。
 

但是我只收到了一张黑色照片?

有什么方法可以满足此要求,还是应该继续将表单下载到本地硬盘上?

(17.8 kB)
付费偷看设置
发送
7条回答
SAP小黑
1楼-- · 2020-09-13 19:40

詹妮弗,你好

我建议您这个(巨大的)维基 https: //关于PDF的wiki.scn.sap.com/wiki/display/ABAP/PDF+files+in+SAP ,我会指出这一点,而不是使用FM HR_IT_DISPLAY_WITH_PDF

如何在Windows的SAPGUI中显示PDF?

  • 在dynpro中定义自定义控件,并使用mime类型为" application/pdf"的CL_GUI_HTML_VIEWER类
  • 例如,参见Wiki的第二部分"在Adobe Reader中读取任何OTF数据"
  • 注意:不应按照SAP在其说明中的指示使用CL_GUI_PDFVIEWER类。
落灬小鱼
2楼-- · 2020-09-13 19:54

嗨西蒙妮,非常感谢您的答复

我已经阅读了documnet并实现了里面的内容,现在我可以下载,但是我需要显示:).........
请您指导我并告诉我我需要哪种方法 从类

实施

CL_GUI_HTML_VIEWER

最诚挚的问候

Jenie

软件心理学工程师
3楼-- · 2020-09-13 19:56

嗨西蒙妮,

我有下面的代码,

数据:lt_pdf tline类型表,

 ls_pdf与lt_pdf类似,

 lv_url TYPE char255,

 pdf_fsize TYPE i,

 lv_content TYPE xstring,

 x255的lt_data类型标准表。

 数据:l_job_output_info类型ssfcrescl。

 数据:ls_control_param TYPE ssfctrlop。

 数据:g_html_control类型参考cl_gui_html_viewer。

 数据:lo_docking_container类型参考cl_gui_docking_container。

  数据lv_delivery_hdr类型/SAPDII/DELIVERY。

 数据:p_vbeln TYPE vbeln_vl。

 FIELD-SYMBOLS 类型x。

 数据lv_NAST TYPE NAST。

 数据LV_REPEAT TYPE CHAR1。

 数据lv_rl_header TYPE/DSD/SV_RLD_PRINT_OUT。

 数据lv_VBDKA类型VBDKA。

 数据I_EKKO类型EKKO。

 数据I_LFA1 TYPE LFA1。

 数据IT_EKPO EKPO类型表。

 初始化。

   ls_control_param-getotf ='X'。

   ls_control_param-no_dialog ='X'。

 选择开始。

   通话功能'/1BCDWB/SF00000045'

     出口

     i_ekko = I_EKKO

     i_lfa1 = i_lfa1
       control_parameters = ls_control_param
     输入

       job_output_info = l_job_output_info
      桌子

       IT_EKPO = IT_EKPO

     例外情况

       formatting_error = 1

       internal_error = 2

       send_error = 3

       user_canceled = 4

       其他= 5。

   如果sy-subrc <> 0。

 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO

 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。

   万一。

   通话功能'CONVERT_OTF'
     出口
       格式=" PDF"

     输入

       bin_filesize = pdf_fsize

     桌子

       otf = l_job_output_info-otfdata

       行数= lt_pdf
     例外情况

       err_max_linewidth = 1

       err_format = 2

       err_conv_not_possible = 3

       其他= 4。

 *将pdf转换为xstring字符串

   在lt_pdf INTO ls_pdf中循环播放。

     将ls_pdf分配到铸造。

     CONCATENATE lv_content  INTO lv_content在字节模式中。

   结局。

   通话画面100。

 *&模块STATUS_0100输出

 *&------------------------------------------------  --------------------- *

 *文字

 * -------------------------------------------------  --------------------- *

 模块状态_0100输出。

   将PF状态设置为``100''。

 * SET TITLEBAR'xxx'。

   创建对象lo_docking_container

     出口

       repid = sy-repid

       dynnr ='100'" SY-DYNNR

       侧面= lo_docking_container-> dock_at_left

       扩展名= 1200。

   创建对象g_html_control

     出口

       父= lo_docking_container。

 *将xstring转换为二进制表以传递给LOAD_DATA方法

   通话功能'SCMS_XSTRING_TO_BINARY'

     出口

       缓冲区= lv_content

     桌子

       binary_tab = lt_data。

 *载入HTML

   呼叫方法g_html_control-> load_data(

     出口

       类型='应用程序'

       子类型='pdf'

     输入

       Assigned_url = lv_url

     改变

       data_table = lt_data

     例外情况

       dp_invalid_parameter = 1

       dp_error_general = 2

       cntl_error = 3

       其他= 4)。

 * 展示下

   呼叫方法g_html_control-> show_url(url = lv_url

     in_place ='X')。

 ENDMODULE。  " STATUS_0100输出

 *&------------------------------------------------  --------------------- *

 *&模块USER_COMMAND_0100输入

 *&------------------------------------------------  --------------------- *

 *文字

 * -------------------------------------------------  --------------------- *

 MODULE user_command_0100输入。

   数据ok_code类似于sy-ucomm。

   将sy-ucomm移动到ok_code。

   案例ok_code。

     当"返回"或"退出"时。

       调用方法lo_docking_container->免费。

 *呼叫方法g_html_control->免费。

       离开屏幕0。

     当别人。

   结束。

 ENDMODULE。  U
 

但是我仍然只收到黑屏,你能告诉我哪里出了错误!!!

最好的问候

珍妮

何必丶何苦呢
4楼-- · 2020-09-13 19:36

正如我所说,您将LT_DATA传递为空!
将其替换为pdf表(调试和调试,您将看到是它!)并计算其大小以填充PDF_SIZE

野沐沐
5楼-- · 2020-09-13 19:56

亲爱的,
请提供任何解决此问题的建议。
最好的问候
Jenie

小c菟菟
6楼-- · 2020-09-13 19:37

感谢西蒙妮的回答 我在使用类CL_GUI_HTML_VIEWER时传递正确的表时遇到问题,直到现在我还没有调试过所有表,并且所有表仍以0值开头。

我将代码再次放在这里,如果您告诉您错误在哪里或该表在哪里,那将是很好的选择,

最诚挚的问候

呼叫功能'/1BCDWB/SF00000045'

     出口

       i_ekko = i_ekko

       i_lfa1 = i_lfa1

       control_parameters = ls_control_param

     输入

       job_output_info = l_job_output_info

     桌子

       it_ekpo = it_ekpo

     例外情况

       formatting_error = 1

       internal_error = 2

       send_error = 3

       user_canceled = 4

       其他= 5。

   如果sy-subrc <> 0。

 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO

 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。

   万一。

   通话功能'CONVERT_OTF'

     出口

       格式=" PDF"

     输入

       bin_filesize = pdf_fsize

     桌子

       otf = l_job_output_info-otfdata

       行数= lt_pdf

     例外情况

       err_max_linewidth = 1

       err_format = 2

       err_conv_not_possible = 3

       其他= 4。


   通话画面100。

 *&模块STATUS_0100输出

 *&------------------------------------------------  --------------------- *

 *文字

 * -------------------------------------------------  --------------------- *

 模块状态_0100输出。

   将PF状态设置为``100''。

 * SET TITLEBAR'xxx'。

   创建对象lo_docking_container

     出口

       repid = sy-repid

       dynnr ='100'" SY-DYNNR

       侧面= lo_docking_container-> dock_at_left

       扩展名= 1200。

   创建对象g_html_control

     出口

       父= lo_docking_container。

 *载入HTML

   呼叫方法g_html_control-> load_data(

     出口

       类型='文本'''应用程序'

       子类型='pdf'"'pdf'

       大小= pdf_fsize

     输入

       Assigned_url = lv_url

     改变

       data_table = lt_data

     例外情况

       dp_invalid_parameter = 1

       dp_error_general = 2

       cntl_error = 3

       其他= 4)。


     调用方法g_html_control-> show_data

     出口

       网址= lv_url

     例外情况

       其他= 3。

   如果sy-subrc <> 0。

     消息ID sy-msgid类型sy-msgty编号sy-msgno

                与sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。

   万一。



 ENDMODULE。  " STATUS_0100输出

 *&------------------------------------------------  --------------------- *

 *&模块USER_COMMAND_0100输入

 *&------------------------------------------------  --------------------- *

 *文字

 * -------------------------------------------------  --------------------- *

 MODULE user_command_0100输入。

   数据ok_code类似于sy-ucomm。

   将sy-ucomm移动到ok_code。

 *清除ok_code。

   案例ok_code。

     当"返回"或"退出"或"取消"时。

 *呼叫方法lo_docking_container->免费。

       调用方法g_html_control->免费。

       离开屏幕0。

     当别人。

   结束。

 ENDMODULE。  " USER_COMMAND_01 

一周热门 更多>