IT/기타

스캔된 PDF 파일 페이지 사이즈 맞추기

smores 2016. 2. 25. 16:50

집에 있는 종이책들(주로 전공서적)을 다 없애고 싶어서 스캐닝 하여 PDF 본으로 만들고 버릴 프로젝트를 시작했다. 일단 몇권을 시범적으로 회사에 있는 거대한 프린터/스캐너/팩스 복합기에서 해 보니 엄청 빠르게 스캔을 해 낸다. 문제는 세팅 방법을 잘 몰라서 작은 책을 스캔했는데 어떤때는 종이 사이즈가 딱 맞게, 어떤때는 마치 Letter 용지에 일부분만 커버되는 식으로 스캔이 되고 말았다. 그것도 여러번에 걸쳐 만든 PDF를 pdfsam 으로 다 합치고 나서 종이책은 버리고 난 후에야 알게 되었다.ㅠㅠ






이제 이걸 어떻게 수정하나 고민을 하면서 방법을 찾았기에 잊지 않도록 정리를 해 둔다.


작업 순서


1) pdfsam(VIrtualbox XP 게스트상에 인스톨 되어 있음)을 이용하여 한페이지짜리 PDF들로 다 쪼갠다.


2) linux (우분투 등)의 ghostscript gs 명령어로 한페이지짜리 PDF 파일들을 고해상도 (600dpi) TIFF로 변경한다. 


gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=tiffg4 -r600x600 -sOutputFile=1.tiff -f 1.pdf 


책이 총 597 페이지 짜리이기에 python을 이용해서 간단하게 597줄짜리 shell script로 만들어서 돌려 버렸다.


3) 변환된 tiff 파일들을 Virtualbox XP 게스트로 다시 가져와서 XP에 인스톨 되어 있던 옛 버전 Matlab 2009b 로 간단한 스크립트를 만들어 페이지가 제대로 작게 되어 있는 경우는 (위의 두번째 그림) 그대로 놔 두고, 오버사이즈로 스캔된 경우는 (위의 첫번째 경우) 홀수 페이지 일경우는 좌상단, 짝수는 우상단을 올바른 사이즈로 잘라내어 축소된 TIFF 로 다시 저장한다. 매트랩 스크립트는 대충 다음과 같다. 


for i=1:597

    src = [int2str(i) '.tiff'];

    newfilename = ['r-' src];

    p=imread(src);

    [sy sx]=size(p);

    if sx<4000

        imwrite(p, newfilename, 'TIFF');

    else

        if mod(i,2)==1

            p2=p(1:5100,1:3312);

        else

            p2=p(1:5100,sx-3312:sx);

        end

        imwrite(p2, newfilename, 'TIFF');

    end

    newfilename

end


4) 사이즈 맞추어진 TIFF 들을 다시 모아서 linux로 보내어 tiff2pdf (기본으로 안깔려 있을 가능성이 높다. 우분투의 경우 간단하게   sudo apt-get install libtiff-tools  로 인스톨 한 후 사용 가능하다) 를 이용해서 사이즈 조절된 PDF로 변환한다.


tiff2pdf -o output.pdf input.tiff


역시 python을 이용해서 597줄짜리 shell script로 만들어서 배치 처리를 해 버렸다. 시간이 좀 걸린다.


5) 변환된 PDF 들을 다 모아서 다시 XP 게스트로 보내어 pdfsam 을 이용해서 하나의 PDF로 합쳐버린다. 




위에서 TIFF 사이즈 맞춰 자르는 작업은 다른 언어 등으로도 가능할 터인데 (아마도 perl 이나 python으로도 쉽게 되지 않을까 싶다) 일단 명령어도 알고 있고 익숙한 매트랩이 있었기에 그냥 그것으로 한 경우이다.


간단한 프로그래밍 기술과 XP, Linux 에서 사용 가능한 적절한 툴들, 그리고 그러한 환경을 하나의 PC (Win7 host) 에서 다 돌릴 수 있는 가상머신 기술 덕분에 골치아픈 작업을 수월하게 해결할 수 있었고, 이런 멋진 환경을 제공하는 오늘날의 발전된 IT 기술의 덕을 볼 수 있음에 감사한 생각이 든다.



사족

개인적으로 쓸 목적으로 집에 아예 스캐너를 하나 샀다. Epson DS510. 세전 $250에 샀는데 이거 물건이다. 회사의 거대한 프린터/스캐너 보다 더 쉽고 더 빠른 것 같다.10여분이면 왠만하면 200-250페이지 정도의 책은 한권씩 다 날려버릴 수 있다.