Algorithm for the PDF data transmission:
Outbound:
-
Read the PDF file into an internal table ( via
program ) – Binary form
-
Convert Binary table data into Xstring
-
Encode Xsting Data into Base64 format
-
Create an Idoc with the Base 64 format
Inbound:
-
Receive/read the idoc
-
Decode Base64 data into Xstring
-
Xstring into to Binary
-
Binary file store in directory
-
Create pdf file from the directory
Very simple and sample Code attached :
*&---------------------------------------------------------------------*
*& Report ZTESTPDF_IDOC
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTESTPDF_IDOC.
** Created sample for for POC **
** By Giridhar Pujari **
** Please dont delete **
tables: Z1FDATA,Z1FLINE,EDID4.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: p_fpath LIKE rlgrap-filename,
P_B64 as checkbox,
P_IDOC AS checkbox default 'X'.
SELECTION-SCREEN END OF BLOCK blk1.
Selection-screen begin of block blk2 with frame title Text-002.
Parameters: P_D64 as checkbox,
P_IDOC1 like Edid4-DOCNUM.
* p_file2 LIKE rlgrap-filename.
Selection-screen end of block blk2.
Data: p_file LIKE rlgrap-filename.
**********************************************
DATA: i_idoc_data LIKE edidd OCCURS 0 WITH HEADER LINE.
DATA: i_idoc_control LIKE edidc OCCURS 0 WITH HEADER LINE.
DATA: control_record LIKE edidc.
data: i_communication like edidc occurs 0 with header line.
data: begin of l_bitmap occurs 0,
l(1000) type x,
end of l_bitmap.
data: begin of base64 occurs 0,
Sdata(1000) Type C,
end of base64.
data: l_filename type string,
l_bytecount type i,
l_type_in(4) type c,
l_type_out(4) type c.
data: l_itflines type standard table of tline,
l_textheader type thead.
DATA: lv_filename TYPE string.
DATA: lv_path TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_content TYPE xstring.
DATA: lv_length TYPE i.
DATA: lv_rc TYPE sy-subrc.
data: sigdata type XSTRING.
data: sigdata_b64 type STRING.
data: sigdata_test type STRING.
DATA: i_ZFLINE Like z1fline,
i_Z1FDATA like Z1FDATA.
Data: i_ZPDDATA like ZPDDATA.
data: header_segment_name like edidd-segnam value 'ZFLINE',
item_segment_name like edidd-segnam value 'Z1FDATA'.
data: len Type i.
Data: Flag type C.
*&---------------------------------------------------------------------*
*& AT SELECTION SCREEN EVENT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fpath.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_fpath.
Start-of-selection.
If not p_fpath is initial.
l_filename = p_fpath.
call function 'GUI_UPLOAD'
exporting
filename = l_filename
filetype = 'BIN'
importing
filelength = l_bytecount
tables
data_tab = l_bitmap.
IF Sy-subrc eq 0.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
INPUT_LENGTH = l_bytecount
* FIRST_LINE = 0
* LAST_LINE = 0
IMPORTING
BUFFER = lv_content
TABLES
BINARY_TAB = l_bitmap
* EXCEPTIONS
* FAILED = 1
* OTHERS = 2
.
IF SY-SUBRC eq 0.
Write:/ lv_content.
* Implement suitable error handling here
CALL FUNCTION 'SSFC_BASE64_ENCODE'
EXPORTING
BINDATA = lv_content
* BINLENG =
IMPORTING
B64DATA = sigdata_b64
* EXCEPTIONS
* SSF_KRN_ERROR = 1
* SSF_KRN_NOOP = 2
* SSF_KRN_NOMEMORY = 3
* SSF_KRN_OPINV = 4
* SSF_KRN_INPUT_DATA_ERROR = 5
* SSF_KRN_INVALID_PAR = 6
* SSF_KRN_INVALID_PARLEN = 7
* OTHERS = 8
.
IF SY-SUBRC EQ 0.
* Implement suitable error handling here
New-page.
Write 'BASE64 Data'.
write Sigdata_b64.
ENDIF.
* Sending an IDoc.
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
EXPORTING
TEXT = sigdata_b64
* IMPORTING
* LENGTH =
TABLES
FTEXT_TAB = base64
.
Len = strlen( sigdata_b64 ).
*
*CALL FUNCTION 'CONVERT_STRING_TO_TABLE'
* EXPORTING
* I_STRING = sigdata_b64
* I_TABLINE_LENGTH = Len
* TABLES
* ET_TABLE = l_bitmap
* .
*If Sy-subrc eq 0.
control_record-mestyp = 'YGLPDF'.
control_record-rcvprt = 'LS'.
control_record-idoctp = 'YPDF_FILE'.
control_record-rcvprn = 'PX8'.
Loop at base64.
If Flag is initial.
Move 'ZPHEADER' to i_idoc_data-segnam.
Move 'BEPPPAYDATEEMPNO' to i_idoc_data-Sdata.
MOVE sy-mandt TO i_idoc_data-mandt.
Append i_idoc_data.
flag = 'X'.
Endif.
i_ZPDDATA-ZDAta = base64-sdata.
MOVE i_ZPDDATA TO i_idoc_data-sdata.
MOVE 'Z1FDATA' TO i_idoc_data-segnam.
MOVE sy-mandt TO i_idoc_data-mandt.
Append i_idoc_data.
endloop.
.
*endif.
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL = control_record
* OBJ_TYPE = ''
* CHNUM = ''
TABLES
COMMUNICATION_IDOC_CONTROL = i_communication
MASTER_IDOC_DATA = i_idoc_data
* EXCEPTIONS
* ERROR_IN_IDOC_CONTROL = 1
* ERROR_WRITING_IDOC_STATUS = 2
* ERROR_IN_IDOC_DATA = 3
* SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
* OTHERS = 5
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
Endif.
Endif.
endif.
*** Decoding functionality ****
IF not P_D64 is initial.
*Clear lv_content.
*Clear
**refresh l_bitmap.
data: begin of PDFDATA occurs 0,
SDATA like edid4-sdata,
end of pdfdata.
data: SDATA type string.
clear base64.
*Sdata = Sigdata_b64.
*pdfdata = Sigdata_B64.
*
*sigdata_test = pdfdata.
Data: lv_dtint2 type EDI_DTINT2.
*
Select SDATA into table PDFDATA
from EDID4
where DOCNUM = P_IDOC1.
If sy-subrc eq 0.
loop at PDFDATA.
*concatenate PDFDATA-SDATA into sigdata_b64.
CONCATENATE LINES OF PDFDATA INTO sigdata_b64 RESPECTING BLANKS.
endloop.
CALL FUNCTION 'SSFC_BASE64_DECODE'
EXPORTING
B64DATA = sigdata_b64
* B64LENG =
* B_CHECK =
IMPORTING
BINDATA = lv_content
* EXCEPTIONS
* SSF_KRN_ERROR = 1
* SSF_KRN_NOOP = 2
* SSF_KRN_NOMEMORY = 3
* SSF_KRN_OPINV = 4
* SSF_KRN_INPUT_DATA_ERROR = 5
* SSF_KRN_INVALID_PAR = 6
* SSF_KRN_INVALID_PARLEN = 7
* OTHERS = 8
.
IF SY-SUBRC Eq 0.
* Implement suitable error handling here
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = lv_content
* APPEND_TO_TABLE = ' '
* IMPORTING
* OUTPUT_LENGTH = l_bytecount
TABLES
BINARY_TAB = l_bitmap
.
If Sy-subrc eq 0.
**writing file to AL11 and recreating file again with PDF.
P_File = '/local/data/interface/AE.PDF'.
OPEN DATASET P_file FOR OUTPUT IN Binary MODE.
IF Sy-subrc eq 0.
LOOP AT l_bitmap.
TRANSFER l_bitmap TO p_file.
ENDLOOP.
CLOSE DATASET p_file.
endif.
CALL FUNCTION 'ARCHIVFILE_SERVER_TO_CLIENT'
EXPORTING
PATH = '/local/data/interface/AE.PDF'
TARGETPATH = 'C:\Users\G.Pujari\Desktop\BE_Giri1.pdf'
EXCEPTIONS
ERROR_FILE = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
endif.
ENDIF.
*
endif.
endif.