전임자가 만든 프로그램중 pdf 를 이미지(JPG)로 변환하는 프로그램이 있는데, 여러 가지 이유들로 걷어내고 새롭게 만들게 되었다. 나와 같은 상황에 처한 개발자들이 삽질하는 것을 막기 위해 글을 올린다.


블로그 제목이 Publishing Programming for Mac OS X 이지만, 몇가지 사정으로 이 프로그램은 Win 용 Acobat Pro 8 의 COM 인터페이스를 이용한 DLL 형태로 만들게 되었다. 이유부터 설명한다. 

MS SQL Server 상에 트렌젝션(데이터량) 이 크다. 트랜젝션이 크지 않았으면 DB 쪽 처리만 Mac OS X Server 에서 ASP.NET 기반의 SOAP 을 통해 처리했었을 것이다.

윈도우 기반 영업시스템에서 호출하거나 재사용이 가능해야 한다.


개발 환경은 다음과 같다.

win 용 Acrobat pro 8
Win 2003 Server
Win XP
Visual Basic 6
ImageMagick -6.4.8-10-Q8


각 작업별로 사용되는 라이브러리는 다음과 같다. DB 나 XML 을 사용하는 것은 MSDN 을 찾기 바란다.

pdf -> jpg 환  :  Acobat  Pro
pdf 의 텍스트 추출 : Acobat  Pro
변환된 jpg 의 썸네일 생성 : ImageMagick


Adobe CS3 는 windows Server 2003 이상에서만 설치된다. 2000 Server 에서 설치되는 편법이 있다고 들었지만 분명 이유가 있어서 OS 를 제한했다고 여겨진다. 설치를 진행하면서 알게된 사실인데, 서버에 설치되는 제품은 인디자인과  Acrobat Pro 8 정도 밖엔 안된다. 포토샵과 일러스트레터는 안깔린다.


▶ImageMagick

ImageMagick 은 이미지 변환툴중 역사도 오래되었고 꾸준한 업데이트가 이루어지고 있는 라이브러리다. 또한 mac OS X 및 파이썬, 루비 등의 최신 언어에서도 접근이 가능한 인터페이스를 제공하고 있다. http://www.imagemagick.org 에서 최신 버전을 받기 바란다. 나는 ImageMagick-6.4.8-10-Q8-windows-dll.exe 를 사용했다.
파일명을 주목하자. Q 은 Color Depth 를 말하며 Q8은 8bit , Q16은 16bit 를 말한다. 디카 RAW 포멧도 아니니 처리 속도나 메모리를 고려해서 Q8 을 사용하기로 결정했다.
아래는 설치화면이다. COM 인터페이스에서 이용하기 위해선 설치중 하단의 체크박스를 선택해야 한다. 


대부분의 경우 Microsoft Visual C++ 2008 SP1 Redistributable Package 가 설치되어 있지 않다. 다운로드 페이지의 하단에 보면 링크가 있으니 받아서 설치하도록 한다. 영문이지만 사이트에 친절하게 설명되어 있으니 조급해 하지 말고 차근히 읽어 보시길 바란다.

※ ImageMagick 는 경로명에 한글이 들어가면 실행이 안된다. 반드시 영문으로 폴더 명 파일명을 사용하기 바란다.



▶개발시 주의할 점.
vbs 는 디버그가 어려워서 vb6 에서 작업한다음 조금 수정해서 vbs 파일에 붙이는 과정을 거치고 있다. Acrobat Pro 의 경우 vb6 에서 참조 를 통해 Adobe Acrobat 8.0 Type Library 를 사용할때와 vbs 에서 CreateObject("") 를 통해 개체를 만들때 이름이 조금씩 다르다.
크게 다른것은 아니니까 당황하지 않길 바란다. 참고로 Acrobat SDK 에 포함된 문서의 모든 예제는 CreateObject() 를 이용하고 있다.



▶개발시 주의할 점.
아래 소스는 개발전 테스트를 위해 만든 소스 이다. 참고하길 바란다.

Option Explicit

Dim gApp, gAVDoc, gPDFDoc
Dim gPDFSel, gPDFRect, gPDFPV
Dim gPDFPage, gPDFHL

Set gApp = CreateObject("AcroExch.App")
gApp.Hide   '화면이 뜨는 경우를 막기 위해서 명시적으로 처리함.
Set gPDFRect = CreateObject("AcroExch.Rect")
Set gPDFHL = CreateObject("AcroExch.HiliteList")

Set gAVDoc = CreateObject("AcroExch.AVDoc")
gAVDoc.Open "C:\Documents and Settings\cynosure\바탕 화면\[007디자인1면]2009010185-16.pdf", ""
Set gPDFDoc = gAVDoc.GetPDDoc
Set gPDFPV = gAVDoc.GetAVPageView
Set gPDFPage = gPDFPV.GetPage

'내용 추출
gPDFHL.Add 0, 32767
Set gPDFSel = gPDFPage.CreatePageHilite(gPDFHL)

Dim lngint
Dim strValue
For lngint = 0 To gPDFSel.GetNumText - 1
   strValue = strValue & gPDFSel.GetText(lngint)
Next


'jpg 파일 저장
Dim aa
Set aa = gPDFDoc.GetJSObject()
Call aa.SaveAs("/d/kk.jpg", "com.adobe.acrobat.jpeg")  'Acrobat 6.0 부터 safe path 가 적용됨. 자세한 내용은 js_api_reference.pdf 의 "safe path" 를 참조하세요.
Set aa = Nothing


'썸네일 생성
Dim objIO
Set objIO = CreateObject("ImageMagickObject.MagickImage.1")
Call objIO.Convert("d:\kk.jpg", "-resize", "50x36^!", "d:\t_kk.jpg")   'command line 명령어중 스페이스를 기준으로 나눔
Set objIO = Nothing


'마무리
gAVDoc.Close False
gApp.Exit


'개체 삭제
Set gPDFHL = Nothing
Set gPDFRect = Nothing
Set gPDFDoc = Nothing
Set gAVDoc = Nothing
Set gApp = Nothing

'MsgBox "완료"




+ Recent posts