본문 바로가기
ABAP 문법 & 기법

[SAP ABAP] PDF를 SAP 화면에서 바로 보기 — cl_gui_html_viewer 다운로드 없이 조회용

by Song.sh 2026. 5. 14.

SAP에 저장된 PDF 첨부파일이나 사용자가 가지고 있는 PDF 문서를 다운로드 없이 SAP 화면 안에서 바로 보여주고 싶을 때 가 있습니다. 견적서·계약서·증빙·시방서 같은 문서를 사용자가 클릭만으로 열람할 수 있게 만들면 업무 흐름이 매우 매끄러워집니다.

 

SAP는 별도의 PDF 뷰어 컨트롤을 제공하지 않지만, HTML 뷰어 컨트롤(cl_gui_html_viewer) 이 브라우저 엔진(Edge/Chromium 기반) 을 사용하므로, PDF URL을 그대로 넘기면 브라우저처럼 PDF를 표시해줍니다. ABAP 코드 몇 줄로 SAP 안에 PDF 뷰어를 띄울 수 있다는 뜻.

 

이 글은 로컬 PC 또는 URL의 PDF를 SAP 화면 안에서 다운로드 없이 보여주는 간단한 패턴을 정리한 메모입니다.


핵심 원리

cl_gui_html_viewer 는 원래 HTML 컨텐츠를 SAP 컨테이너에 그리기 위한 클래스지만, 내부적으로 브라우저 컴포넌트를 사용하기 때문에 PDF·이미지·일반 웹 페이지 모두 표시 가능 합니다.

단계 처리 API
1 PDF 파일 경로(URL) 확보 file_open_dialog 또는 DB·아카이브에서 조회
2 HTML 뷰어 컨테이너 생성 NEW cl_gui_html_viewer( parent = ... )
3 PDF URL 표시 o_html->show_url( url = ..., in_place = abap_true )
4 SAP 툴바 정리 cl_abap_list_layout=>suppress_toolbar( )

핵심 트릭은 show_url 에 PDF 경로를 그대로 넘기면 브라우저가 알아서 PDF 뷰어로 렌더링 한다는 점입니다.


1단계 — 파일 선택 다이얼로그

사용자가 PDF 파일을 선택하도록 다이얼로그를 띄웁니다. DB·아카이브 링크에 저장된 PDF를 보여주는 경우라면 이 단계 대신 그쪽 URL 또는 임시 파일 경로를 사용.

DATA: it_sel_filetab TYPE filetable,
      ret_code       TYPE i,
      lv_action      TYPE i.

cl_gui_frontend_services=>file_open_dialog(
  EXPORTING
    window_title   = 'PDF 파일 열기'
    multiselection = abap_false
  CHANGING
    file_table     = it_sel_filetab
    rc             = ret_code        " 선택된 파일 개수, 오류 시 -1
    user_action    = lv_action ).

IF lv_action <> cl_gui_frontend_services=>action_ok.
  RETURN.   " 사용자가 취소
ENDIF.

선택된 PDF 경로는 it_sel_filetab[ 1 ]-filename 에 담깁니다.


2단계 — HTML 뷰어 컨테이너 생성

뷰어를 어디에 그릴지 컨테이너를 잡습니다. 가장 단순한 방법은 SAP 표준 출력 화면(cl_gui_container=>default_screen) 을 그대로 사용하는 것.

DATA(o_html) = NEW cl_gui_html_viewer(
                   parent = cl_gui_container=>default_screen ).

CBO 화면에 임베드하고 싶다면 cl_gui_custom_container(스크린 페인터의 Custom Container 컨트롤) 을 parent로 넘기는 패턴.


3단계 — show_url 로 PDF 표시

PDF 경로를 show_url 에 넘기면 끝입니다.

o_html->show_url(
  url      = it_sel_filetab[ 1 ]-filename
  in_place = abap_true ).

 

파라미터 의미
url PDF 파일의 경로 — 로컬(C:\TEMP\file.pdf) 또는 HTTP URL 둘 다 가능
in_place = abap_true 새 창 띄우지 않고 현재 컨테이너 안에서 표시
in_place = abap_false 기본 브라우저로 외부 창에서 열기 (다운로드 효과)

조회 용도라면 in_place = abap_true 가 정답. SAP 안에서 PDF가 그대로 보입니다.


4단계 — SAP 표준 툴바 숨기기

기본 출력 화면을 컨테이너로 쓰면 위쪽에 빈 SAP 툴바가 남습니다. 깔끔하게 보이려면 cl_abap_list_layout=>suppress_toolbar( ) 로 숨기고, 화면을 강제로 활성화하기 위해 의미 없는 WRITE 한 줄을 추가합니다.

" 빈 SAP 툴바 숨기기
cl_abap_list_layout=>suppress_toolbar( ).

" default_screen 강제 활성화 (WRITE가 있어야 출력 화면이 뜸)
WRITE: / space.

이 단계는 default_screen 을 컨테이너로 쓸 때만 필요합니다. 별도 CBO 화면에 임베드할 때는 생략.


전체 코드

위 4단계를 하나로 합치면 SE38에 바로 붙여 넣어 실행할 수 있는 짧은 프로그램이 됩니다.

TRY.
    DATA: it_sel_filetab TYPE filetable,
          ret_code       TYPE i,
          lv_action      TYPE i.

    " 1) 파일 선택 다이얼로그
    cl_gui_frontend_services=>file_open_dialog(
      EXPORTING
        window_title   = 'PDF 파일 열기'
        multiselection = abap_false
      CHANGING
        file_table     = it_sel_filetab
        rc             = ret_code
        user_action    = lv_action ).

    IF lv_action = cl_gui_frontend_services=>action_ok.

      " 2) HTML 뷰어 컨테이너 생성
      DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).

      " 3) PDF 화면에 표시
      o_html->show_url(
        url      = it_sel_filetab[ 1 ]-filename
        in_place = abap_true ).

      " 4) SAP 표준 툴바 숨기기 + 출력 화면 활성화
      cl_abap_list_layout=>suppress_toolbar( ).
      WRITE: / space.

    ENDIF.

  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

응용 — DB·아카이브 PDF 그대로 보기

이 패턴의 진짜 가치는 SAP 내부에 저장된 PDF 첨부파일 을 사용자가 다운로드 없이 바로 볼 수 있게 만드는 것입니다.

저장 위치 URL/임시 파일로 전환
로컬 PC 파일 파일 경로 그대로 show_url
DB에 XSTRING 으로 저장된 PDF 임시 파일(C:\TEMP\xxx.pdf) 로 gui_download(BIN) 후 그 경로를 show_url
아카이브 링크(컨텐트 서버) ARCHIVOBJECT_GET_TABLE 등으로 바이너리 받고 임시 파일 → show_url
외부 HTTP URL URL 그대로 show_url (인증 필요한 경우는 추가 처리)

DB 저장 PDF는 SAP GUI가 직접 메모리에서 띄울 수 없으므로 클라이언트 PC 임시 폴더에 파일로 한 번 떨어뜨린 뒤 그 경로를 show_url 에 넘기는 패턴이 표준. 사용자 입장에서는 "다운로드 → 더블 클릭 → 별도 창" 없이 SAP 화면 안에서 PDF가 펼쳐지는 경험이 됩니다.


흔히 빠뜨리는 함정

default_screen 사용 시 WRITE 누락

default_screen출력 화면이 활성화되어야 컨트롤이 표시됩니다. WRITE 라인이 한 줄도 없으면 출력 화면이 안 떠서 PDF도 안 보임. 의미 없는 WRITE: / space. 한 줄이 필요한 이유.

in_place 옵션 누락

in_place 를 안 주거나 abap_false 로 두면 PDF가 외부 브라우저에서 열리거나 다운로드 다이얼로그가 뜸. 조회 용도면 반드시 abap_true.

SAP GUI 내장 브라우저 엔진 의존

cl_gui_html_viewer 는 OS의 기본 브라우저 엔진을 사용. 옛 SAP GUI(7.x 이하) 에서는 IE 엔진을 쓰기 때문에 최신 PDF 보안 옵션 일부가 동작하지 않을 수 있음. 최신 SAP GUI 는 Edge/Chromium 기반이라 대부분의 PDF 정상 렌더링.

컨테이너 메모리 누수

뷰어 컨트롤은 명시적으로 해제하지 않으면 컨테이너가 살아남아 메모리에 잔존할 수 있음. 화면을 닫을 때 o_html->free( ) 또는 GC 호출 고려.

로컬 경로의 한글·공백

C:\문서\테스트.pdf 같은 한글 포함 경로는 일부 환경에서 깨짐. C:\TEMP\file.pdf 같은 ASCII 경로 권장. URL 인코딩(cl_http_utility=>escape_url) 적용도 옵션.

서버 사이드 실행 불가

cl_gui_html_viewer 는 SAP GUI 클라이언트 컨트롤. 배치 잡(SM37) 또는 RFC 호출에서는 동작 안 함.


요약

단계 처리 핵심
1 PDF 경로 확보 file_open_dialog 또는 DB·아카이브 → 임시 파일
2 HTML 뷰어 생성 NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen )
3 PDF 표시 show_url( url, in_place = abap_true )
4 화면 정리 cl_abap_list_layout=>suppress_toolbar( ) + WRITE: / space

PDF 뷰어 컨트롤을 따로 찾을 필요 없이 HTML 뷰어 + show_url 조합만 알면 됩니다. 사용자 측면에서는 첨부 파일을 매번 다운로드해서 열어 보지 않아도 되므로 업무 흐름이 매우 매끄러워지고, 개발 측면에서도 ABAP 짧은 코드 한 번이면 끝나는 가성비 좋은 패턴입니다. CBO 화면에 첨부 미리보기 기능을 얹을 때 특히 효과적입니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. cl_gui_html_viewer 는 SAP GUI 클라이언트의 브라우저 엔진을 사용하므로 SAP GUI 버전·Windows 환경에 따라 동작이 다를 수 있습니다. 운영 환경 적용 전 개발 시스템에서 PDF 렌더링·툴바 표시 등을 확인하시기 바랍니다.