本文由群内同行提供,十分感谢!
本文档是基于smartforms加密PDF
1.首先我们需要去下载jar应用程序(pdfbox-app-1.8.6.jar),在SAP使用事务码CG3Z进行对jar的上传。
上传之后,我们可以在事务码AL11查看该文件,
2.使用SAP事务码SM69创建定制的外部操作系统命令
由于本次测试的系统是Linux系统,Windows的没有测试,如果上面操作不行,则采用以下方式,
3.叫basis人员在sap下载java jdk插件
PS:本示例原理参考执行CMD,命令符:java -jar D:\pdfbox-app-1.8.6.jar Encrypt -U12345 C:\Users\Administrator\Desktop\1.pdf C:\Users\Administrator\Desktop\2.pdf
java -jar :执行jar
D:\pdfbox-app-1.8.6.jar : jar文件路径
Encrypt : 加密操作
-U 12345 :加密密码
C:\Users\Administrator\Desktop\1.pdf :文件输入路径
C:\Users\Administrator\Desktop\2.pdf : 文件输出路径
代码示例:
REPORT ZTEST_LIJS1.*****test pdf *********DATA: L_FORMULARIO TYPE TDSFNAME,
L_FUN TYPE RS38L_FNAM,
V_LANGUAGE TYPE SFLANGU,
V_E_DEVTYPE TYPE RSPOPTYPE,
ST_OUTPUT_OPTIONS TYPE SSFCOMPOP,
ST_CONTROL_PARAMETERS TYPE SSFCTRLOP,
ST_DOCUMENT_OUTPUT_INFO TYPE SSFCRESPD,
ST_JOB_OUTPUT_INFO TYPE SSFCRESCL,
ST_JOB_OUTPUT_OPTIONS TYPE SSFCRESOP,
OTF_DATA TYPE TSFOTF,
GD_BUFFER TYPE STRING,
V_BIN_FILESIZE TYPE I,
IT_DOCS TYPE STANDARD TABLE OF DOCS,
IT_LINES TYPE STANDARD TABLE OF TLINE,
WA_LINES LIKE LINE OF IT_LINES,
L_FILE TYPE STRING,
IT_PARAMS TYPE TABLE OF BTCXPGPAR,
WA_PARAMS LIKE LINE OF IT_PARAMS,
L_CMD LIKE SXPGCOLIST-NAME,
UNIQUE_NAME TYPE SYSUUID_C.DATA:LS_ZSFI0012 LIKE ZSFI0012.
V_LANGUAGE = 'E'.CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
EXPORTING
I_LANGUAGE = V_LANGUAGE
I_APPLICATION = 'SAPDEFAULT'
IMPORTING
E_DEVTYPE = V_E_DEVTYPE.
ST_OUTPUT_OPTIONS-TDPRINTER = V_E_DEVTYPE.
ST_CONTROL_PARAMETERS-NO_DIALOG = 'X'.
ST_CONTROL_PARAMETERS-GETOTF = 'X'.
L_FORMULARIO = 'ZFMFI002'."smartformsCALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = L_FORMULARIO
IMPORTING
FM_NAME = L_FUN
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.CALL FUNCTION L_FUN
EXPORTING
CONTROL_PARAMETERS = ST_CONTROL_PARAMETERS
OUTPUT_OPTIONS = ST_OUTPUT_OPTIONS
LS_ZSFI0012 = LS_ZSFI0012
IMPORTING
DOCUMENT_OUTPUT_INFO = ST_DOCUMENT_OUTPUT_INFO
JOB_OUTPUT_INFO = ST_JOB_OUTPUT_INFO
JOB_OUTPUT_OPTIONS = ST_JOB_OUTPUT_OPTIONS
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
OTF_DATA = ST_JOB_OUTPUT_INFO-OTFDATA.CALL FUNCTION 'CONVERT_OTF_2_PDF' "将smartforms转换PDF
IMPORTING
BIN_FILESIZE = V_BIN_FILESIZE
TABLES
OTF = OTF_DATA
DOCTAB_ARCHIVE = IT_DOCS
LINES = IT_LINES
EXCEPTIONS
ERR_CONV_NOT_POSSIBLE = 1
ERR_OTF_MC_NOENDMARKER = 2
OTHERS = 3.CALL FUNCTION 'SYSTEM_UUID_C_CREATE'
IMPORTING
UUID = UNIQUE_NAME.CONCATENATE 'C:\' UNIQUE_NAME '.PDF' INTO L_FILE.OPEN DATASET L_FILE FOR OUTPUT IN BINARY MODE .IF SY-SUBRC = 0 .
LOOP AT IT_LINES INTO WA_LINES.
TRANSFER WA_LINES TO L_FILE .
ENDLOOP.
CLOSE DATASET L_FILE .
"password <space> file
"连接 密码 输入路径 输出路径
CONCATENATE '12345' L_FILE L_FILE INTO WA_PARAMS SEPARATED BY SPACE.
"调用在SM69设置的外部命令
L_CMD = 'Z_PDF_ENCRYPT'.
CALL FUNCTION 'SXPG_COMMAND_EXECUTE' "执行命令
EXPORTING
COMMANDNAME = L_CMD
OPERATINGSYSTEM = 'Linux'
ADDITIONAL_PARAMETERS = WA_PARAMS
EXCEPTIONS
OTHERS = 15.
IF SY-SUBRC = 0.
CLOSE DATASET L_FILE.
OPEN DATASET L_FILE FOR INPUT IN BINARY MODE.
IF SY-SUBRC EQ 0.
REFRESH IT_LINES.
DO.
CLEAR WA_LINES.
READ DATASET L_FILE INTO WA_LINES.
IF SY-SUBRC = 0.
APPEND WA_LINES TO IT_LINES.
ELSE.
IF WA_LINES IS NOT INITIAL.
APPEND WA_LINES TO IT_LINES.
ENDIF.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET L_FILE.
"send PDF by email / save as pdf …
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = 'C:\TEMP\1.PDF'
FILETYPE = 'BIN'
TABLES
DATA_TAB = IT_LINES
EXCEPTIONS
OTHERS = 15.
ENDIF.
ENDIF.
"remove temp file from app server
DELETE DATASET L_FILE.ENDIF.