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 렌더링·툴바 표시 등을 확인하시기 바랍니다.