180 likes | 376 Views
웹딘프로 PDF. 작성인 : 김홍파 작성일 : 2008.02.04. 개요. 본 문서는 이미 스마트폼을 만들어놓은 상황에서 어떻게 웹딘프로에서 PDF 로 출력하는가를 설명한 Tutorial 문서이다. Step - 1. 웹딘프로 컴포넌트를 생성하고 애플리케이션을 만들어준다. Step – 2. 컴포넌트 컨트롤러에서 PDF 노드를 생성해주고 카디날러티를 1:1 로 해준다. Step – 3.
E N D
웹딘프로 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 ).