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.