pdf파일을 브라우저에서 뜨지 않게 하기.

By | 2005-09-17

adobe의 pdf 형식으로 된 파일은 만든 환경과 읽는 환경에 상관없이 만든 사람이 의도한대로 문서를 보여주기 때문에 널리 쓰이고 있다. 문서를 만드는 프로그램은 유료지만 보는 프로그램인 아크로뱃 리더는 무료로 배포하고 있지만 아크로뱃리더가 가벼운 프로그램이 아니라서 가뿐한 Foxit PDF Reader를 사용하고 있다.
웹사용성 전문가인 제이콥닐슨이 지난 8월말에 쓴 Open New Windows for PDF and other Non-Web Documents에서 PDF문서를 띄울때는 다른 일반적인 html 문서 링크와는 다르게 새창에서 띄울 것을 제안하였고 아예 브라우저에서 pdf문서를 바로 읽어오지 않도록 하는 것을 최선의 방법으로 추천하였다. 아크로뱃 리더를 설치하면 인터넷익스플로러 및 파이어폭스 안에서 바로 리더기가 플러그인처럼 뜨면서 pdf문서를 브라우저 안에서 불러온다. 제이콥닐슨이 테스트 해본 결과 사람들은 pdf문서가 브라우저 안에서 뜨면 문서를 다 읽고난 다음에 Back 버튼을 누르는게 아니라 브라우저를 닫아버리는 경우가 많다고 한다. (Foxit 리더기는 브라우저 안에서 뜨지 않는데 오히려 이것이 내가 Foxit을 쓰는 이유이기도 하다.)
사용자쪽에서 클릭할때 “다른이름으로 대상저장”을 하거나 아크로뱃리더가 아닌 리더기를 쓰기를 바랄것이아니라 아예 서버쪽에서 pdf파일을 보낼때 브라우저에서 뜨게 하지 않고 다운받기 대화창이 나오게 함으로써 다운받는 사람이 pdf파일을 지금 읽을 것인지 아니면 나중에 읽을 것인지에 대한 결정권을 줄 수 있다.

Offerring PDFs that download에서는 pdf문서를 올려둔 서버 이용자가 할 수 있는 방법을 소개하고 있는데 일반적인 웹호스팅 이용자가 할 수 있는 방법은 두가지다.
첫번째는 pdf파일이 있는 디렉토리 안에 .htacces 파일을 만들고 아래와 같은 내용을 써 넣는다.

SetEnvIf Request_URI "\.pdf$" requested_pdf=pdf
Header add Content-Disposition "Attachment" env=requested_pdf

그러나 이 방법은 웹서버로 쓰는 아파치서버의 버젼이 2 이상이어야 하는 조건이 있다. 지금 내가 쓰고 있는 서버는 1.3대 버젼이어서 이 방법이 통하지 않았다.
두번째 방법은 php 파일을 한번 거치도록 하는 것이다.
아래와 같은 내용을 적은 php 파일 (예를 들면 pdf.php)을 만든다.

<?php
$pdf = $_SERVER['PATH_INFO'];
if(preg_match('/^\/[a-zA-Z0-9_\-]+.pdf$/', $pdf) == 0) {
print "Illegal name: $pdf";
return;
}
header('Content-type: application/pdf');
header('Content-disposition: Attachment');
readfile('path_to_pdfs' . $pdf);
?>

그리고 다운받을 pdf파일을, 이 php파일 뒤에 /파일이름으로 붙여준다. 예를 들자면 http://서버주소/pdf.php/sample.pdf
만약 아크로뱃리더가 깔려 있다면 아래 두 링크를 클릭해봄으로써 어떻게 동작하는지 직접 볼 수 있을 것이다.

  1. https://hof.pe.kr/data/sample.pdf
  2. https://hof.pe.kr/data/pdf.php/sample.pdf

One thought on “pdf파일을 브라우저에서 뜨지 않게 하기.

  1. 블루문

    제이콥의 글은 읽어보지 않았지만 윈도우에 플럭인 혹은 임베딩되었기 때문에 애플리케이션이 아니라 브라우저에서 열어 버리는 문서 포맷의 경우 굉장히 불편하다고 생각함. 뭐랄까… 괜히 친절하다고나할까. UX 관점에서 진지하게 생각하기 보다는 애플리케이션들이 오래전부터 행해오던 “이 PC에선 내 것만 쓰라구!” 전략의 일환이었다고 생각함 🙂

Comments are closed.