전임자가 만든 프로그램중 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 의 텍스트 추출 : 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 인터페이스에서 이용하기 위해선 설치중 하단의 체크박스를 선택해야 한다.
크게 다른것은 아니니까 당황하지 않길 바란다. 참고로 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 "완료"