SMARTFORM打印PDF

smartform 打印功能,可打PDF

http://blog.csdn.net/twty5210/archive/2010/12/10/6067472.aspx

 

*&---------------------------------------------------------------------*
*&  Include           ZINCLUDE_MM079_PRI
*&---------------------------------------------------------------------*
*****************BEGIN FOR PRINTER SMARTFORMS****************************
DATA: L_PRN_COMP TYPE SSFCOMPOP,
      L_PRN_CTRLOP TYPE SSFCTRLOP,
      JOB_OUTPUT_OPTIONS TYPE SSFCRESOP,
      JOB_OUTPUT_INFO TYPE SSFCRESCL.     "CNSAPWIN
DATA: L_FM_NAME TYPE TDSFNAME.
DATA: t_otf_from_fm TYPE ssfcrescl,
      t_otf TYPE itcoo OCCURS 0 WITH HEADER LINE,
      t_pdf_tab LIKE tline OCCURS 0 WITH HEADER LINE.
TABLES: USR01.

FORM SUB_SET_PRINTER_CONTROL USING PF_COPYIES PF_VIEW PF_NODIALOG PF_LANGU PF_PDF.
  SELECT SINGLE * FROM USR01 WHERE BNAME = SY-UNAME.
* control setting
  L_PRN_CTRLOP-PREVIEW   = PF_VIEW.
  L_PRN_CTRLOP-NO_DIALOG = PF_NODIALOG.
  L_PRN_CTRLOP-LANGU     = PF_LANGU.
  L_PRN_CTRLOP-DEVICE    = 'PRINTER'.
  L_PRN_CTRLOP-GETOTF    = PF_PDF.    "SP02  (pdf)
* printer setting
  IF PF_COPYIES > 1.
    L_PRN_COMP-TDCOPIES = PF_COPYIES.
  ELSE.
    L_PRN_COMP-TDCOPIES = 1.
  ENDIF.
  L_PRN_COMP-TDSUFFIX2 = SY-REPID.
  L_PRN_COMP-TDDEST = USR01-SPLD.
***  l_prn_comp-tdprinter = 'PRINTER'.
  L_PRN_COMP-TDNEWID = 'X'.
  L_PRN_COMP-TDIMMED = 'X'.
  L_PRN_COMP-TDFINAL = 'X'.
  L_PRN_COMP-TDNOPRINT = PF_VIEW.   "NO PRINT BUTTON
*--begin 如果“列印”時,不想顯示“預覽”按鈕,可以取消以下註釋
****  (考慮到用戶預覽打印后,直接右上角關閉screen,則會影響流水號),還是取消以下註釋
  IF PF_VIEW = ''.
    L_PRN_COMP-TDNOPREV  = 'X'.
  ELSE.
    L_PRN_COMP-TDNOPREV  = ''.
  ENDIF.
*--end
* l_prn_comp-tddelete = 'X'.
*  為了打PDF,所以要清空,如果打smartform時,在  CALL FUNCTION 'SSF_OPEN'后有賦值
   L_PRN_CTRLOP-NO_OPEN  = ''.
   L_PRN_CTRLOP-NO_CLOSE = ''.
ENDFORM.

FORM SUB_BEGIN_PRINTER_MODULE USING P_SF_NAME.
* group all printout into one spool
  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = P_SF_NAME
    IMPORTING
      FM_NAME            = L_FM_NAME
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.

FORM SUB_CALL_OPENFORM.
  CALL FUNCTION 'SSF_OPEN'
    EXPORTING
*    ARCHIVE_PARAMETERS       = ARCHIVE_PARAMETERS
     USER_SETTINGS            = ' '
     OUTPUT_OPTIONS           = L_PRN_COMP
     CONTROL_PARAMETERS       = L_PRN_CTRLOP
   IMPORTING
     JOB_OUTPUT_OPTIONS       = JOB_OUTPUT_OPTIONS
   EXCEPTIONS
     FORMATTING_ERROR         = 1
     INTERNAL_ERROR           = 2
     SEND_ERROR               = 3
     USER_CANCELED            = 4
     OTHERS                   = 5.
   IF SY-SUBRC <> 0.
         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.
   L_PRN_CTRLOP-NO_OPEN  = 'X'.
   L_PRN_CTRLOP-NO_CLOSE = 'X'.
ENDFORM.

FORM SUB_BEGIN_PRINTER.
   CALL FUNCTION L_FM_NAME
     EXPORTING
       CONTROL_PARAMETERS = L_PRN_CTRLOP
       OUTPUT_OPTIONS     = L_PRN_COMP
       USER_SETTINGS      = ''        " using current setting
*       T_HEADER           = 'T_HEADER_A'
*       TABLES
*       IT_ITAB            = ''
     IMPORTING
      job_output_info    = t_otf_from_fm
     EXCEPTIONS
       FORMATTING_ERROR   = 1
       INTERNAL_ERROR     = 2
       SEND_ERROR         = 3
       USER_CANCELED      = 4
       OTHERS             = 5.
   IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
   ENDIF.
*   t_otf[] = t_otf_from_fm-otfdata[].
   APPEND LINES OF t_otf_from_fm-otfdata TO t_otf.
ENDFORM.

FORM SUB_CALL_CLOSEFORM.
  CALL FUNCTION 'SSF_CLOSE'
    IMPORTING
      JOB_OUTPUT_INFO  = JOB_OUTPUT_INFO
    EXCEPTIONS
      FORMATTING_ERROR = 1
      INTERNAL_ERROR   = 2
      SEND_ERROR       = 3
      OTHERS           = 4.
ENDFORM.

FORM PRI_PDF.
DATA: w_bin_filesize TYPE i, " Binary File Size
      w_filename TYPE string,
      w_file_path TYPE string,
      w_full_path TYPE string.

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
    IMPORTING
      bin_filesize          = w_bin_filesize
    TABLES
      otf                   = t_otf
      lines                 = t_pdf_tab
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      err_bad_otf           = 4
      OTHERS                = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* To display File SAVE dialog window
CONCATENATE sy-cprog '-' sy-datum '-' sy-uzeit '.PDF' INTO w_filename.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      default_file_name    = w_filename
    CHANGING
      filename             = w_filename
      path                 = w_file_path
      fullpath             = w_full_path
    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.
  ENDIF.

* Use the FM GUI_DOWNLOAD to download the generated PDF file onto the
* presentation server
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      bin_filesize = w_bin_filesize
      filename     = w_full_path
      filetype     = 'BIN'
    TABLES
      data_tab     = t_pdf_tab.
  IF sy-subrc <> 0.
  ENDIF.
ENDFORM.


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/twty5210/archive/2010/12/10/6067472.aspx

 

 

http://zhouwubin.blogbus.com/logs/24538419.html

SAP SMARTFORM 打印成PDF 和 显示特殊字符

 

1.

se38里执行程序RSTXPDFT4

需要输入一个spool的参数,可以在打印预览的时候,看窗口下方的状态栏得知

“………………number xxxxxx created”,输入xxxxx

路径随便输一个了,到时候还会问你把pdf文件放哪里的

 

2.

感谢强哥,是他告诉我的

把需要显示的特殊字符搞在一个变量里就好啦

 

 

 

How to convert smartform output into pdf

 

http://kb.cnblogs.com/a/1057213/

 

There is a way to download smartform in PDF format. 

Please do the following: 
1. Print the smartform to the spool. 
2. Note the spool number. 
3. Download a PDF file (Acrobat Reader) version of the spool by running Program RSTXPDFT4 and entering the 
noted spool number. 

or use this program:

&---------------------------------------------------------------------
*& Report ZPDF_DNLD_TEST2 *
*& *
&---------------------------------------------------------------------
*& DEVK904540 *
*& *
&---------------------------------------------------------------------
REPORT ZPDF_DNLD_TEST2 .
data: i_otf LIKE itcoo OCCURS 100 WITH HEADER LINE,
i_pdf LIKE tline OCCURS 100 WITH HEADER LINE.
data: op_option type SSFCTRLOP,
job_output type SSFCRESCL.
op_option-getotf = 'X'.
CALL FUNCTION '/1BCDWB/SF00000005'
EXPORTING
ARCHIVE_INDEX = 
ARCHIVE_INDEX_TAB = 
ARCHIVE_PARAMETERS = 
CONTROL_PARAMETERS = op_option
MAIL_APPL_OBJ = 
MAIL_RECIPIENT = 
MAIL_SENDER = 
OUTPUT_OPTIONS = 
USER_SETTINGS = 'X' 
itab1 = itab1 
IMPORTING
DOCUMENT_OUTPUT_INFO = 
JOB_OUTPUT_INFO = job_output
JOB_OUTPUT_OPTIONS = 
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132 
ARCHIVE_INDEX = ' ' 
COPYNUMBER = 0 
ASCII_BIDI_VIS2LOG = ' ' 
PDF_DELETE_OTFTAB = ' ' 
IMPORTING 
BIN_FILESIZE = 
BIN_FILE = 
TABLES
otf = job_output-otfdata
lines = i_pdf
EXCEPTIONS 
ERR_MAX_LINEWIDTH = 1 
ERR_FORMAT = 2 
ERR_CONV_NOT_POSSIBLE = 3 
ERR_BAD_OTF = 4 
OTHERS = 5 
.
IF sy-subrc 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
BIN_FILESIZE = 
filename = 'c:/test_pdf_sf.pdf'
FILETYPE = 'BIN'
tables
data_tab = i_pdf
FIELDNAMES = 
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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF.

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先,在ALV的程序里面定义一个新的按钮,用于触发打印操作。 2. 在按钮的事件处理中,调用函数 module_name = 'SSF_FUNCTION_MODULE_NAME',获取Smartform的函数模块名。 3. 然后,通过函数 module_name = 'SSF_FUNCTION_MODULE_NAME' 获取的函数模块名,调用函数 module_name,传入需要打印的数据。 4. 最后,调用函数 'SSF_FUNCTION_MODULE_NAME',传入Smartform的函数模块名和需要打印的数据,即可完成打印操作。 以下是示例代码: 1. 定义按钮 DATA: ok_code TYPE sy-ucomm. CASE ok_code. WHEN 'PRINT'. lv_layout-info_fname = 'ZALV_SMARTFORM'. CALL METHOD cl_gui_alv_grid=>get_selected_rows RECEIVING value = lt_sel. LOOP AT lt_sel INTO ls_sel. READ TABLE gt_outtab INTO ls_outtab INDEX ls_sel-index. APPEND ls_outtab TO lt_print. ENDLOOP. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_layout-info_fname IMPORTING fm_name = lv_fm_name. CALL FUNCTION lv_fm_name EXPORTING control_parameters = gt_cparams output_options = gt_oparams user_settings = gt_usparams TABLES t_outtab = lt_print. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_layout-info_fname IMPORTING fm_name = lv_fm_name EXCEPTIONS no_form = 1 no_function_module = 2 others = 3. 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 lv_fm_name EXPORTING control_parameters = gt_cparams output_options = gt_oparams user_settings = gt_usparams TABLES t_outtab = lt_print. ENDIF. ENDCASE.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值