웹딘프로 PDF 작성인: 김홍파 작성일: 2008.02.04
개요 본 문서는 이미 스마트폼을 만들어놓은 상황에서 어떻게 웹딘프로에서 PDF 로 출력하는가를 설명한 Tutorial 문서이다.
Step - 1 웹딘프로 컴포넌트를 생성하고 애플리케이션을 만들어준다.
Step – 2 컴포넌트 컨트롤러에서 PDF 노드를 생성해주고 카디날러티를 1:1로 해준다.
Step – 3 PDF 노드에 ‘SOURCE’라는 이름으로 attribute를 추가해주고 타입은 Xstring으로 해준다.
Step - 4 웹딘프로 컴포넌트에서 ‘pdfview’라는 이름으로 view를 하나 생성시켜주고 window 에 embedded 시킨다. View의 layout에서 ‘interactive_form’ 이라는 이름으로 interactiveform 타입의 element를 생성하여준다. Height 와 width속성을 각각 800px 와 1000 px 로 수정하여 준다.
Step - 5 Pdfview의 context에서 컴포넌트 컨트롤러의 pdf 노드를 context mapping 시켜준다.
Step - 6 다시 pdfview 의 layout 으로 돌아가 interactiveform을 클릭한뒤 pdfsource의 오른쪽에 있는 버튼을 클릭하여 pdf 노드의 source attribute를 선택하여 binding 시켜 준다.
Step - 7 컴포넌트 컨트롤러의 methods 탭에서 displaypdf라는 메소드를 생성하여 준다. 여기에 들어갈 소스는 본 문서의 제일 마지막 소스를 참조.
Step - 8 Pdfview의 wddoinit 메소드의 위와 같은 소스 삽입
Step - 9 웹딘프로 애플리케이션을 실행
Displaypdf 메소드에 들어갈 코드 – 1 DATA : l_x(1) VALUE 'X'. DATA: lv_text TYPE char3, lv_syucomm TYPE char1, ls_pdf TYPE xstring, lv_fm_name TYPE rs38l_fnam, lv_control_parameters TYPE ssfctrlop, lv_output_options TYPE ssfcompop, lv_ssf_output TYPE ssfcrescl, lt_otfdata TYPE TABLE OF itcoo. DATA: node_input1 TYPE REF TO if_wd_context_node, elem_input1 TYPE REF TO if_wd_context_element. ***** 스크린에서 데이타를 받아와서 스마트 폼을 출력할때 * navigate from <CONTEXT> to <INPUT1> via lead selection *node_input1 = wd_context->get_child_node( name = *ig_componentcontroller=>wdctx_zinput ). ** get element via lead selection *elem_input1 = node_input1->get_element( ). ** get all declared attributes *elem_input1->get_static_attributes( *importing *static_attributes = stru_input1 ).
Displaypdf 메소드에 들어갈 코드 – 2 CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'Z_WD_SMARTFORMS' IMPORTING fm_name = lv_fm_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. * Error MESSAGE ENDIF.
Displaypdf 메소드에 들어갈 코드 – 3 * Set relevant control parameters lv_control_parameters-getotf = l_x. "OTF output lv_control_parameters-no_dialog = l_x. "No print dialog lv_control_parameters-preview = space. "No preview * Set relevant output options lv_output_options-tdnewid = l_x. "Print parameters, lv_output_options-tdDEST = 'LP01'. "Print parameters, lv_output_options-tddelete = space. "Print parameters,
Displaypdf 메소드에 들어갈 코드 – 4 CALL FUNCTION lv_fm_name EXPORTING control_parameters = lv_control_parameters output_options = lv_output_options user_settings = space * pernr = stru_input1-zpernr * reinr = stru_input1-zreinr * pdvrs = stru_input1-zpdvrs IMPORTING * DOCUMENT_OUTPUT_INFO job_output_info = lv_ssf_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.
Displaypdf 메소드에 들어갈 코드 – 5 REFRESH lt_otfdata. lt_otfdata[] = lv_ssf_output-otfdata[]. CALL FUNCTION 'SSFCOMP_PDF_PREVIEW' EXPORTING i_otf = lt_otfdata EXCEPTIONS convert_otf_to_pdf_error = 1 cntl_error = 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.
Displaypdf 메소드에 들어갈 코드 – 6 DATA: l_dummy TYPE STANDARD TABLE OF tline, pdf_data TYPE xstring, pdf_size TYPE i. CLEAR: pdf_data, pdf_size. * convert otf to pdf CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_filesize = pdf_size bin_file = pdf_data TABLES otf = lt_otfdata[] lines = l_dummy EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 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.
Displaypdf 메소드에 들어갈 코드 – 7 DATA: node_pdf TYPE REF TO if_wd_context_node, elem_pdf TYPE REF TO if_wd_context_element, stru_pdf TYPE if_componentcontroller=>element_pdf , item_source LIKE stru_pdf-source. * navigate from <CONTEXT> to <PDF> via lead selection node_pdf = wd_context->get_child_node( name = if_componentcontroller=>wdctx_pdf ). * get element via lead selection elem_pdf = node_pdf->get_element( ). * set single attribute elem_pdf->set_attribute( EXPORTING name = `SOURCE` value = pdf_data ).