2015 Sep 28 4:50 AM
Hi all,
My requirement is to sent email a password protected PDF that is generated from a smartform.
I have gone through many posts and made the development, however the pdf is mailed but not opening and giving the error "The file is damaged and could not be opened".
The steps the followed as as below
1. Go to SM69 and create a new external system.
2. Generated the FM name using "SSF_FUNCTION_MODULE_NAME"
3. Called the above generated FM with options and imported the OTFDATA table.
4. Converted the OTF data Tab to Lines using FM "CONVERT_OTF".
5. Stored the file to in server using read dataset. (I have downloaded the file and it is opening properly, may be issue is from the below steps)
6. Executed the FM's SXPG_COMMAND_LIST_GET, SXPG_COMMAND_CHECK and SXPG_COMMAND_EXECUTE to make the pdf password protected.
7. Finally sent the pdf as mail attachment using FM "SO_NEW_DOCUMENT_ATT_SEND_API1".
The mail is sent but the pdf is not opening.
Please find the code attached.
*****************************************************************************************************************************************************************
REPORT ZSDS_PGI_PRINT.
TABLES : EKPO.
************************************************************************
***** I-N-T-E-R-N-A-L T-A-B-L-E-S D-E-C-L-A-R-A-T-I-O-N A-R-E-A ****
************************************************************************
DATA : T_DATA TYPE STANDARD TABLE OF EKPO.
************************************************************************
********** W-O-R-K--A-R-E-A D-E-C-L-A-R-A-T-I-O-N ***********
************************************************************************
DATA : WA_DATA TYPE EKPO.
************************************************************************
****** V-A-R-I-A-B-L-E-S D-E-C-L-A-R-A-T-I-O-N A-R-E-A *******
************************************************************************
DATA : FM_NAME TYPE RS38L_FNAM,
CONTROL TYPE SSFCTRLOP,
OUTPUT_OPTIONS TYPE SSFCOMPOP,
XSFPARAM_LINE TYPE SSFXSFP.
DATA : GS_OTFDATA TYPE SSFCRESCL,
GT_OTF TYPE TABLE OF ITCOO.
DATA : GT_LINES TYPE STANDARD TABLE OF TLINE,
GS_LINES TYPE TLINE.
DATA : BIN_FILE TYPE XSTRING.
DATA : GS_DOCDATA TYPE SODOCCHGI1.
DATA : GS_RECLIST TYPE SOMLRECI1,
GT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1.
DATA : GT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1,
GS_OBJBIN TYPE SOLISTI1.
DATA : GS_OBJPACK TYPE SOPCKLSTI1,
GT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1.
DATA : ITAB_ATTACH TYPE XSTRING .
DATA : T_ATTACHMENT TYPE SOLIX_TAB.
************************************************************************
******** S-E-L-E-C-T-I-O-N S-C-R-E-E-N ************
************************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-099.
SELECT-OPTIONS : S_EBELN FOR EKPO-EBELN.
SELECTION-SCREEN : END OF BLOCK B1.
************************************************************************
******** S-T-A-R-T O-F S-E-L-E-C-T-I-O-N ************
************************************************************************
START-OF-SELECTION.
PERFORM GET_DATA.
IF NOT T_DATA IS INITIAL.
PERFORM PRINTER_SETTINGS.
PERFORM SMART_FORM.
ELSE.
MESSAGE 'No Entries Found' TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
SELECT * FROM EKPO INTO TABLE T_DATA
UP TO 10 ROWS.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form printer_settings
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINTER_SETTINGS .
* activate XSF Output Mode
OUTPUT_OPTIONS-XSF = ' '. " XSF Output active
OUTPUT_OPTIONS-XSFCMODE = 'X'. " Get XSF params from program
OUTPUT_OPTIONS-XSFOUTMODE = 'S'. " Application
CLEAR OUTPUT_OPTIONS-XSFOUTDEV.
OUTPUT_OPTIONS-XSFACTION = 'http://www.sap.com'.
OUTPUT_OPTIONS-XSFFORMAT = 'X'. " Formatting ON
XSFPARAM_LINE-NAME = 'GRAPHICS'.
XSFPARAM_LINE-VALUE = 'EXTRACT'.
APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.
XSFPARAM_LINE-NAME = 'GRAPHICS-DIRECTORY'.
* xsfparam_line-value = c_gr_dir.
APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.
XSFPARAM_LINE-NAME = 'CONTENT-ID'.
XSFPARAM_LINE-VALUE = 'ENABLE'.
APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.
OUTPUT_OPTIONS-TDIMMED = 'X'.
OUTPUT_OPTIONS-TDNEWID = ' '.
OUTPUT_OPTIONS-TDNOPRINT = ' '.
OUTPUT_OPTIONS-TDDEST = 'LOCL'.
* silent mode ON
CONTROL-NO_DIALOG = 'X'.
CONTROL-PREVIEW = ''.
CONTROL-GETOTF = 'X'.
ENDFORM. " printer_settings
*&---------------------------------------------------------------------*
*& Form smart_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SMART_FORM .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZPDF_PWD'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
WRITE: / 'ERROR 1'.
ENDIF.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = CONTROL
OUTPUT_OPTIONS = OUTPUT_OPTIONS
USER_SETTINGS = SPACE "'X'
IMPORTING
JOB_OUTPUT_INFO = GS_OTFDATA
TABLES
T_DATA = T_DATA
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.
CLEAR GT_OTF.
GT_OTF[] = GS_OTFDATA-OTFDATA[].
CLEAR GT_LINES.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = BIN_FILE
TABLES
OTF = GT_OTF
LINES = GT_LINES
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.
DATA L_FILE TYPE STRING .
CONCATENATE 'c:\usr\sap\IDS\Attendance_record\work' '.PDF' INTO L_FILE.
OPEN DATASET L_FILE FOR OUTPUT IN BINARY MODE .
IF SY-SUBRC = 0 .
LOOP AT GT_LINES INTO GS_LINES .
TRANSFER GS_LINES TO L_FILE .
ENDLOOP.
CLOSE DATASET L_FILE .
ELSE.
WRITE : / 'operating system could not open file' .
ENDIF.
**&******************************************************************
* ASSIGNING THE DESCRIPTION OF THE OBJECT SENT IN MAIL
*&******************************************************************
CLEAR GS_DOCDATA.
GS_DOCDATA-OBJ_NAME = 'SAPRPT'.
GS_DOCDATA-OBJ_DESCR = 'test'.
GS_DOCDATA-OBJ_LANGU = SY-LANGU.
*&******************************************************************************
* ASSIGNING THE EMAIL-ID TO STRUCTURE OF API RECIPIENT LIST TABLE
*&******************************************************************************
CLEAR : GT_RECLIST,GS_RECLIST.
***IF INTERNAL MAIL-ID
* gs_reclist-receiver = sy-uname.
* gs_reclist-rec_type = 'B'.
***IF EXTERNAL MAIL-ID
GS_RECLIST-RECEIVER = '[email protected]'.
GS_RECLIST-REC_TYPE = 'U'.
APPEND GS_RECLIST TO GT_RECLIST.
*&******************************************************************
* PASSING THE SAP SCRIPT LINES TO SAP OFFICE
*&******************************************************************
DATA : GV_LEN TYPE I,
GV_POS TYPE I.
CLEAR : GS_OBJBIN,GS_LINES.
LOOP AT GT_LINES INTO GS_LINES.
GV_POS = 255 - GV_LEN.
IF GV_POS > 134.
GV_POS = 134.
ENDIF.
GS_OBJBIN+GV_LEN = GS_LINES(GV_POS).
GV_LEN = GV_LEN + GV_POS.
IF GV_LEN = 255.
APPEND GS_OBJBIN TO GT_OBJBIN.
CLEAR : GS_OBJBIN,GV_LEN.
IF GV_POS < 134.
GS_OBJBIN = GS_LINES+GV_POS.
GV_LEN = 134 - GV_POS.
ENDIF.
ENDIF.
ENDLOOP.
IF GV_LEN > 0.
APPEND GS_OBJBIN TO GT_OBJBIN.
ENDIF.
*&******************************************************************
* FILLING THE DETAILS IN SAP OFFICE
*&******************************************************************
DATA : GV_TAB_LINES TYPE I.
DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.
CLEAR GS_OBJBIN.
READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.
IF SY-SUBRC = 0.
GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).
GS_OBJPACK-TRANSF_BIN = 'X'.
GS_OBJPACK-HEAD_START = 1.
GS_OBJPACK-HEAD_NUM = 0.
GS_OBJPACK-BODY_START = 1.
GS_OBJPACK-BODY_NUM = GV_TAB_LINES.
GS_OBJPACK-DOC_TYPE = 'PDF'.
GS_OBJPACK-OBJ_NAME = 'ATTACHMENT'.
GS_OBJPACK-OBJ_DESCR = 'TEST'.
APPEND GS_OBJPACK TO GT_OBJPACK.
ENDIF.
*********************************************************************
*********************************************************************
DATA: BEGIN OF COMMAND_LIST OCCURS 0.
INCLUDE STRUCTURE SXPGCOLIST.
DATA: END OF COMMAND_LIST .
DATA: BEGIN OF EXEC_PROTOCOL OCCURS 0.
INCLUDE STRUCTURE BTCXPM.
DATA: END OF EXEC_PROTOCOL.
DATA: STATUS LIKE BTCXP3-EXITSTAT,
COMMANDNAME LIKE SXPGCOLIST-NAME VALUE 'ZDJ_ENCRYPTPDF',
SEL_NO LIKE SY-TABIX.
* GET LIST OF EXTERNAL COMMANDS
CALL FUNCTION 'SXPG_COMMAND_LIST_GET'
EXPORTING
COMMANDNAME = COMMANDNAME
OPERATINGSYSTEM = SY-OPSYS
TABLES
COMMAND_LIST = COMMAND_LIST
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'SXPG_COMMAND_CHECK'
EXPORTING
COMMANDNAME = COMMAND_LIST-NAME
OPERATINGSYSTEM = SY-OPSYS
EXCEPTIONS
NO_PERMISSION = 1
COMMAND_NOT_FOUND = 2
PARAMETERS_TOO_LONG = 3
SECURITY_RISK = 4
WRONG_CHECK_CALL_INTERFACE = 5
X_ERROR = 6
TOO_MANY_PARAMETERS = 7
PARAMETER_EXPECTED = 8
ILLEGAL_COMMAND = 9
COMMUNICATION_FAILURE = 10
SYSTEM_FAILURE = 11
OTHERS = 12.
CLEAR COMMAND_LIST.
REFRESH COMMAND_LIST.
DATA: V_DIR_INPUT TYPE SXPGCOLIST-PARAMETERS.
DATA: V_DIR_INPUT1 TYPE SXPGCOLIST-PARAMETERS.
COMMAND_LIST-NAME = 'ZDJ_ENCRYPTPDF'.
COMMAND_LIST-OPSYSTEM = 'Windows NT'.
DATA : DOC TYPE STRING.
DATA : PASS TYPE STRING ,
NAME(40).
DOC = 'invoice'.
PASS = '123456'.
CONCATENATE 'cmd/c d:\pdf\encryptpdf.exe' DOC'.PDF' INTO NAME.
CONCATENATE 'cmd /c d:\pdf\encryptpdf.exe' '-i' NAME '-o ' NAME '-u' PASS INTO V_DIR_INPUT SEPARATED BY SPACE .
READ TABLE COMMAND_LIST INDEX SEL_NO.
CONCATENATE COMMAND_LIST-OPCOMMAND V_DIR_INPUT INTO COMMAND_LIST-OPCOMMAND SEPARATED BY SPACE.
* CHECK AUTHORIZATION
COMMAND_LIST-ADDPAR = 'X'.
APPEND COMMAND_LIST.
.
CONSTANTS: C_EXTCOM TYPE SXPGCOLIST-NAME VALUE 'ZDJ_ENCRYPTPDF',
C_OPER TYPE SYOPSYS VALUE 'Windows NT'.
DATA: T_RESULT TYPE STANDARD TABLE OF BTCXPM.
V_DIR_INPUT = COMMAND_LIST-OPCOMMAND.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = C_EXTCOM
ADDITIONAL_PARAMETERS = V_DIR_INPUT
OPERATINGSYSTEM = C_OPER
TABLES
EXEC_PROTOCOL = T_RESULT
EXCEPTIONS
NO_PERMISSION = 1
COMMAND_NOT_FOUND = 2
PARAMETERS_TOO_LONG = 3
SECURITY_RISK = 4
WRONG_CHECK_CALL_INTERFACE = 5
PROGRAM_START_ERROR = 6
PROGRAM_TERMINATION_ERROR = 7
X_ERROR = 8
PARAMETER_EXPECTED = 9
TOO_MANY_PARAMETERS = 10
ILLEGAL_COMMAND = 11
WRONG_ASYNCHRONOUS_PARAMETERS = 12
CANT_ENQ_TBTCO_ENTRY = 13
JOBCOUNT_GENERATION_ERROR = 14
OTHERS = 15.
OPEN DATASET L_FILE FOR INPUT IN BINARY MODE.
IF SY-SUBRC = 0.
READ DATASET L_FILE INTO ITAB_ATTACH.
CLOSE DATASET L_FILE.
ENDIF.
CALL METHOD CL_BCS_CONVERT=>XSTRING_TO_SOLIX
EXPORTING
IV_XSTRING = ITAB_ATTACH
RECEIVING
ET_SOLIX = T_ATTACHMENT.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GS_DOCDATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = GT_OBJPACK
CONTENTS_BIN = GT_OBJBIN
CONTENTS_HEX = T_ATTACHMENT
RECEIVERS = GT_RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
WRITE 'SENT SUCCESSFULLY'.
ENDIF.
ENDFORM. " smart_form
*****************************************************************************************************************************************************************
Thanks
Pavan
Hi all,
My requirement is to sent email a password protected PDF that is generated from a smartform.
I have gone through many posts and made the development, however the pdf is mailed but not opening and giving the error "The file is damaged and could not be opened".
The steps the followed as as below
1. Go to SM69 and create a new external system.
2. Generated the FM name using "SSF_FUNCTION_MODULE_NAME"
3. Called the above generated FM with options and imported the OTFDATA table.
4. Converted the OTF data Tab to Lines using FM "CONVERT_OTF".
5. Stored the file to in server using read dataset. (I have downloaded the file and it is opening properly, may be issue is from the below steps)
6. Executed the FM's SXPG_COMMAND_LIST_GET, SXPG_COMMAND_CHECK and SXPG_COMMAND_EXECUTE to make the pdf password protected.
7. Finally sent the pdf as mail attachment using FM "SO_NEW_DOCUMENT_ATT_SEND_API1".
The mail is sent but the pdf is not opening.
Please find the code attached.
*****************************************************************************************************************************************************************
REPORT ZSDS_PGI_PRINT.
TABLES : EKPO.
************************************************************************
***** I-N-T-E-R-N-A-L T-A-B-L-E-S D-E-C-L-A-R-A-T-I-O-N A-R-E-A ****
************************************************************************
DATA : T_DATA TYPE STANDARD TABLE OF EKPO.
************************************************************************
********** W-O-R-K--A-R-E-A D-E-C-L-A-R-A-T-I-O-N ***********
************************************************************************
DATA : WA_DATA TYPE EKPO.
************************************************************************
****** V-A-R-I-A-B-L-E-S D-E-C-L-A-R-A-T-I-O-N A-R-E-A *******
************************************************************************
DATA : FM_NAME TYPE RS38L_FNAM,
CONTROL TYPE SSFCTRLOP,
OUTPUT_OPTIONS TYPE SSFCOMPOP,
XSFPARAM_LINE TYPE SSFXSFP.
DATA : GS_OTFDATA TYPE SSFCRESCL,
GT_OTF TYPE TABLE OF ITCOO.
DATA : GT_LINES TYPE STANDARD TABLE OF TLINE,
GS_LINES TYPE TLINE.
DATA : BIN_FILE TYPE XSTRING.
DATA : GS_DOCDATA TYPE SODOCCHGI1.
DATA : GS_RECLIST TYPE SOMLRECI1,
GT_RECLIST TYPE STANDARD TABLE OF SOMLRECI1.
DATA : GT_OBJBIN TYPE STANDARD TABLE OF SOLISTI1,
GS_OBJBIN TYPE SOLISTI1.
DATA : GS_OBJPACK TYPE SOPCKLSTI1,
GT_OBJPACK TYPE STANDARD TABLE OF SOPCKLSTI1.
DATA : ITAB_ATTACH TYPE XSTRING .
DATA : T_ATTACHMENT TYPE SOLIX_TAB.
************************************************************************
******** S-E-L-E-C-T-I-O-N S-C-R-E-E-N ************
************************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-099.
SELECT-OPTIONS : S_EBELN FOR EKPO-EBELN.
SELECTION-SCREEN : END OF BLOCK B1.
************************************************************************
******** S-T-A-R-T O-F S-E-L-E-C-T-I-O-N ************
************************************************************************
START-OF-SELECTION.
PERFORM GET_DATA.
IF NOT T_DATA IS INITIAL.
PERFORM PRINTER_SETTINGS.
PERFORM SMART_FORM.
ELSE.
MESSAGE 'No Entries Found' TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
SELECT * FROM EKPO INTO TABLE T_DATA
UP TO 10 ROWS.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form printer_settings
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRINTER_SETTINGS .
* activate XSF Output Mode
OUTPUT_OPTIONS-XSF = ' '. " XSF Output active
OUTPUT_OPTIONS-XSFCMODE = 'X'. " Get XSF params from program
OUTPUT_OPTIONS-XSFOUTMODE = 'S'. " Application
CLEAR OUTPUT_OPTIONS-XSFOUTDEV.
OUTPUT_OPTIONS-XSFACTION = 'http://www.sap.com'.
OUTPUT_OPTIONS-XSFFORMAT = 'X'. " Formatting ON
XSFPARAM_LINE-NAME = 'GRAPHICS'.
XSFPARAM_LINE-VALUE = 'EXTRACT'.
APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.
XSFPARAM_LINE-NAME = 'GRAPHICS-DIRECTORY'.
* xsfparam_line-value = c_gr_dir.
APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.
XSFPARAM_LINE-NAME = 'CONTENT-ID'.
XSFPARAM_LINE-VALUE = 'ENABLE'.
APPEND XSFPARAM_LINE TO OUTPUT_OPTIONS-XSFPARS.
OUTPUT_OPTIONS-TDIMMED = 'X'.
OUTPUT_OPTIONS-TDNEWID = ' '.
OUTPUT_OPTIONS-TDNOPRINT = ' '.
OUTPUT_OPTIONS-TDDEST = 'LOCL'.
* silent mode ON
CONTROL-NO_DIALOG = 'X'.
CONTROL-PREVIEW = ''.
CONTROL-GETOTF = 'X'.
ENDFORM. " printer_settings
*&---------------------------------------------------------------------*
*& Form smart_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SMART_FORM .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZPDF_PWD'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
WRITE: / 'ERROR 1'.
ENDIF.
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = CONTROL
OUTPUT_OPTIONS = OUTPUT_OPTIONS
USER_SETTINGS = SPACE "'X'
IMPORTING
JOB_OUTPUT_INFO = GS_OTFDATA
TABLES
T_DATA = T_DATA
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.
CLEAR GT_OTF.
GT_OTF[] = GS_OTFDATA-OTFDATA[].
CLEAR GT_LINES.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = BIN_FILE
TABLES
OTF = GT_OTF
LINES = GT_LINES
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.
DATA L_FILE TYPE STRING .
CONCATENATE 'c:\usr\sap\IDS\Attendance_record\work' '.PDF' INTO L_FILE.
OPEN DATASET L_FILE FOR OUTPUT IN BINARY MODE .
IF SY-SUBRC = 0 .
LOOP AT GT_LINES INTO GS_LINES .
TRANSFER GS_LINES TO L_FILE .
ENDLOOP.
CLOSE DATASET L_FILE .
ELSE.
WRITE : / 'operating system could not open file' .
ENDIF.
**&******************************************************************
* ASSIGNING THE DESCRIPTION OF THE OBJECT SENT IN MAIL
*&******************************************************************
CLEAR GS_DOCDATA.
GS_DOCDATA-OBJ_NAME = 'SAPRPT'.
GS_DOCDATA-OBJ_DESCR = 'test'.
GS_DOCDATA-OBJ_LANGU = SY-LANGU.
*&******************************************************************************
* ASSIGNING THE EMAIL-ID TO STRUCTURE OF API RECIPIENT LIST TABLE
*&******************************************************************************
CLEAR : GT_RECLIST,GS_RECLIST.
***IF INTERNAL MAIL-ID
* gs_reclist-receiver = sy-uname.
* gs_reclist-rec_type = 'B'.
***IF EXTERNAL MAIL-ID
GS_RECLIST-RECEIVER = '[email protected]'.
GS_RECLIST-REC_TYPE = 'U'.
APPEND GS_RECLIST TO GT_RECLIST.
*&******************************************************************
* PASSING THE SAP SCRIPT LINES TO SAP OFFICE
*&******************************************************************
DATA : GV_LEN TYPE I,
GV_POS TYPE I.
CLEAR : GS_OBJBIN,GS_LINES.
LOOP AT GT_LINES INTO GS_LINES.
GV_POS = 255 - GV_LEN.
IF GV_POS > 134.
GV_POS = 134.
ENDIF.
GS_OBJBIN+GV_LEN = GS_LINES(GV_POS).
GV_LEN = GV_LEN + GV_POS.
IF GV_LEN = 255.
APPEND GS_OBJBIN TO GT_OBJBIN.
CLEAR : GS_OBJBIN,GV_LEN.
IF GV_POS < 134.
GS_OBJBIN = GS_LINES+GV_POS.
GV_LEN = 134 - GV_POS.
ENDIF.
ENDIF.
ENDLOOP.
IF GV_LEN > 0.
APPEND GS_OBJBIN TO GT_OBJBIN.
ENDIF.
*&******************************************************************
* FILLING THE DETAILS IN SAP OFFICE
*&******************************************************************
DATA : GV_TAB_LINES TYPE I.
DESCRIBE TABLE GT_OBJBIN LINES GV_TAB_LINES.
CLEAR GS_OBJBIN.
READ TABLE GT_OBJBIN INTO GS_OBJBIN INDEX GV_TAB_LINES.
IF SY-SUBRC = 0.
GS_OBJPACK-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( GS_OBJBIN ).
GS_OBJPACK-TRANSF_BIN = 'X'.
GS_OBJPACK-HEAD_START = 1.
GS_OBJPACK-HEAD_NUM = 0.
GS_OBJPACK-BODY_START = 1.
GS_OBJPACK-BODY_NUM = GV_TAB_LINES.
GS_OBJPACK-DOC_TYPE = 'PDF'.
GS_OBJPACK-OBJ_NAME = 'ATTACHMENT'.
GS_OBJPACK-OBJ_DESCR = 'TEST'.
APPEND GS_OBJPACK TO GT_OBJPACK.
ENDIF.
*********************************************************************
*********************************************************************
DATA: BEGIN OF COMMAND_LIST OCCURS 0.
INCLUDE STRUCTURE SXPGCOLIST.
DATA: END OF COMMAND_LIST .
DATA: BEGIN OF EXEC_PROTOCOL OCCURS 0.
INCLUDE STRUCTURE BTCXPM.
DATA: END OF EXEC_PROTOCOL.
DATA: STATUS LIKE BTCXP3-EXITSTAT,
COMMANDNAME LIKE SXPGCOLIST-NAME VALUE 'ZDJ_ENCRYPTPDF',
SEL_NO LIKE SY-TABIX.
* GET LIST OF EXTERNAL COMMANDS
CALL FUNCTION 'SXPG_COMMAND_LIST_GET'
EXPORTING
COMMANDNAME = COMMANDNAME
OPERATINGSYSTEM = SY-OPSYS
TABLES
COMMAND_LIST = COMMAND_LIST
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'SXPG_COMMAND_CHECK'
EXPORTING
COMMANDNAME = COMMAND_LIST-NAME
OPERATINGSYSTEM = SY-OPSYS
EXCEPTIONS
NO_PERMISSION = 1
COMMAND_NOT_FOUND = 2
PARAMETERS_TOO_LONG = 3
SECURITY_RISK = 4
WRONG_CHECK_CALL_INTERFACE = 5
X_ERROR = 6
TOO_MANY_PARAMETERS = 7
PARAMETER_EXPECTED = 8
ILLEGAL_COMMAND = 9
COMMUNICATION_FAILURE = 10
SYSTEM_FAILURE = 11
OTHERS = 12.
CLEAR COMMAND_LIST.
REFRESH COMMAND_LIST.
DATA: V_DIR_INPUT TYPE SXPGCOLIST-PARAMETERS.
DATA: V_DIR_INPUT1 TYPE SXPGCOLIST-PARAMETERS.
COMMAND_LIST-NAME = 'ZDJ_ENCRYPTPDF'.
COMMAND_LIST-OPSYSTEM = 'Windows NT'.
DATA : DOC TYPE STRING.
DATA : PASS TYPE STRING ,
NAME(40).
DOC = 'invoice'.
PASS = '123456'.
CONCATENATE 'cmd/c d:\pdf\encryptpdf.exe' DOC'.PDF' INTO NAME.
CONCATENATE 'cmd /c d:\pdf\encryptpdf.exe' '-i' NAME '-o ' NAME '-u' PASS INTO V_DIR_INPUT SEPARATED BY SPACE .
READ TABLE COMMAND_LIST INDEX SEL_NO.
CONCATENATE COMMAND_LIST-OPCOMMAND V_DIR_INPUT INTO COMMAND_LIST-OPCOMMAND SEPARATED BY SPACE.
* CHECK AUTHORIZATION
COMMAND_LIST-ADDPAR = 'X'.
APPEND COMMAND_LIST.
.
CONSTANTS: C_EXTCOM TYPE SXPGCOLIST-NAME VALUE 'ZDJ_ENCRYPTPDF',
C_OPER TYPE SYOPSYS VALUE 'Windows NT'.
DATA: T_RESULT TYPE STANDARD TABLE OF BTCXPM.
V_DIR_INPUT = COMMAND_LIST-OPCOMMAND.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE'
EXPORTING
COMMANDNAME = C_EXTCOM
ADDITIONAL_PARAMETERS = V_DIR_INPUT
OPERATINGSYSTEM = C_OPER
TABLES
EXEC_PROTOCOL = T_RESULT
EXCEPTIONS
NO_PERMISSION = 1
COMMAND_NOT_FOUND = 2
PARAMETERS_TOO_LONG = 3
SECURITY_RISK = 4
WRONG_CHECK_CALL_INTERFACE = 5
PROGRAM_START_ERROR = 6
PROGRAM_TERMINATION_ERROR = 7
X_ERROR = 8
PARAMETER_EXPECTED = 9
TOO_MANY_PARAMETERS = 10
ILLEGAL_COMMAND = 11
WRONG_ASYNCHRONOUS_PARAMETERS = 12
CANT_ENQ_TBTCO_ENTRY = 13
JOBCOUNT_GENERATION_ERROR = 14
OTHERS = 15.
OPEN DATASET L_FILE FOR INPUT IN BINARY MODE.
IF SY-SUBRC = 0.
READ DATASET L_FILE INTO ITAB_ATTACH.
CLOSE DATASET L_FILE.
ENDIF.
CALL METHOD CL_BCS_CONVERT=>XSTRING_TO_SOLIX
EXPORTING
IV_XSTRING = ITAB_ATTACH
RECEIVING
ET_SOLIX = T_ATTACHMENT.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
DOCUMENT_DATA = GS_DOCDATA
PUT_IN_OUTBOX = 'X'
COMMIT_WORK = 'X'
TABLES
PACKING_LIST = GT_OBJPACK
CONTENTS_BIN = GT_OBJBIN
CONTENTS_HEX = T_ATTACHMENT
RECEIVERS = GT_RECLIST
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
ENQUEUE_ERROR = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
WRITE 'SENT SUCCESSFULLY'.
ENDIF.
ENDFORM. " smart_form
*****************************************************************************************************************************************************************
Thanks
Pavan
2015 Sep 28 5:44 AM
2015 Sep 28 7:30 AM
Hi,
Gone through the post,
I have generated the PDF file and saved to application server,
After that I have executed the FMs to make the pdf password protected.
even though I am able too pen the PDF without password.
Thanks
Pavan
2015 Sep 28 6:09 AM
Hi,
First of all I suggest you use cl_bcs for the mail.
if you do not make the PDF password protected is it working ?
Send a binary file as attachment:
The result of this form can be used as attachment to CL_bcs:
FORM upload_file_2
USING
p_path TYPE pathextern
CHANGING
it_solix TYPE solix_tab .
DATA: big_string TYPE xstring .
DATA: mess TYPE string .
OPEN DATASET p_path FOR INPUT IN BINARY MODE MESSAGE mess .
READ DATASET p_path INTO big_string .
CLOSE DATASET p_path .
CALL METHOD cl_bcs_convert=>xstring_to_solix
EXPORTING
iv_xstring = big_string
RECEIVING
et_solix = it_solix.
ENDFORM . "upload_file_2
See also :
note form FORM mail_1_prep_5
Regards .
2015 Sep 29 4:32 AM
Hi,
Thanks for the reply,
Yes, Without PDF password protected it is working.
Thanks,
Pavan.
2015 Sep 29 5:46 AM
2015 Sep 29 6:05 AM
Hi,
I think that "additional_parameters" needs to be just the parameters for encryptpdf.exe
Also when using CONCATENATE use "RESPECTING BLANKS" .
From the help text look at the examples:
Encrypt PDF Command Line Options, Royalty free for developers
Also what is "cmd /c" use for ?
I usually prefer to call a batch file
Like here
note the external command usage
Regards .
2015 Sep 29 6:17 AM
2015 Sep 29 6:22 AM
CONCATENATE 'cmd/c d:\pdf\encryptpdf.exe' DOC'.PDF' INTO NAME.
Why not use L_FILE ?
2015 Sep 29 4:41 AM
I've created a PDF file with smartforms then zip with password. its worked, could you try that.
2015 Sep 29 5:27 AM
Hi,
Yes, I will try,
Could you share something regarding the same.
Thanks,
Pavan.
2015 Sep 30 8:54 AM
program vca.
data: begin of gt_tabl occurs 0,
line(255),
end of gt_tabl.
data: gv_fm_name type rs38l_fnam,
gw_book type ppftbook,
gw_option type ssfcompop,
gw_param type ssfctrlop,
gs_info type ssfcrescl,
gt_pdf type table of tline with header line,
gt_hex type table of solix,
gv_filesize type i,
gv_line type xstring,
gv_unixcmd(255).
parameters p_mail(255) lower case obligatory.
start-of-selection.
clear gv_fm_name.
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'SPPFDEMO_BOOK'
importing
fm_name = gv_fm_name
exceptions
no_form = 1
no_function_module = 2
others = 3.
check sy-subrc = 0.
clear gw_param.
gw_param-getotf = 'X'.
gw_param-no_dialog = 'X'.
clear gw_option.
gw_option-tdnoprev = 'X'.
clear gs_info.
call function gv_fm_name
exporting
output_options = gw_option
control_parameters = gw_param
is_book = gw_book
importing
job_output_info = gs_info
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
check gs_info-otfdata[] is not initial.
refresh gt_pdf.
call function 'CONVERT_OTF'
exporting
format = 'PDF'
use_cascading = 'X'
importing
bin_filesize = gv_filesize
tables
otf = gs_info-otfdata
lines = gt_pdf.
check gt_pdf[] is not initial.
open dataset '/tmp/zip_aix/pdffiles/file_name.pdf'
for output in binary mode.
if sy-subrc = 0.
loop at gt_pdf.
transfer gt_pdf to '/tmp/zip_aix/pdffiles/file_name.pdf'.
endloop.
close dataset '/tmp/zip_aix/pdffiles/file_name.pdf'.
endif.
clear gv_unixcmd.
concatenate 'zip'
'/tmp/zip_aix/'
'-P' 'password'
'/tmp/zip_aix/pdffiles/file_name.pdf'
into gv_unixcmd separated by space.
call 'SYSTEM' ID 'COMMAND' FIELD gv_unixcmd ID 'TAB'
FIELD gt_tabl-*sys*.
if sy-subrc = 0.
open dataset '/tmp/zip_aix/.zip' for input in binary mode.
if sy-subrc = 0.
do.
read dataset '/tmp/zip_aix/.zip' into gv_line.
if sy-subrc <> 0.
exit.
endif.
refresh gt_hex.
call function 'SCMS_XSTRING_TO_BINARY'
exporting
buffer = gv_line
append_to_table = 'X'
importing
output_length = gv_filesize
tables
binary_tab = gt_hex.
enddo.
close dataset '/tmp/zip_aix/.zip'.
endif.
endif.
check gt_hex[] is not initial.
data: gw_document_data type sodocchgi1,
gt_packing_list type sopcklsti1 occurs 0 with header line,
gt_receivers type somlreci1 occurs 0 with header line,
gt_contents_hex type solix occurs 0,
gt_contents_txt type solisti1 occurs 0 with header line,
gt_html type html_table with header line,
gv_sender type so_rec_ext,
gv_idx1 type i,
gv_idx2 type i.
refresh: gt_packing_list,
gt_contents_txt,
gt_contents_hex,
gt_html.
clear gw_document_data.
gw_document_data-obj_name = 'PDF_ZIP'.
gw_document_data-obj_descr = 'file_name'.
gw_document_data-no_change = 'X'.
add gv_filesize to gw_document_data-doc_size.
gv_idx1 = lines( gt_contents_hex ) + 1.
append lines of gt_hex to gt_contents_hex.
gv_idx2 = lines( gt_hex ).
gt_packing_list-transf_bin = 'X'.
gt_packing_list-head_start = 0.
gt_packing_list-head_num = 0.
gt_packing_list-body_start = gv_idx1.
gt_packing_list-body_num = gv_idx2.
gt_packing_list-doc_type = 'ZIP'.
gt_packing_list-obj_name = 'file_name.zip'.
gt_packing_list-obj_descr = 'file_name.zip'.
gt_packing_list-obj_langu = 'E'.
gt_packing_list-doc_size = gv_filesize.
append gt_packing_list.
clear gt_packing_list.
refresh gt_receivers.
gt_receivers-rec_type = 'U'.
gt_receivers-receiver = p_mail.
append gt_receivers.
clear gt_receivers.
call function 'SO_DOCUMENT_SEND_API1'
exporting
document_data = gw_document_data
sender_address = gv_sender
sender_address_type = space
commit_work = 'X'
tables
packing_list = gt_packing_list
contents_txt = gt_contents_txt
contents_hex = gt_contents_hex
receivers = gt_receivers
exceptions
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
others = 8.
submit rsconn01 with mode = 'INT' and return.
clear gv_unixcmd.
gv_unixcmd = 'rm /tmp/zip_aix/pdffiles/file_name.pdf'.
call 'SYSTEM' ID 'COMMAND' FIELD gv_unixcmd ID 'TAB'
FIELD gt_tabl-*sys*.
clear gv_unixcmd.
gv_unixcmd = 'rm /tmp/zip_aix/.zip'.
call 'SYSTEM' ID 'COMMAND' FIELD gv_unixcmd ID 'TAB'
FIELD gt_tabl-*sys*.
2015 Sep 30 9:09 AM
Hi Pavan.,
I created path name /tmp/zip_aix/ and /tmp/zip_aix/pdffiles at SAP R3 for keep PDF file and convert to ZIP file, then I used unix commpand -P for add password and sent to email address.
when I input "password" the PDF file was opend.
Budtawan Vu
2021 Jan 02 1:56 PM
Can you help me please ?
I have same requirement. Send pdf with password protected.
2021 Jan 02 1:55 PM
hi Budtawan Vu,
Can you help me please ?
I have same requirement. Send pdf with password protected.
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |