10-25-2011 11:20 AM
Hi All,
I am working in Uprgade project(from 4.7c Non-unicode system to ECC6.0 unicode system).
We are facing PDF output issue in ECC6.0 that means we are getting junk character output(screenshot is attached for your reference).
In 4.7c , we have stroed the OTF data in table after generated from smartform as we should not get different output in future. Whenever we need output of the same then we are getting the OTF data from that table and we will generate pdf through "Convert_otf" function module.This logic is working fine in 4.7c.
In ECC6.0 ,the same logic is not working as system is unicode sytem and we are getting junk character output.
As per my old upgrade project experience , i have used the below piece of code for solve this junk character issue but still I am facing the same issue.
Kindly note that in my old upgrade project i have regenerated the OTF data in ECC6.0 and used the below piece of code then I got correct output but here I have to use the old OTF data (from table) which was generated in 4.7c.
Please any one can give solution for this issue.
Regards
Anandakumar.K
+91 9486963561.
-
REPORT z_display_notification_tst.
Local Vairable Declaration
TYPES: lt_pdf_table(1000) TYPE x.
*
Local Vairable Declaration
DATA :
lv_otf_data TYPE STRING, " OTD data in string format
lv_length TYPE i, " OTF Length
lv_lines TYPE i, " No of lines
lv_no_of_recs TYPE int4, " No of OTF Lines
lv_offset TYPE int4, " Offset
pdf_fsize TYPE i,
lv_binfile TYPE xstring,
gv_reportsize TYPE i,
l_url(80) TYPE c,
l_pdf_data TYPE STANDARD TABLE OF lt_pdf_table ,
l_pdf_line TYPE lt_pdf_table,
l_offset TYPE i,
l_len TYPE i,
lt_pdf_table TYPE rcl_bag_tline,
lt_otfdata TYPE tsfotf,
ls_otfdata TYPE itcoo. " Line type of OTF data
*
DATA:
g_html_container TYPE REF TO cl_gui_custom_container,
g_html_control TYPE REF TO cl_gui_html_viewer.
******************GET OTF data from Table ******************************
Primary Keys used for selection : BUSKEY,
NTFTYP,
TRNTYP,
SELECT SINGLE otf_data FROM znotif_otf
INTO lv_otf_data
WHERE buskey EQ 'LS_000000000010001470'
AND ntftyp EQ '0037'
AND trntyp EQ 'ACT'.
Get the length of the OTF data stored as stream of string************
l_len = STRLEN( lv_otf_data ).
Compute the OTF lines
lv_lines = l_len / 72.
*
lv_no_of_recs = lv_lines + 1.
Set the offset to initial
lv_offset = 0.
*
*Reconstruct the OTF data from the string
DO lv_no_of_recs TIMES.
IF sy-index NE lv_no_of_recs .
Get OFT format: command ID
ls_otfdata-tdprintcom = lv_otf_data+lv_offset(2).
lv_offset = lv_offset + 2.
Get OTF format: command parameters
ls_otfdata-tdprintpar = lv_otf_data+lv_offset(70).
lv_offset = lv_offset + 70.
ELSE.
Last line contains only the OFT format: command ID "//" (End of file)
ls_otfdata-tdprintcom = lv_otf_data+lv_offset(2).
lv_offset = lv_offset + 2.
ENDIF.
Append the OTF data to Export OTF table
APPEND ls_otfdata TO lt_otfdata.
*
CLEAR ls_otfdata.
ENDDO.
*************************Convert OTF to PDF**************************
IF lt_otfdata IS NOT INITIAL.
clear: lv_binfile,
pdf_fsize.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = pdf_fsize
bin_file = lv_binfile
TABLES
OTF = lt_otfdata
lines = lt_pdf_table
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
Call screen***********************************
Call screen
CALL SCREEN 100.
RETURN.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
SET TITLEBAR '100'.
Convert bin file
clear :l_len,
l_offset.
free l_pdf_data[].
l_len = XSTRLEN( lv_binfile ).
WHILE l_len >= 1000.
l_pdf_line = lv_binfile+l_offset(1000).
APPEND l_pdf_line TO l_pdf_data.
ADD 1000 TO l_offset.
SUBTRACT 1000 FROM l_len.
ENDWHILE.
*
IF l_len > 0.
l_pdf_line = lv_binfile+l_offset(l_len).
APPEND l_pdf_line TO l_pdf_data.
ENDIF.
Initialise and create the HTML container
IF NOT g_html_container IS INITIAL.
CALL METHOD g_html_container->free
EXCEPTIONS
OTHERS = 0.
CLEAR g_html_container.
ENDIF.
CREATE OBJECT g_html_container
EXPORTING
container_name = 'HTML_CONTAINER'.
Initialise and create the HTML control that will display the
PDF output as URL
IF NOT g_html_control IS INITIAL.
CALL METHOD g_html_control->free
EXCEPTIONS
OTHERS = 0.
CLEAR g_html_control.
ENDIF.
CREATE OBJECT g_html_control
EXPORTING
parent = g_html_container
saphtmlp = 'X'.
Load the pdf data and obtain the URL
CALL METHOD g_html_control->load_data
EXPORTING
size = pdf_fsize
type = 'application'
subtype = 'pdf'
IMPORTING
assigned_url = l_url
CHANGING
data_table = l_pdf_data
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
raise cntl_error.
ENDIF.
CALL METHOD cl_gui_cfw=>flush.
Show the URL
CALL METHOD g_html_control->show_url
EXPORTING
url = l_url.
ENDMODULE. " STATUS_0100 OUTPUT
*****************************************************************************
Edited by: Anandakumar.K on Oct 25, 2011 12:47 PM
Edited by: Anandakumar.K on Oct 25, 2011 12:54 PM
10-26-2011 1:03 PM
Hi,
do you store the data in a customer specific or in a standard table ?
Best regards,
Nils Buerckel
10-31-2011 3:00 PM
Hi,
We are storing the data in customer specific table.
Best Regards
Anandakumar.K
11-02-2011 1:34 PM
Hi,
as you can see in SAP notes 842767 and 1349413, spool data cannot be converted properly for all types in a Unicode conversion.
This might be possible if you have English (US7ASCII) characters only, but with Chinese characters I do not think that a small piece of code can do it ...
Hence I think you need to recreate the data on the Unicode system ...
Best regards,
Nils Buerckel
Edited by: Nils Buerckel on Nov 3, 2011 1:51 PM